Wednesday, December 22, 2010

Connect GRMON Debugger ke LEON3 via JTAG

Definisi:
1) GRMON adalah software debuger (debug monitor) untuk prosesor LEON. GRMON berkomunikasi dengan DSU (Debug Support Unit) yang ada di LEON, dan memungkinkan debugging secara non-intrunsive. Keterangan selengkapnya llihat disini.
2) LEON3 adalah versi ketiga LEON, sebuah prosesor open source 32-bit dengan arsitektur SPARC. Prosesor ini pertama kali dikembangkan oleh Jiri Gaisler dibawah Gaisler Research atau Aeroflex Gaisler. Informasi selengkapnya lihat disini.
3) JTAG adalah singkatan dari Joint Test Action Group, merupakan standard IEEE untuk interface IC debugging.

Untuk bisa mengkoneksikan GRMON debugger ke LEON3 menggunakan interface JTAG, berikut langkah-langkahnya (case LEON3 dijalankan di platform StratixII-60):
1. Install USB blaster
a. Untuk Windows-XP, drivernya bisa didownload disini.
b. Untuk Linux:
- Tambahkan line berikut pada /etc/udev/rules.d/40-permissions.rules

# Altera USB-Blaster
BUS=="usb", SYSFS(idVendor)=="09fb", SYSFS(idProduct)=="6001", MODE="0666", SYMLINK+="usbblaster"

- Buat file kosong .jtag.conf pada directory home user.
- Jalankan jtagconfig di terminal
- Jalankan perintah berikut:

$ sudo mount -t usbfs /dev/bus/ /proc/bus/usb/
$ killall jtagd
$ sudo /bin/jtagd
$ jtagconfig

2. Jalankan GRMON

Untuk Board CycloneIII:
LD_LIBRARY_PATH=/opt/altera9.1/quartus/linux grmon-eval -u -altjtag -jtagdevice 1 -freq 40 -mcfg1 0x10f808ff -mcfg2 0x0000100f -mcfg3 0x000ff000 -stack 0x401f4000

Untuk Board StratixII S180:
LD_LIBRARY_PATH=/opt/altera9.1/quartus/linux ./grmon-eval/linux/grmon-eval -u -altjtag -mcfg2 0xe5006e60 -mcfg1 0x00400888 -mcfg3 0x000ff000 -stack 0x40ef0000 -jtagdevice 1

Seharusnya akan muncul screen berikut:


grmon-eval dapat didownload disini. Selamat mencoba. =)

Monday, September 6, 2010

Alur Pembuatan Chip

Ketika berdiskusi dengan banyak orang di luar bidang desain chip apalagi di luar bidang elektronika, saya menyadari bahwa orang-orang seringkali langsung membayangkan pabrik dan mesin-mesin yang besar ketika mendengar tentang pembuatan chip. Hal ini tentu tidak sepenuhnya salah. Namun saya akan coba membahasnya secara lebih luas lewat tulisan ini.

Pada dasarnya, pembuatan chip dapat digolongkan menjadi dua alur besar. Yang satu tidak melibatkan proses produksi, sedangkan yang satu lagi melibatkan proses produksi.

Tahapan yang pertama adalah proses desain, di mana chip masih belum diproduksi. Ketika tahap desain telah selesai, barulah chip dikerjakan dalam tahapan kedua, yaitu manufaktur.

Umumnya perusahaan yang melakukan kedua tahapan tersebut adalah industri yang berbeda. Industri yang melakukan tahapan desain disebut fabless semiconductor company, contohnya Qualcomm, NVIDIA, dan Xilinx. Xirka dan Versatile Silicon yang merupakan industri chip Indonesia tergolong dalam kategori industri fabless ini. Sedangkan industri yang melakukan tahapan manufaktur (semiconductor device fabrication) contohnya STMicroelectronics, Analog Devices, Texas Instruments, TSMC, dan SMIC. Namun ada juga industri yang menerapkan strategi yang agak berbeda, yaitu melakukan kedua tahapan tersebut dalam satu naungan perusahaan, misalnya Intel dan AMD.

Dalam tahap desain, chip yang akan dibuat akan melalui banyak proses, baik hal-hal non teknis maupun hal-hal teknis. Hal non-teknis meliputi peninjauan rencana bisnis, negosiasi, penetapan spesifikasi produk secara umum, aspek manajerial, dan lain-lain. Sedangkan segi teknis di antaranya meliputi penetapan spesifikasi teknis, pembuatan arsitektur umum, penerjemahan spesifikasi menjadi rancangan yang lebih detil, proses verifikasi, debugging, prototyping, dan testing. Secara singkat, tujuan dari tahap desain adalah  menerjemahkan suatu ide menjadi suatu rancangan detil yang siap untuk diproduksi. Beberapa indikator keberhasilan tahap adalah apakah produk tersebut inovatif, teruji dengan baik dalam berbagai kondisi, dan tidak kalah penting juga proses desainnya cukup cepat sehingga dapat dipasarkan tepat waktu.

Dalam tahap manufaktur, rancangan chip yang sudah dihasilkan pada tahap desain akan dijadikan produk yang sesungguhnya. Tahapan ini melibatkan proses mekanis, kimiawi, dan berbagai proses produksi lainnya. Hasil akhirnya, chip atau IC (Integrated Circuit) yang awalnya berupa rancangan menjadi sesuatu yang nyata secara fisik, yang biasanya terlihat seperti kepingan pada gambar berikut. Salah satu indikator keberhasilan tahap ini adalah yield, yaitu persentase produk yang tidak cacat dari keseluruhan hasil produk.
Sumber: http://www.vsilicon.com/

