Categories
FPGA

Abstraksi dan Sintesis VHDL – VHSIC Hardware Description Language

VHDL is a language for describing digital electronic systems. It arose out of the United States Government’s Very High Speed Integrated Circuits (VHSIC) program, initiated in 1980. In the course of this program, it became clear that there was a need for a standard language for describing the structure and function of integrated circuits (ICs). Hence the VHSIC Hardware Description Language (VHDL) was developed, and subsequently adopted as a standard by the Institute of Electrical and Electronic Engineers (IEEE) in the world. – Peter J. Ashenden

Abstraksi VHDL

VHDL dapat menggambarkan berbagai tingkat abstraksi yang berbeda-beda, mulai dari fungsi-fungsi sampai ke tingkat gerbang-gerbang-nya. Abstraksi artinya menyembunyikan implementasi detail, misalnya seorang perancang dapat menyatakan perkalian dua bilangan (A = B * C) dengan beberapa cara:

  • Menggunakan operator “*” dalam VHDL, yaitu a<=b*c;
  • Merancang pengali atau multiplier pada aras gerbang (gate level);
  • Merancang pengali pada aras layout (layout level).

Contoh di atas menunjukkan bahwa suatu fungsi dapat diimplementasikan pada tiga tingkat abstraksi yang berbeda: RTL (Register Transfer Level), Logika (aras gerbang) dan Layout.

Suatu algoritma dapat dinyatakan pada tingkat fungsional (functional level), misalnya suatu algoritma pengendali dapat dinyatakan dan disimulasikan pada suatu komputer. Suatu algoritma tidak perlu mengandung informasi pewaktuan.

Watak (behaviour) dan waktu dapat dinyatakan pada tingkat deskripsi watak (behavioural level), dalam tingkat ini tidak diperlukan informasi tentang struktur (artinya tidak didefinisikan implementasi register-register, operator-operator, antarmuka dengan RAM, dan lain-lain). Suatu model deskripsi watak (behavioural model) dapat dinyatakan sebagai modul-modul fungsi dan antarmuka di antara fungsi-fungsi tersebut; modul-modul dapat mengandung sebuah atau lebih fungsi-fungsi dan relasi-relasi waktu.

RTL atau Register Transfer Level atau tingkat transfer register mengandung suatu pernyataan deskripsi watak dalam mesin kondisi (state machine) yang sinkron, jalur-jalur data, operator-operator (+,*,<,>,..), register-register dan lain-lain. Sedangkan untuk menyatakan persamaan-persamaan dalam Aljabar Boolean atau suatu jaringan gerbang dilakukan pada tingkat gerbang atau logika (Logic or Gate Level).

Sintesis dilakukan antar masing-masing aras, misalnya antara tingkat register dan aras logika, kode-kode VHDL diterjemahkan dalam bentuk gerbang-gerbang dan flip-flop, mengikuti rancangan yang telah diminimisasi (Sjoholm dan Lindh, 1997).

Proses Sintesis

Menggunakan perangkat lunak sintesis atau melakukan sintesis berarti perancang tidak perlu melakukan penerjemahan, meminimisasi dan pemenuhan batasan-batasan waktu (time constraints) dari kode-kode VHDL yang telah dituliskannya. Dengan menggunakan piranti sintesis, proses pemodelan, verifikasi dan implementasi dapat dipadukan. Keterpaduan tersebut dapat mengurangi jumlah-jumlah kode yang di-maintained dan sekaligus mengurangi resiko ketidak-konsistenan antar kode-kode yang dituliskan (dalam blok-blok program yang berbeda).

Jenis-jenis sintesis yang dikenal antara lain (Sjoholm dan Lindh, 1997):

  • Sintesis Logika (Logic Synthesis), menerjemahkan dan meminimisasikan fungsi fungsi Boolean ke dalam bentuk representasi gerbang-gerbang digital;
  • Sintesis RTL (RTL-Register Transfer Level Synthesis), sama seperti sintesis logika, namun sekaligus menerjemahkan konstruksi bahasa sekuensial ke dalam bentuk gerbang-gerbang dan flip-flop (state machine);
  • Sintesis Watak (Behavioral Synthesis), dapat menggunakan kembali (reuse) sebuah komponen perangkat keras untuk lebih dari sebuah konstruksi bahasa sekuensial dan paralel.

Aturan-aturan Sintesis untuk FPGA

VHDL adalah bahasa deskripsi perangkat keras dan simulasi, yang pada awalnya tidak digunakan sebagai masukan sintesis, sehingga agar kode-kode VHDL yang dituliskan dapat tersimulasikan sama sebelum dan sesudah sintesis harus diikuti aturan-aturan sebagai berikut (Xilinx, 1995):

  • Hindari penggunaan pernyataan “wait for xx ns“, dengan xx menyatakan angka waktu dalam satuan nano detik. Pernyataan ini tidak dapat disintesis menjadi suatu komponen, sehingga fungsi rancangan yang tersimulasi akan berbeda dengan rancangan yang tersintesis;
  • Hindari penggunaan pernyataan “… after xx ns“, dengan xx menyatakan angka waktu dalam satuan nano detik. Pernyataan ini akan diabaikan oleh kebanyakan perangkat lunak sintesis, sehingga fungsi rancangan tersimulasi dan tersintesis akan berbeda;
  • Gunakan pernyataan “case…” untuk proses paralel serta optimasi kecepatan, “if – else” untuk optimasi area;
  • Lakukan pengurutan dan pengelompokan fungsi-fungsi aritmatika, hal ini berkaitan dengan optimasi area dan/atau keceapatan proses. Misalnya, kedua pernyataan berikut di bawah ini:
    • hasil <= A + B + C + D;
    • hasil <= (A + B) + (C + D);
  • Pernyataan pertama menghasilkan konstruksi tiga buah penjumlah yang disusun secara seri, sedangkan pernyataan kedua hanya menghasilkan konstruksi dua buah penjumlah yang disusun secara paralel (yaitu untuk (A+B) dan (C+D)) dan sebuah penjumlah secara seri, yang akan menjumlahkan hasil dari kedua penjumlah yang disusun paralel tersebut, ini disebabkan tidak semua VHDL compiler dilengkapi dengan fasilitas untuk menyeimbangkan pohon parse dari ungkapan aritmatika;
  • Hindari pengisian nilai awal (initial value), karena hal ini akan diabaikan oleh kebanyakan perangkat lunak sintesis. Misalnya, jangan gunakan pernyataan:
    • variable SUM:INTEGER:=0;

Daftar Pustaka

  • Sjoholm, Stefan dan Lennart Lindh, 1997, “VHDL For Designers”, Prentice Hall Europe, Maylands Avenue, British.
  • Xilinx, 1995, “HDL Design for FPGA”, Xilinx Incorporated.