Home > Tips, VHDL > Kesalahan yang Umum Saat Membuat Code VHDL

Kesalahan yang Umum Saat Membuat Code VHDL

Kenapa saya menulis ini, karena tugas akhir saya menggunakan bahasa VHDL. Berhubung saya belum jago ngoding vhdl, pada saat saya mengerjakan tugas akhir saya terjadi banyak hambatan. Biasanya hambatan itu berupa error atau hasil yang tidak diingikan. Karena tidak menemukan sumber error akhirnya nyari di gugel cuman terkadang susah nyarinya. Disini saya lebih menekankan pada kesalahan yang masih umum dan pernah saya temui, entah saya atau teman saya yang mengalaminya saat ngoding vhdl menggunakan Quartus. Berikut ini kesalahan atau salah presepsi yang pernah saya alami dan sebabnya:

1. Lupa untuk include library, ini kesalahan yang hampir tidak pernah terjadi, tapi buat yang pertama kali ngoding vhdl ini pernah terjadi, dan saya melihatnya sendiri. Error yang langsung terlihat adalah “object “STD_LOGIC_VECTOR” is used but not declared” atau bisa juga suatu COMPONENT tidak di-declared. Jadi yang perlu kita lakukan adalah menambahkan library saja, library standart-nya sih:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_SIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;

2. Sebelum ngebahas salah penulisan perlu diingat disini bahwa code VHDL BERBEDA dengan code pemrograman seperti bahasa C ataupun yang lain. Bukan masalah syntax-nya, tapi code VHDL tidak dijalankan berurutan dari atas ke bawah, code VHDL bukan PROGRAM seperti yang dibuat dengan bahasa C. Perlu diingat code VHDL adalah representasi dari rangkaian yang kita susun dalam bentuk code, jadi oleh Quartus code VHDL akan dibentuk rangkaiannya, sehingga dapat dibilang semua baris code akan dijalankan berbarengan. Kecuali untuk rangkaian sekuensial dalam proses yang tidak semua baris code akan dijalankan secara bersamaan.

3. Bila kita menggunakan program tertentu misalnya Quartus, perlu diingat bahwa kita tidak bisa menambahkan delay, delay akan di-generate secara otomatis oleh program tersebut, sehingga kita tidak bisa menambahkan delay tertentu.