Setelah melalui kedua tahap tersebut sekalipun, sebuah chip belum bisa digunakan oleh masyarakat luas karena ia masih berupa komponen tunggal. Masih banyak tahap berikutnya yang harus dilalui, seperti integrasi dengan rangkaian pendukung dalam PCB (Printed Circuit Board), pembuatan software untuk membuat chip tersebut bisa berjalan sebagai suatu sistem, pembuatan kemasan produk, dan tahap-tahap lain yang bergantung pada tujuan penggunaan chip tersebut.

Wednesday, September 1, 2010

Tips Instalasi Multiple Modelsim

Modelsim yang bekerja baik untuk systemC adalah versi 6.2j (linux), sedangkan modelsim yang support OVM adalah versi 6.5b (linux). Jadi apakah kita harus install dan reinstall modelsim versi yang sesuai dengan current work? Kalau di linux kedua modelsim ini bisa diinstall bersama dan bisa dipakai secara bersamaan!. Kuncinya :
1. Install tiap versi pada folder berbeda. Misalnya yang 6.2j pada :

/home/mul/modeltech

sedangkan yang 6.5b pada :

/home/mul/CAD/

2. Jangan export variable pada .bashrc, tapi pada dua file yang beda. Misalnya setting.for.6.2j.sh dan setting.for.6.5b.sh

[mul@localhost ~]$ cat setting.for.6.2j.sh
export PATH=$PATH:/home/mul/modeltech/bin:/opt/sparc-elf-3.4.4/bin/
export LM_LICENSE_FILE=/home/mul/modeltech/license.dat
[mul@localhost ~]$ cat setting.for.6.5b.sh
export PATH=$PATH:/home/mul/CAD/modeltech/bin
export LM_LICENSE_FILE=/home/mul/license-6.5b/license.dat

Nah kalau kita mau pakai versi 6.2j, tinggal ketik di console :

source /home/mul/setting.for.6.2j.sh


kalau kita mau pakai versi 6.5b, tinggal ketik di console :

source /home/mul/setting.for.6.5b.sh


selamat mencoba

Wednesday, August 25, 2010

Menyoal C/C++ Sebagai Pengganti Matlab

Dalam membuat permodelan algoritma, kita sering menemui permasalahan matriks, vector, dan beberapa masalah aljabar. Matlab/Octave adalah bahasa pemrograman yang paling powerful untuk menjawab permasalahan tadi. Tapi jika ingin beralih ke C/C++, ada beberapa alternatif library yang bisa dicoba. Tentu saja matrix bisa dibuat menggunakan pure C/C++, tapi akan sangat tidak nyaman. Saya sendiri masih pemula dalam masalah ini tapi akan saya coba ulas sedikit disini.

Pertama, GSL (GNU Scientific Library). GSL, seperti kebanyakan software GNU lainnya, ditulis dalam C, walau ada beberapa wrapper untuk C++ nya. Syntax GSL cukup mudah dipahami bagi yang sudah terbiasa dengan Matlab/Octave. Misalnya, untuk menjumlahkan b yang bertipe scalar dengan nilai dari vector a pada posisi I, alih-alih menulis dengan notasi a(i)+=b, notasi GSL lebih wordy:

gsl_vector_float_set(a,i,gsl_vector_float_get(a,i)+b)

Sayangnya, example code GSL sangat minim. Bahkan di installer-nya tidak ada example sama sekali. beberapa contoh code menggunakan GSL bisa dilihat di dokumentasi online-nya.Ketika pertama kali mencoba membuat penjumlahan dua buah matrix (menggunakan gsl_matrix_add), saya menemui kesulitan karena dengan tidak adanya example code mengenai ini.

Berikut salah satu contoh code pakai GSL:

#include < stdio.h >
#include < gsl/gsl_matrix.h >
int main (void)
{
    int i, j;
    const int SIZE_ROW = 10;
    const int SIZE_COLUMN = 3;

    gsl_matrix * m1 = gsl_matrix_alloc (SIZE_ROW, SIZE_COLUMN);

    for (i=0; i < SIZE_ROW; i++ )
        for (j=0; j < SIZE_COLUMN; i++ )
            gsl_matrix_set (m1, i, j, (i+1) * (j+1));

    printf("\nmatrix m1: \n");
    for (i=0; i < SIZE_ROW; i++ )
        for (j=0; j < SIZE_COLUMN; i++ )
            printf ("%g ", gsl_matrix_get (m1, i, j));
        printf("\n");
        }

    gsl_matrix_free (m1);
    return 0;
};

Kedua, Armadillo. Armadillo disponsori oleh The University of Queensland. Kelebihan Armadillo (bagi saya) dibanding GSL adalah syntax yang lebih mirip dengan Matlab. Lebih lagi, mereka  membuatkan conversion table, sebagai perbandingan syntax Matlab dengan Armadillo. Tentu ini membuat para pengguna Matlab nyaman. Kekurangan yang cukup signifikan adalah bahwa umur project ini masih baru, belum matang, dan fitur-fitur-nya masih belum banyak, sehingga kemungkinan besar akan menyulitkan programmer. Silakan bandingkan fitur-fitur yang dimiliki Armadillo dengan GSL. Pun project turunan GSL jauh lebih banyak ketimbang Armadillo.

Berikut salah satu contoh code pakai Armadillo.

#include < iostream >
#include < armadillo >

using namespace std;
using namespace arma;

int main(int argc, char** argv)
{
    mat A = randu(4,5);
 
    cout << "A*trans(B) =" << endl;
    cout << A*trans(B) << endl;
 
    return 0;
}

Ketiga, IT++. IT++ lebih menspesialisasikan diri untuk signal processing dan telekomunikasi. Bahkan contoh implementasi yang mereka tawarkan sangat banyak. Class library yang ada banyak menyinggung masalah telekomunikasi, misalnya AWGN channel, modulasi, bahkan komputasi rumit seperti BCH dan Turbo Coding.

Pertama kali buka website-nya langsung disuguhi ini “As you might have noticed, the current IT++ maintenance and development team has not been active for some time. Therefore, IT++ is looking for volunteers who are interested in further maintenance and/or development of this library.” Well, tampaknya IT++ tidak lebih ramai dari dua C/C++ library sebelumnya. IT++ ini dirintis oleh Chalmers University, Swedia. Secara pribadi saya kurang tertarik dengan IT++. Kita lewat saja tanpa mencobanya.

Keempat, SPUC. SPUC (Signal Processing Using C++) agak lebih mirip dengan IT++. Menyediakan class library cukup komplit untuk aplikasi signal processing dan telekomunikasi. Sekilas SPUC ini cukup komplit, project ini juga cukup matang. Operasi vector dan matrix cukup lengkap dan convinient.

Overall, semua kembali pada pilihan masing-masing. Saya melihat SPUC dan GSL cukup potensial. Pertanyaan yang harus dijawab adalah: apakah library yang disupport sudah komplit? Mulai dari tipe data matriks, vector, sampai fix point? Bagaimana dengan kompatibilitas Unix/Windows-nya? Kemudahan porting dari Matlab-nya? Kemudahan integrasi dengan platform lainnya (misalnya SystemVerilog DPI)? Dan pertanyaan-pertanyaan lainnya yang muncul dari engineer modeling, dan system architect. So, apa pilihan Anda? Tolong share disinya ya... (ya2n)

Saturday, August 7, 2010

Ilustrasi ISI (bag.2)


Postingan sebelumnya menggambarkan terjadinya Inter-symbol Interference(ISI) dalam suatu ilustrasi sederhana. Kali ini akan saya jelaskan ilustrasi sederhana lainnya menggunakan rumusan sederhana dari transmit signal itu sendiri.
Jika kita mengirimkan sinyal \textbf{s} dan channel impulse response yang diderita sinyal kita sebut \textbf{H}, maka disisi penerima akan kita peroleh sinyal \textbf{y} = \textbf{H} \ast \textbf{s}
Berikut adalah ilustrasi dari 3 blok* sinyal dengan 3 jenis respon kanal, dan hasil konvolusinya (bisa direpresentasikan dalam perkalian matriks) tanpa menggunakan guard interval:


Daerah kosong pada matriks \textbf{H} adalah zeros (tidak ditampilkan/ditulis). A_{t-1} menunjukkan nilai A pada saat t-1.
Daerah yang diarsir gelap pada matriks hasil konvolusi adalah blok sinyal yang kita inginkan (blok sinyal biru). Dari ilustrasi tersebut terlihat bahwa pada bagian ini terdapat interferensi yang tidak dapat dihindari, berasal dari sinyal blok sebelumnya(berwarna merah) dan blok setelahnya(berwarna hijau).
*term blok digunakan pada sistem single carrier, sehingga ilustrasi diatas lebih tepat disebut Inter-Block Interference. Akan tetapi kasus yang sama bisa pula berlaku untuk symbol pada multicarrier. Artinya 1 blok disana bisa dianalogikan dengan 1 symbol OFDM

Ilustrasi ISI (bag.1)

Inter-symbol Interferense (ISI) adalah permasalahan yang tidak dapat dihindari dalam sistem komunikasi wireless. Setiap sinyal yang ditransmit akan mengalami multipath, sehingga receiver akan menerima sinyal yang notabene merupakan hasil akumulasi dari message yang sama yang terdelay dan dengan power yang bervariasi.

Berikut adalah ilustrasi mengenai multipath :


Base station memancarkan satu frame data. Receiver menerima beberapa sinyal yang datang bersamaan dimana setiap sinyalnya berisikan message yang sama.



Ilustrasi disamping menunjukkan apa yang terjadi pada sisi penerima. Setiap frame yang diterima di sisi penerima mengalami waktu kedatangan yang berbeda (delay) dan power yang berbeda (bisa dilihat dari tinggi tiap frame yang berbeda). Asumsi synchronizer pada sisi penerima sempurna mendapatkan awal frame dimulai dari awal frame merah.


Setiap frame terdiri dari beberapa simbol. Ilustrasi diatas menunjukkan ada 2 simbol dalam 1 frame. Karena semua frame berisikan message yang sama, maka akumulasi simbol pada waktu yang sama tidak menghilangkan informasi/data pada simbol tersebut. Garis putus-putus pada ilustrasi diatas menunjukkan batas dari simbol pertama. Bisa kita lihat adanya akumulasi simbol pertama dan simbol kedua, dimulai dari frame ungu. Sebagian simbol pertama frame ungu akan terakumulasi dengan simbol kedua frame merah. Begitu pula pada frame hijau, dan seterusnya. Kondisi inilah kita sebut dengan inter-symbol interference.

Thursday, August 5, 2010

Mendefinisikan Kembali Performa Verifikasi

"If I had asked people what they wanted, they would have said faster horses." Henry Ford.

Verification adalah proses yang memakan banyak resource baik waktu maupun orang. Dengan banyaknya memakan resource, performa menjadi perhatian utama bagi tim verifikasi. Dalam proses verifikasi, sangat dimungkinkan dilakukan invonasi-inovasi hanya demi meningkatkan performa verifikasi, dan inilah yang membedakan antara verification project yang sudah matang dan belum matang.

Apakah performa itu? 

Kecepatan? Ya, jelas kecepatan merupakan salah satu aspek terpenting dalam pekerjaan. Tapi jika sebuah tim mengambil jalan yang salah dalam pekerjaannya, secepat apapun proses itu sudah tidak berarti lagi.

Pencapaian target? Hmm.. Ya, sejauh ini kita menilai performa sebuah tim dari pencapaian yang dicapainya. Setiap progress meeting kita selalu ditanya pencapaian target bukan?

Bagaimana dengan efisiensi? Efisiensi-perbandingan target yang sudah dicapai dengan effort (usaha) yang sudah dikeluarkan untuk mencapainya-dari sisi project, cukup penting untuk diperhatikan.

Terakhir mungkin kualitas? Bagaimanapun cepat, efisien, dan sesuai target-nya sebuah project, kalau kualitas yang dihasilkan jelek, hasilnya tidak terlalu berguna, bahkan gagal.

Bagaimana performa dipandang dari sisi verifikasi?

Mari kiita lihat dari real problem dalam verifikasi. Performa verifikasi harus dinilai berdasarkan tujuan tim verifikasi, yaitu:

1. Memperkecil resiko dan menemukan bug secepatnya.
2. Tidak hanya tahu ada bug atau tidak, tapi juga harus tahu apakah verifikasi sudah selesai atau tidak, agar tingkat kepercayaan meningkat.
3. Meningkatkan productifitas dan efisiensi verifikasi agar makin banyak pekerjaan yang dapat diselesaikan; get more work done.

Bicara tentang get more work done, Henry Ford, pencipta perusahaan Ford Motor Company, dan salah satu pencetus modernisasi sistem produksi dengan assembly line, adalah salah satu contohnya. Quotation dia yang cukup terkenal adalah, "If I had asked people what they wanted, they would have said faster horses." 



Fokus pada real problem

Henry Ford berhasil memfokuskan dirinya pada real problem dan berpikir outside the box. Simaklah lanjutan ceritanya disini: ketika muncul pertanyaan apa yang dibutuhkan orang dan mendapati jawaban bahwa yang dibutuhkan adalah kuda yang lebih cepat, maka sebenarnya terjadi dialog lanjutan seperti ini:

Henry: Jadi kenapa Anda menginginkan kuda yang lebih cepat?
Farmer: Saya ingin pergi ke toko lebih cepat.
Henry: Dan kenapa Anda butuh pergi ke toko lebih cepat?
Farmer: Karena saya ingin menyelesaikan pekerjaan lebih banyak di sawah.

Lihatlah, sebenarnya si Farmer bukan ingin kuda yang lebih cepat, tapi lebih kepada agar bisa menyelesaikan banyak pekerjaan di sawahnya. OK, kuda lebih cepat adalah salah satu solusi, tapi inti dari permasalahan sebenarnya adalah "Bagaimana agar bisa menyelesaikan lebih banyak pekerjaan di sawah." Dan berpikir outside the box,  kita akan mendapati berbagai solusi jitu lainnya yang bahkan akan menjadikan Farmer bisa lebih banyak menyelesaikan pekerjaannya.

Nah, kembali pada topik. Bagaimana meningkatkan performa verifikasi? Sekali lagi, fokus pada real problem, berpikir outside the box, agar get more work done. Usaha meningkatkan performa sudah terlihat dari munculnya HVL (High Level Language), assertion-based verification, coverage-driven verification, reusable verification environment, Verification IP, dan lain-lain. Teknologi-teknologi tersebut perlu kita pilah-pilah dan adaptasi sebagai wujud usaha meningkatkan performa verifikasi.

Semua effort dan usaha yang dilakukan para praktisi dan profesional verifikasi punya satu muara yang sama sebagaimana Henry Ford kepada Farmer, yaitu pada real problem: (1) menemukan bug secepatnya, (2) Tahu kapan verifikasi selesai, dan (3) get more work done

So, bagaimana performa tim verifikasi mu hari ini? (yayan ;-)

Wednesday, August 4, 2010

Script Konversi Text Linux – Cygwin

Script linux saya tidak mau jalan di cygwin. Solusinya adalah membuat file kosong di cygwin dengan fungsi touch. Selanjutnya dengan menggunakan text editor (crimson, notepad, dsb), isi script linux di copy paste ke file kosong tersebut sebagai scrip baru untuk cygwin.

Begitu juga dengan file-file log yang digenerate dalam cygwin, tidak bisa diolah benar dalam linux. Hal ini karena dos menghasilkan ^M sebagai enter, akibatnya kalau file di cat maka jadi ada spasi tambahan. Agar file DOS bisa diolah dalam linux maka harus dikonversi dulu dengan menggunakan fungsi dos2unix :

[mul@localhost ~] dos2unix gob.log

selanjutnya digunakan sed untuk menghilangkan spasi tambahan:

[mul@localhost ~] sed -i -e :a -e ‘$!N;s/\n//;ta’ gob.log

Nah kalau masih ada ^M yang belum hilang, gunakan cat dan tr :

[mul@localhost ~] cat -A gob.log | tr -d ^M$ > temp.log

[mul@localhost ~] mv temp.log gob.log

Referensi :
http://www.google.co.id/search?hl=id&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&q=bash+script++%22remove+^M%22&btnG=Telusuri&aq=f&aqi=&aql=&oq=&gs_rfai=

Tuesday, August 3, 2010

Hubungan Eb/No dan SNR

Sering dijumpai dalam paper atau sumber tertulis lainnya bentuk performa transmisi data dalam sistem telekomunikasi berdimensi BER vs Eb/No. Lalu ada pula dalam dimensi BER vs SNR. Lalu mana yang benar ?

Dua-dua nya bisa digunakan. Eb/No sering dipakai karena orang ingin melihat sejauh mana performa dari shannon limit. SNR dipakai orang yang hanya ingin melihat power sinyal keseluruhan, tidak memperdulikan seberapa besar energi bit, sejauh mana performanya dari batas shannon limit, apakah menggunakan guard interval atau tidak.

Berikut konversi dari SNR ke Eb/No atau sebaliknya :

\frac{S}{N} = \frac{Eb}{No} \, R \, M \, \frac{1}{J} \, G

\frac{S}{N}[dB] = \frac{Eb}{No}[dB] + 10 log10(R) + 10 log10(M) + 10 log10(\frac{1}{J}) + 10 log10(G)

dimana R adalah bit rate, M adalah jumlah bit untuk setiap simbol konstelasi, J adalah sampling rate dan G adalah guard interval ratio.

Implementasi ROM/RAM pada FPGA dengan Altera Quartus dan MIF File

FPGA merupakan salah satu cara untuk implementasi desain RTL, disamping ASIC. Implementasi FPGA ini sangat dependen terhadap platform dipakai, sehingga vendor mana yang akan dipakai, cara implementasinya akan 'sedikit' berbeda. Yang jelas software shyntesizer-nya pasti berbeda, sehingga scriptnya pun berbeda (=p). Altera dan Xilinx adalah dua vendor FPGA yang paling banyak dipakai saat ini. Untuk kali ini, kita hanya akan bahas implementasi di Altera.

Dalam implementasi di Altera, terkadang perlu menge-map desain memory (ROM/RAM) kedalam library Altera, atau LPM MegaCore. Kelebihan memakai LPM ini adalah kita bisa membuat initialization file sebagai nilai default ROM/RAM tersebut, sehingga, untuk RAM, tidak perlu ditulis terlebih dahulu sudah langsung bisa dibaca isinya. Untuk ROM, initialization file ini merupakan suatu keharusan karena ROM tidak bisa ditulis, hanya bisa dibaca.

Untuk membuat RAM Altera, pakai Quartus MegaWizard. Caranya install dulu program Quartus (Quartus 9.0 student edition bisa didownload dari website Altera, tutorial instralasi quartus ada di halaman download di blog ini), lalu buka Quartus > Tools > MegaWizard. Atau bisa juga dipanggil dari console dengan cara berikut (jangan lupa set path Quartus pada Environment Setting):

% qmegawiz &

Setalah itu muncul MegaWizard GUI yang dengan mudah dapat dipakai untuk generate Altera Memory, baik RAM maupun ROM (tutorial selengkapnya mengenai Altera MegaWizard dapat didownload di halaman Download di blog ini). Ketika generate Altera Memory, baik RAM maupun ROM, kita akan ditanya lokasi initialization file. 


Pada Altera, initialization file ini bisa dibuat degan format Intel Hex atau juga dengan format Altera MIF file. Untuk Altera MIF file, berikut contoh formatnya:

WIDTH = 8;  %isi dengan lebar bit data
DEPTH = 8;  %isi dengan jumlah data yang ada

ADDRESS_RADIX = HEX;  %isi dengan format format address 
DATA_RADIX = HEX;     %isi dengan format data 
                      %pilihan format adalah: BIN,DEC,HEX,OCT
                      
CONTENT BEGIN
        0       :       07;  % isi dengan 
        1       :       06;  % ADDRESS :  VALUE 
        2       :       05;
        3       :       04;
        4       :       03;
        5       :       02;
        6       :       01;
        7       :       00;
END;

Mudah bukan? Kita bisa isi MIF file ini baik dengan format biner, hexa, desimal, maupun oktal. Tinggal sesuaikan setting radixnya. Selamat mencoba! (yayan)

Menyisipkan Persamaan di Halaman Web

Seringkali kita ingin menyisipkan persamaan matematika di halaman web. Karena tidak ada tool yang memadai, kita asal saja menuliskannya dengan teks ASCII biasa. Akibatnya, persamaan menjadi susah dibaca. Misalnya, jika seharusnya suatu persamaan mengandung integral ditampilkan seperti persamaan di bawah ini:
maka kita tidak bisa melakukannya. Bagaimana caranya untuk menuliskan lambang minus tak hingga? Bagaimana pula untuk menuliskan notasi integral? Susah sekali bukan?

Sayangnya, belum ada cara yang praktis dan mudah untuk menyisipkan persamaan seperti di atas. Anda bisa saja mengikuti tips untuk memformat html seperti yang ditunjukkan di sini. Tapi, perlu perjuangan sangat keras untuk sekedar menghasilkan persamaan sederhana seperti di atas.

Cara yang lain adalah dengan menggunakan MathML. Sayangnya, menggunakan MathML tidak mudah. Memang sudah ada editor untuk mempermudah penulisan persamaan, tapi tetap saja tidak semua browser mendukungnya. Chrome dan Safari tidak bisa menampilkan MathML.

Ada cara terakhir yang mungkin sedikit repot, tapi hasilnya bisa ditampilkan di browser apapun. Cara ini memanfaatkan LaTeX. Itu artinya, kita harus memasang LaTeX terlebih dahulu di komputer kita. Dengan demikian, kita juga harus paham notasi LaTeX untuk menuliskan persamaan. Setelah itu, source LaTeX untuk persamaan tersebut diubah ke dalam gambar yang bisa kita sisipkan di halaman web kita. Memang repot jika kita melakukannya secara manual. Namun, untungnya sudah ada script untuk mempermudah proses tersebut. Oh ya, kita juga tetap membutuhkan Python dan dvipng untuk bisa menjalankan script tersebut. Selengkapnya bisa dilihat di sini. Kita juga bisa memakai alternatif yang lain.
Update 8 April 2010:
Sekarang latex sudah dipasang di blog ini, sehingga kita bisa menampilkan persamaan seperti $\sum_{i=1}^nx_i$

Tips & Trick Shell Scripting (1) - Filename, Path, Directory

Dalam scripting terkadang kita membutuhkan informasi nama file, nama folder/directory, atau path ke directory/folder tersebut sehingga kita bisa membuat file log, status, dan lain-lain dengan nama dan path yang sama tapi dengan extension berbeda secara otomatis. Berikut trick-nya:

1. Nama file.
% basename  | cut -d. -f1

2. Nama directory.
% dirname

3. Absolute path directory dan file.
% echo "`pwd``basename `"

Complete script:

#!/bin/bash
# - filename: newname.sh
name=`basename $1`
newname=`basename $1 | cut -d. -f1`
dir=`dirname $1`

echo "Lokasi: $dir`"
echo "Nama file asli: $name"
echo "Lokasi file baru: $newname.NEW"

Simpan script dalam newname.sh, lalu ubah permissionnya menjadi executable.
% chmod +x newname.sh

Jika dijalankan, script tersebut akan menampilkan hasil berikut:
% ./newname.sh newname.sh

Lokasi: ./
Nama file asli: newname.sh
Lokasi file baru: newname.NEW

Mudah bukan? (yayan ;-)




QUIZ:

Kira-kira apa output yang keluar jika script di-run dengan cara berikut?
% ./newname.sh ../script/newname.sh

Friday, July 30, 2010

Training Altium DXP 2004

Secara umum Software DXP 2004® ini merupakan bundel software yang tergabung atas beberapa software desain dari desain schematic, pcb, vhdl dll. Pada modul ini kita hanya akan fokuskan pada tiga fungsi dasar dxp yaitu desain schematic, pcb dan library .

Pada dasarnya hal yang kita lakukan dalam membuat sebuah pcb adalah merangkai atau menghubung-hubungkan setiap komponen yang kita butuhkan pada worksheet, sesuai dengan rangkaian yang sudah kita desain, kemudian setelah itu ‘gambar’ rangkaian yang sudah kita buat di dalam worksheet kita ‘pindahkan’ ke sebuah papan pcb kosong, lalu kita atur penempatan setiap komponen di pcb dan terakhir kita lakukan pengkabelan antar komponen sesuai gambar pada worksheet, kemudian langkah terakhir dilakukan pencetakan atas pcb yang kita desain.

Hal lain yang perlu diperhatikan dalam penggunaan program ini adalah dalam hal library yang menjadi bagian dari software karena terkadang komponen yang kita butuhkan tidak terdapat pada library yang ada. Untuk itu, otomatis kita harus membuat sebuah library baru atau mengganti komponen tersebut dengan yang sudah ada. Untuk pembuatan library akan diterangkan tersendiri pada modul terpisah. Selamat menikmati sajian ini dan semoga berhasil…. (ingram ;-p ).

baca selengkapnya di : Training Altium DXP 2004

Thursday, July 29, 2010

Mengenal Kanal Rayleigh

Pertama-tama ingin rasanya saya mengucapkan puji syukur Alhamdulillah.. blog indonesianchipengineer.blogspot.com ini udah bisa dilaunching, dan semoga memberikan kontribusi untuk ikut mencerdaskan bangsa khususnya dalam bidang iptek ..amiin.

Dalam sebuah pengembangan produk chipset untuk komunikasi tanpa kabel (wireless communication) dibutuhkan suatu pemodelan system yang berfungsi untuk memudahkan manganalisis dengan cepat dan sederhana jika dibandingkan metode analisis dilakukan langsung di sisi hardware. Untuk melakukan pemodelan sistem komunikasi ini maka akan tidak lepas dari skema berikut :

kali ini kita akan banyak berbicara mengenai kanal wireless, apa dan bagaimana sih kanal wireless itu???. Dalam prinsip telekomunikasi (komunikasi jarak jauh), kanal adalah media untuk menghubungkan transmitter dan receiver yang terpisah pada sekian jarak. Media ini bisa dengan menggunakan kabel atau pun menggunakan tanpa kabel (wireless). Pada kasus media wireless biasanya menggunakan teknologi frekuensi tinggi seperti VHF atau UHF. Ketika suatu sinyal ditransmisikan dari transmiter menuju receiver maka sinyal itu tidak selalu langsung diterima oleh receiver, tetapi memantul dulu ke suatu benda dan baru sinyal pantulan itu diterima receiver. Mekanisme pantulan ini dapat dijelaskan dengan skema berikut :


Seperti halnya teknologi komunikasi menggunakan kabel, maka lintasan yang free distorsi diharapkan mampu juga diberikan oleh sistem komunikasi wireless. Untuk mengetahui bahwa sistem wireless mampu menyediakan komunikasi yang punya free distorsi dapat dilihat dari respon frekuensi dan respon phasenya. Berikut adalah contoh bagaimana di sistem komunikasi yang ideal tanpa ada loss dan tanpa distorsi.

dan berikut juga bisa diperhatikan bagaimana respon frekuensi jika kita menggunakan kanal rayleigh yang banyak multipath dan banyaknya noise

Ada dua skenario propagasi sinyal dari pemancar ke penerima yang cukup merepresentasikan kondisi lapangan :
1. Skenario dimana sinyal langsung (direct signal) yang kuat datang bersama beberapa sinyal pantul (multipath) yang lebih lemah. Contoh : lapangan yang luas, jalan-jalan yang cukup lebar dll. Kondisi ini biasa dimodelkan dengan distribusi Rice.
2. Skenario dimana sinyal hanya ada beberapa sinyal multipath pantul yang diterima oleh receiver tanpa ada sinyal langsung. Skenario ini biasa dikatakan skenario terburuk (the worst case scenario). Kondisi ini biasa terjadi di kota kota besar yang banyak gedung gedung bertingkat dan mobil yang membuat semakin banyak sinyal yang terpantul. Kondisi ini biasa dimodelkan dengan distribusi Rayleigh.

Nah kali ini kita akan membicarakan dan mengenal lebih jauh mengenai kanal yang terdistribusi Rayleigh. Untuk bisa mengenal lebih jauh mengenai kanal ini maka 'wajib' hukumnya kita lebih dulu tahu mengenai PDF dan CDF. PDF atau Probability Density Function adalah probabilitas berapa banyak sample sinyal (dalam tegangan) terhadap jumlah sample seluruhnya. PDF dapat dirumuskan sebagai berikut :

f(r) = (r/sigma^2)*exp(-(r^2/2*sigma^2)) untuk r >= 0 ...persamaan (1)

dimana r adalah tegangan sinyal.

distribusi ini memiliki 1 parameter yaitu mode atau modal (sigma), nilai modal atau mode ini menunjukkan nilai distribusi tegangan sinyal. Beberapa parameter lain dari distribusi rayleigh ini dapat dilihat pada tabel berikut:

Table 1: parameter distribusi rayleigh sebagai fungsi dari mode-nya
mode : sigma
median : 1.18*sigma
mean : 1.25*sigma
rms : 1.14*sigma
standart deviasi : 0.655*sigma

dengan mengintegrasikan PDF maka CDF pun bisa dirumuskan sebagai berikut :

CDF(R) = Prob(r<=R) = 1-exp(-R^2/2*sigma^2) ...persamaan (2)

Bisa dilihat dari gambar perbandingan antara PDF dan CDF pada distribusi Rayleigh, pada sumbu x adalah nilai tegangannya, sedangkan pada sumbu y adalah fungsi PDF dan CDF nya. Grafik PDF adalah yang berbentuk seperti gunung sedangkan yang lainnya itu adalah grafik CDF. CDF sangat membantu mengetahui probabilitas suatu sinyal random itu level tegangannya kurang atau sama dengan suatu treshold tertentu. Di awal sudah dijelaskan mengenai parameter mode atau modal, nah kalau dikaitkan dengan gambar diatas, modal adalah titik tertinggi dari grafik PDF yang memiliki arti bahwa pada level tegangan itulah paling banyak sinyal terdistribusi.

Langkah memverifikasi apakah suatu sinyal itu terdistribusi rayleigh atau tidak :
1. Ketika kita meng-capture sinyal dari suatu alat ukur, maka kita tidak tahu bahwa sinyal itu sinyal Ricean atakah Rayleigh. dan biasanya yang terlihat disitu dalam satuan power dBm/dBw.
2. Ubah dulu menjadi satuan watt, kemudian diubah lagi menjadi satuan tegangan. Bisa kan??
3. setelah menjadi satuan tegangan, maka langkah berikutnya adalah mengubah satuan tegangan itu menjadi tegangan ternormalisasi terhadap nilai modal/mode-nya. pertanyaannya : kenapa harus dilakukan normalisasi??, ya karena nilai tegangan ini cukup kecil sehingga perlu dinormalisasi sehingga cukup mudah melihatnya dan akan mudah nanti men-convertnya dalam PDF ataupun CDF.

cara normalisasinya bisa memperhatikan tabel 1, dimana nilai mean = 1.25*sigma
sehingga, sigma = mean(v)/1.25
nah v' = v/sigma
v'= v/mean(v)/1.25 .... persamaan (3)

4. langkah berikutnya adalah membuat PDF dan CDFnya.
5. kemudian bisa dibandingkan grafik PDF dan CDF nya antara teori dengan prakteknya. PDF dan CDF secara teori dapat menggunakan persamaan 1 (untuk PDF) dan persamaan 2 (untuk CDF). kalau gambarnya mirip ya bisa dikatakan sinyal yang lagi diuji mendekati distribusi Rayleigh.

mudah kan..??
silahkan mencoba temen temen..

Reference : Modeling Wireless Channel Propagation
(F. Perez Fontan dan Marino Espineira)

Pengenalan Shell Script

Shell -- A hard rigid usually calcareous covering or support of an animal: the hard or though often thin outer covering of an egg (as of a bird or reptile) -- Merriam Webster Online Dictionary

Shell (baca: Linux Shell), selain sebagai command interpreter, juga bisa dimanfaatkan sebagai bahasa pemrograman yang powerful di Linux. Sebagai command interpreter, shell bisa dimanfaatkan sebagai penghubung antara user dengan OS kernel untuk mengeksekusi perintah (UNIX command).

Sebagai bahasa pemrograman, program shell (baca: script) bisa ditumpangkan pada aplikasi untuk dipakai bersama dengan compiled binary, tool, utilities, atau lainnya sehingga membentuk sebuah aplikasi yang mempunyai hubungan erat antara OS kernel dengan program. Dengan bahasa sedernana, memadu-padankan UNIX command dan program.

Ada beberapa macam shell yang tersedia, dan yang paling terkenal adalah CSH (singkatan dari C-shell), dan BASH atau SH (singkatan dari Bourne-again shell), shell script yang sering saya gunakan. C-shell dibuat oleh Bill Joy saat menjadi mahasiswa master UC Berkeley, Bourne-again shell, sesuai namanya, dibuat oleh Stephen Bourne tahun 1978. Sebagai catatan: beberapa mengatakan bahwa C-shell sudah tidak direkomendasikan lagi karena ada beberapa masalah--seperti yang publish oleh Usenet post tahun 1993.

Bagi saya, kelebihan utama shell script adalah: quick programming. Tanpa harus membuat program yang rumit dan kompleks, shell mampu memjalankan task yang rumit dan kompleks, tapi dengan konsekuensi computing power rendah (lambat). Dengan begitu, shell sangat cocok digunakan untuk system administrative task, maupuan sistem-sistem yang harus dirun berulang kali (repetitive), seperti otomatisasi, task-task rutin, cek status, dan lain-lain. Walaupun tidak dipungkiri shell juga bisa digunakan untuk kerpeluan lain semisal: data parsing, editing, bahkan arithmetic operation.

Pada proses desain chip, shell script sering dimanfaatkan untuk proses kompilasi, menjalankan simulasi, sampai analisa data (parsing) yang dibutuhkan untuk dilakukan berulang-ulang menggunakan loop utility pada shell. Sebagai contoh untuk sebuah desain RTL, kita ingin melakukan kompilasi dengan opsi berbeda-beda tiap kali compile, memanggil program simulator seketika kompilasi selesai, dan melakukan analisa terhadap hasil simulasi seketika simulasi selesai. All done by one!

Contoh fitur favorit shell yang sering saya pakai di pekerjaan verifikasi adalah input argument. Berikut contohnya:

case $1 in
-x) "Argument pertama x.";;
-y) "Argument kedua y.";;
esac

case $2 in
-x) "Argument pertama x.";;
-y) "Argument kedua y.";;
esac

Script diatas akan mengeluarkan kata "Argument pertama x. Argument kedua y." jika dirun dengan opsi:

% ./arg.sh x y

Mudah bukan? Kita bahkan bisa membuat compilation option berbagai macam hanya dengan beberapa line code. Kemudahan untuk dipelajari (quick programming), fleksibilitas, dan kemampuannya sebagai command interpreter menjadi alasan utama kenapa saya menyukai shell script ini. (yayan)

Untuk memulai mencoba shell scripting, tunggu: Tutorial Shell Scripting bagi Pemula.

Bahan baccan:

Wednesday, July 28, 2010

Pengenalan Chip Verification

“If I have seen further [than certain other men], it is by standing upon the shoulders of giants.” Isaac Newton

Verification bukan kata yang familiar ketika saya masih mahasiswa. Tak lain tak bukan karena verification tak penting dan tak perlu diperhatikan oleh desainer pemula—dan mahasiswa adalah desainer pemula; hanya membuat desain untuk tugas kulliah. Semenjak bergabung dengan perusahaan dan naik pangkat jadi desainer produk komersil, verification menjadi hal yang lebih diperhatikan, tapi masih kurang diperhatikan. Itu disebabkan karena perusahaan kami termasuk start up company dimana sistem kerja masih berkembang. Tapi sejalan dengan makin berkembangnya perusahaan, dan makin kompleknya desain yang dibuat, verification akhirnya mendapat tempat spesial. Tim khusus pun dibuat, dan anggotanya adalah pecahan dari tim RTL desainer.

Sekarang, dimana kompleksitas chip jauh bertambah dibanding satu dekade lalu, verification menjadi salah satu bagian krusial yang tak bisa dikesampingkan. Penelitian menyebutkan, 70% resource dihabiskan untuk verification, sedangkan 30% lainnya untuk desain. Dan fakta membuktikan, penyebab utama respin adalah kesalahan functional pada chip. Dan yang paling bertanggung jawab terhadap functional error adalah: verification.

Ada beberapa cara mendefinisikan verification. Salah satunya definisi yang paling mendekati adalah (1) proses membandingkan design intent dengan observed behavior, (2) memutuskan apakah keduanya ekuivalen atau tidak, (3) menganalisa dan menilai apakah masih ada functional error atau tidak, (4) dan menggaransi ketidakpastian adanya functional error. Desain disebut verified jika observed behavior sesuai dengan yang design intent, pada level keyakinan tertentu. Kalimat terkahir perlu digaris bawahi karena seringkali tidak semua case bisa ditest, terutama untuk chip yang kompleks dan melibatkan banyak test case.



Diagram berikut menunjukkan hubungan antara spesifikasi, design intent, dan implemention, yang digambarkan dengan lingkaran yang saling overlapped. Setiap lingkaran merepresentasikan perilaku (behavior) pada label, dan setiap bidang yang saling berpotongan merepresentasikan perilaku yang salling berpotongan antar label yang berpotongan.

Lingkaran pertama (AυEυGυH), design intent, adalah maksud dari desainer atau apa yang tergambarkan dalam otak desainer. Lingkaran kedua (BυEυFυH), specification, adalah maksud dari spesifikasi desain (biasanya datang dari system architect, product manager, production team, atau bahkan marketing team). Lingkaran ketiga (CυFυGυH), implementation, adalah perilaku yang terejawantahkan oleh desain RTL.

Terkadang spesifikasi tidak sama dengan design intent, misalnya karena kesalahan pemahaman desainer terhadap spesifikasi yang diinginkan oleh manajer, dan terkadang design intent tidak sama dengan implementasi karena kurang pengalamannya RTL designer dalam mengimplementasikan maksud (coding) desainnya kedalam RTL. Kedua kemungkinan sama besarnya walaupun relatif lebih banyak kemungkinan kedua.

Bisa disimpulkan bahwa inti verifikasi adalah bagaimana agar ketiga lingkaran tersebut, yang tadinya tidak bersinggungan seluruhnya menjadi bersinggungan. Artinya imlementasi sesuai dengan maksud desainer, dan maksud desainer sesuai dengan spesifikasi chip yang diberikan, dengan kata lain: NO FUNCTIONAL ERROR. So, verifikasi itu simple bukan? (yayan)