4. Nama file vhd tidak sama dengan nama entity yang dipakai, misal untuk file yang bernama blog.vhd, pada entity tertulis “ENTITY blog1 IS PORT(…”, ini akan menimbulkan error “Error: Top-level design entity “nama_file” is undefined”, perlu diingat bahwa nama entity harus sama dengan nama filenya, atau apabila pesan error “entity “blog1” is used but not declared”, berarti bukan nama file yang bermasalah tapi nama entity tidak sama dengan nama behavior pada ARCHITECTURE.

5. Lupa untuk menggunakan tanda petik satu untuk signal yang bertipe STD_LOGIC dan petik dua untuk signal yang bertipe STD_LOGIC_VECTOR, error yang disampaikan bisa berupa “Error (10500): VHDL syntax error at …. near text “‘”;  expecting “(“, or an identifier, or  unary operator,” jika lupa memberi petik dua untuk STD_LOGIC_VECTOR

6. Lupa untuk memberi tanda titik koma (;) setiap akhir baris, ini kesalahan yang umum terjadi bahkan saat membuat code program dalam bahasa C, biasanya errornya ngasih tau di baris setelah tanda (;) tidak ada, misalnya saat kita lupa memberi tanda (;) di baris 16, errornya bisa berupa “Error (10500): VHDL syntax error at blog.vhd(17) near text “b”;  expecting “;”” yang memberitahu kesalahan ada pada baris 17

7. Operator IF, CASE dan FOR hanya bisa dipakai di dalam PROCESS statement, karena operator tadi merupakan bagian dari sekuensial statement, error yang terjadi bisa berupa “… near text “IF”;  expecting “end”, or “(“, or an identifier (“if” is a reserved keyword), or a concurrent statement,” dibarengi dengan error “… near text “IF”;  expecting “;”, or an identifier (“if” is a reserved keyword), or “architecture”

8. Pada saat menulis statement di dalam PROCESS, lupa untuk menuliskan BEGIN atau END PROCESS, dari pesan error bisa langsung terlihat bila kesalahannya lupa menuliskan BEGIN“… near text “IF”;  expecting “begin”, or a declaration statement,”, tapi bila lupa menuliskan END PROCESS error-nya terkadang menipu dan sulit ditemukan jika code kita udah sangat panjang, karena error sama sekali tidak memberi tentang END PROCESS dan menghasilkan pesan error yang sama seperti pada BEGIN yaitu “… near text “IF”;  expecting “begin”, or a declaration statement,

9. Selain END PROCESS, ada juga END IF yang harus diberikan setiap kita membuat IF statement, dan perlu diingat hanya untuk IF, ketika ELSIF tidak perlu ditambahkan END IF, error yang dihasilkan sangat mengesankan karena sama sekali tidak memberitahu kita kalo kita lupa memberi tanda END IF, yaitu “… near text “PROCESS”;  expecting “if”

10. Memasukkan WHEN pada PROCESS statement, hal ini mungkin sangat jarang terjadi kecuali orang tersebut memang tidak tahu bahwa WHEN tidak bisa digunakan pada block PROCESS, apalagi pesan error-nya meyakinkan yaitu “Error (10500): VHDL syntax error at … near text “WHEN”;  expecting “;””. Error-nya mantap sekali sama sekali tidak member tahu bahwa WHEN tidak bisa digunakan pada block PROCESS.

11. Melakukan assignment terhadap sinyal dua kali, ibaratnya kalo di bahasa pemrograman di baris satu (a = 1;) kemudian di baris dua (a = 2;), ini tidak masalah, hanya saja pada VHDL perlu diingat bahwa yang dibuat adalah rangkaian, dan tidak mungkin satu kebel berisi dua nilai kecuali tempat kabelnya ada 2 (array). Terkadang kita sudah tahu hal ini tapi bisa saja melakukan kesalahan ini, misal saat diluar block PROCESS statement kita mengisi nilai signal “wrong” dengan suatu nilai dengan maksud inisialisasi, dan di dalam PROCESS kita mengisi signal “wrong” dengan sesuatu, yang seharusnya inisialisasi pun harus di dalam block PROCESS, pesan error yang ditimbulkan adalah “Error (10028): Can’t resolve multiple constant drivers for net “wrong” at blog.vhd(16)

12. Kesalahan melakukan assignment terhadap suatu sinyal yang lebarnya tidak sama, misal sinyal std_logic_vector berukuran 10 bit di-assign ke sinyal dengan ukuran 8 bit, error yang ditimbulkan biasanya langsung memberitahu kesalahan kita misal “Error (10344): VHDL expression error at blog.vhd(22): expression has 10 elements, but must have 8 elements

Nah itu tadi error yang pernah saya alami atau saya lihat pada orang lain, mungkin masih banyak yang lain, cuman karena sisanya tidak ingat atau saya rasa sangat mudah untuk menemukan error-nya atau berhubungan sama library tertentu jadi tidak saya tulis. Mungkin kalo ada yang punya error yang lain bisa di-share disini, barangkali bisa saya bantu dan bisa saya tambahkan disini. Semoga bermanfaat dan terima kasih😀

Categories: Tips, VHDL
  1. October 20, 2011 at 8:47 pm

    efek ngasisten sisdig tadi jo? ni link bisa disebar ke mereka nih.

    • October 20, 2011 at 9:03 pm

      sisdig? arsikom maksudnya? yoyoi gara2 jadi asisten kesekian kali jadi pengen nulis tentang ini, walaupun sebenernya banyak error dari LPM-nya sih tadi

  2. October 21, 2011 at 7:36 am

    asisten 5 kali berturut2, bahkan modul pun tidak diperlukan lagi m(_ _)m

    • October 21, 2011 at 8:10 am

      5? baru 4 kok😀

  3. October 23, 2011 at 9:48 pm

    menyimak… poin 10… wah wah… ane pake case di dalem process… dan case itu ada whennya kan… jadi ga boleh?

    Process(Next_State)
    begin
    case Next_State is
    when “01” => Next_State case R(0) is
    when ‘0’ => R(63 downto 32) R(63 downto 32) R<=R;
    end case;

    tanya dikit donk k… itu si nextstate yang Next_State<="10" error itu… emang ga boleh pake when itu ini yg dimaksud?

    • October 23, 2011 at 10:14 pm

      kalo when di case gak masalah, itu gak salah nulis case-nya? Atau karna awa buka dari hape jd kodingannya gak lengkap?

      • October 23, 2011 at 10:26 pm

        buka dari mozilla ternyata tetep sama, gak salah tuh ada case dalam case? apa kodingannya error pas diposting di wordpress?
        daripada maksa pake 2 case gitu mending pake IF, trus coba baca manual pake CASE😀
        trus coba pahami sensitivity list, walaupun gak bikin error sih kalo gak lengkap

  4. October 24, 2011 at 9:47 pm

    Mantap brader.
    Jadi inget ngoding potongan MIPS Arsikom asisten si Johan, gagal compile ternyata kesalahan awak CUPU banget dah, makanya dapet B ya Jo??😀

  5. October 24, 2011 at 11:40 pm

    kesalahannya apa sih? Lupa awa :p
    Kadang beda family settingan lpm bisa beda, beneran dapet B? Emang modul berapa yg dapet jelek?

  6. October 25, 2011 at 7:42 am

    :unsure:
    Modul sebelumnya seinget awa lancar. Tapi modul terakhir pas integrasi blok2 komponen (potongan) MIPS hasil simulasinya ngaco parah😄

  7. October 25, 2011 at 8:18 am

    tp kalo masih jadi sih mestinya minimal dapet 75, ati2 tes akhir nilainya lumayan lho

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: