VHDL #9: Kode Program Concurrent dalam Pemrograman VHDL

December 25, 2025

Kode program concurrent adalah kode program VHDL yang dieksekusi secara parallel (bersamaan dalam satu waktu), berbeda dengan kode sequential yang dieksekusi berurutan. Berikut adalah penjelasan tentang cara membuat kode program concurrent menggunakan:
  1. Operator.
  2. Pernyataan WHEN.
  3. Pernyataan GENERATE.
  4. Pernyataan BLOCK.

 

9.1 Membuat Kode Program Concurrent Menggunakan Operator

Dalam pemrograman VHDL, operator dapat digunakan untuk melakukan operasi aritmatika atau logika pada sinyal dalam kode concurrent. Contoh operator yang umum digunakan adalah AND, OR, NOT, +, *, dan lain sebagainya. Lihat Tabel 1.
Tabel 1. Daftar operator dalam pemrograman VHDL
Program 1 di bawah ini adalah contoh sederhana kode program concurrent menggunakan operator:
Program 1:

Penjelasan program 1:

  • c adalah hasil operasi AND antara a dan b.
  • d adalah hasil operasi NOT dari a.
  • Kedua operasi ini dieksekusi secara paralel.

 

Contoh 9.1: Multiplexer #1

Gambar 1. Multiplexer 4-input dengan 2-bit selector (s1 dan s0)
Sumber: Circuit Design With VHDL- Volnei A. Pedroni – Page 68
Program 2 adalah contoh aplikatif kode program concurrent untuk membuat rangkaian multiplexer 4-input (a, b, c, d) dengan 2-bit selector (s0 dan s1). Gambar 1 merupakan ilustrasi multiplekser 4-input dengan 2-bit selector. Output “y” harus sama dengan input yang dipilih oleh bit selector, s1 dan s0. Kode program concurrent implementasinya dapat dituliskan dengan menggunakan operator logika sebagai berikut:
Program 2:

Hasil simulasi program 2 (Contoh 9.1) dapat kita lihat pada gambar 2.


Gambar 2. Hasil simulasi – Contoh 9.1

 

9.2 Membuat Kode Program Concurrent Menggunakan Pernyataan WHEN

Dalam pemrograman VHDL, pernyataan WHEN dapat digunakan untuk mengimplementasikan logika kondisional dalam kode concurrent. Ada dua bentuk utama pernyataan WHEN dalam hal ini, yaitu pernyataan WHEN/ELSE (WHEN sederhana) dan pernyataan WITH/SELECT/WHEN (WHEN terpilih).
Setiap kali pernyataan WITH / SELECT / WHEN digunakan, semua permutasi (Baris kode yang berada di bawahnya) harus diuji, sehingga kata kunci OTHERS seringkali berguna. Kata kunci penting lainnya adalah UNAFFECTED, yang sebaiknya digunakan ketika tidak ada tindakan yang akan dilakukan. Berikut ini adalah contoh kode program concurrent yang dibuat dengan menggunakan kedua jenis pernyataan WHEN.

9.2.1 Pernyataan WHEN/ELSE

Syntax:

Program 3:


 

9.2.2 Pernyataan WITH/SELECT/WHEN

Syntax:

Program 4:


Catatan:

• Pernyataan WHEN/ELSE digunakan untuk kondisi sederhana dengan satu kondisi. Sehingga disebut dengan WHEN sederhana.
• Pernyataan WITH/SELECT/WHEN digunakan untuk kondisi yang lebih kompleks dengan beberapa pilihan. Sehingga disebut dengan WHEN pilihan (selected).
Berikut ini adalah contoh lanjut beberapa implementasi pernyataan WHEN dalam membuat kode program concurrent untuk pembuatan desain rangkaian digital:
Contoh 9.2: Multiplexer #2

Contoh 9.2 menunjukkan implementasi multiplekser yang sama seperti pada contoh 9.1, tetapi dengan representasi yang sedikit berbeda untuk input sel (gambar 3). Namun, di sini digunakan WHEN sebagai pengganti operator logika. Dua solusi disajikan: satu menggunakan pernyataan WHEN/ELSE (WHEN sederhana) dan yang kedua menggunakan pernyataan WITH/SELECT/WHEN (Selected WHEN). Hasil simulasinya mirip dengan hasil simulasi contoh 9.1.

 

Gambar 3. Multiplexer 4-input dengan 2-bit selector
Sumber: Circuit Design With VHDL- Volnei A. Pedroni – Page 70
Program 5.1: Solusi 1 – Input selector bertipe data STD_LOGIC_VECTOR

 

Program 5.2: Solusi 2 – Input selector bertipe data STD_LOGIC_VECTOR

Pada solusi di atas, Selector “sel” dapat dideklarasikan sebagai INTEGER, dalam hal ini kode programnya akan menjadi sebagai berikut:

 

Program 6.1: Solusi 1 – Input selector bertipe data INTEGER

 

Program 6.2: Solusi 2 – Input selector bertipe data INTEGER


 

Contoh 9.3: Three-State Buffer
Gambar 3. Three-state buffer
Sumber: Circuit Design With VHDL- Volnei A. Pedroni – Page 73
Three-state buffer pada gambar 4 harus menyediakan output = input ketika pin “ena” (enable) dalam kondisi rendah (low), atau jika tidak (pin “ena” dalam kondisi lain, OTHERS), maka output akan sama dengan ‘‘Z’’ (impedansi tinggi).
Program 7:

Hasil simulasi dari rangkaian yang disintesis dengan kode di atas ditunjukkan pada gambar 5. Seperti yang diharapkan, output tetap dalam keadaan impedansi tinggi saat “ena” bernilai tinggi, menjadi salinan input ketika “ena” bernilai rendah.

 

Gambar 5. Hasil simulasi – Contoh 9.3Gambar 5. Hasil simulasi – Contoh 9.3

Contoh 9.4: EncoderContoh 9.4: Encoder
Gambar 4. Encoder
Sumber: Circuit Design With VHDL- Volnei A. Pedroni – Page 74
Diagram tingkat atas dari encoder “n x m” ditunjukkan pada gambar 6. Kita mengasumsikan bahwa “n” adalah pangkat dua, sehingga m = log2n. Hanya satu bit input yang diharapkan bernilai tinggi pada satu waktu, yang alamatnya harus di-enkode pada output. Dua solusi disajikan, satu menggunakan pernyataan WHEN/ELSE, dan yang kedua dengan pernyataan WITH/SELECT/WHEN.
Program 8.1: Solusi 1

 

Program 8.2: Solusi 2


Perhatikan bahwa kode di atas memiliki daftar pengujian yang panjang (baris 12–20 dalam solusi 1, baris 13–21 dalam solusi 2). Situasinya menjadi lebih rumit ketika jumlah bit seleksi bertambah. Dalam kasus seperti itu, pernyataan GENERATE (Di bahas pada sub-bab 9.3 artikel ini) atau pernyataan LOOP (Dalam artikel berjudul VHDL #10: Kode Program Sequential dalam Pemrograman VHDL) dapat digunakan. Hasil simulasi (dari kedua solusi di atas) ditunjukkan pada gambar 7.

 

Gambar 7. Hasil simulasi – Contoh 9.4
Contoh 9.5: Arithmetic Logic Unit (ALU)

Sebuah ALU (Arithmetic Logic Unit) ditunjukkan pada gambar 8. Sesuai namanya, ini adalah rangkaian yang mampu mengeksekusi kedua jenis operasi, aritmatika dan logika. Cara kerjanya dijelaskan dalam tabel kebenaran pada gambar 8 juga. Output (aritmatika atau logika) dipilih oleh MSB dari selector “sel,” sedangkan operasi spesifik dipilih oleh 3-bit lainnya dari selector “sel.”

 

Gambar 8. Arithmatic Logic Unit (ALU)
Sumber: Circuit Design With VHDL- Volnei A. Pedroni – Page 74
Solusi yang disajikan pada program 9, selain hanya menggunakan kode konkuren, juga mengilustrasikan penggunaan tipe data yang sama untuk melakukan operasi aritmatika dan logika. Hal ini dimungkinkan karena adanya PACKAGE std_logic_unsigned dari LIBRARY IEEE. Dua sinyal, arith dan logic, digunakan untuk menyimpan hasil dari unit aritmatika dan logika, masing-masing, dengan nilai yang diberikan ke output yang dipilih oleh multiplexer.
Program 9:

Hasil simulasi solusi di atas ditunjukkan pada gambar 9.

 


Gambar 9. Hasil simulasi – Contoh 9.5

9.3 Membuat Kode Program Concurrent Menggunakan Pernyataan GENERATE

Pernyataan GENERATE adalah pernyataan concurrent lainnya (selain operator dan pernyataan WHEN). Pernyataan ini setara dengan pernyataan LOOP dalam kode program sequential dalam artian memungkinkan suatu bagian kode diulang beberapa kali, sehingga menciptakan beberapa contoh penugasan yang sama. Atau dengan kata lain pernyataan GENERATE digunakan untuk menghasilkan multiple instances dari suatu kode program concurrent.
Ada dua bentuk utama pernyataan GENERATE dalam hal ini, yaitu:
  1. Pernyataan FOR-GENERATE
  2. Pernyataan IF-GENERATE.

9.3.1 Pernyataan FOR-GENERATE

Pernyataan FOR-GENERATE digunakan untuk menghasilkan multiple instances dari suatu kode program concurrent untuk tipe data array atau vektor. Hal penting yang perlu diperhatikan bahwa pernyataan GENERATE dalam pernyataan FOR-GENERATE harus diberi label.
Syntax FOR-GENERATE:

Program 10 merupakan contoh program dengan penyataan FOR-GENERATE di dalamnya.

Program 10:

 

9.3.2 Pernyataan IF-GENERATE

Pernyataan IF-GENERATE digunakan untuk menghasilkan kode program VHDL yang tergantung pada kondisi, yaitu jika (IF) kondisi bernilai benar, maka lakukan sesuatu.
Catatan penting yang perlu diketahui terkait Pernyataan IF-GENERATE:
  • Catatan ke-1: Penyataan IF pada dasarnya merupakan pernyataan sequential.
  • Catatan ke-2: Dalam penyataan IF-GENERATE, penggunaan kata kunci ELSE tidak diperbolehkan.
  • Catatan ke-3: IF-GENERATE dapat disarangkan (Nested) di dalam pernyataan FOR-GENERATE, demikian juga sebaliknya juga dapat dilakukan.
  • Catatan ke-4: Sama seperti halnya dalam pernyataan FOR-GENERATE, pernyataan GENERATE dalam IF-GENERATE juga harus diberi label.
Syntax IF-GENERATE:

 

Syntax IF-GENERATE yang bersarang (Nested) di dalam pernyataan FOR-GENERATE


Program 11 merupakan contoh program dengan penyataan IF-GENERATE di dalamnya.

Program 11:

 

Program 12:


Catatan ke-5: Pernyataan GENERATE (dan hal yang sama berlaku untuk pernyataan LOOP) adalah bahwa kedua nilai batas suatu rentang (Batas atas dan batas bawah) harus statis (Nilainya tidak berubah-ubah atau dinamis).

Sebagai contoh, mari kita perhatikan Program 13 di bawah ini, di mana “choice” adalah parameter input (non-statis atau dinamis). Kode semacam ini umumnya tidak dapat disintesis.
Program 13:

Catatan ke-6: Compiler program VHDL akan menghentikan proses kompilasi kode program VHDL yang di dalamnya mengandung keluaran (output) sinyal yang dikendalikan oleh lebih dari satu kontrol program (Pernyataan atau operator). Kode program seperti ini sering disebut dengan Multiple-driven. Kode program semacam ini tidak akan di sintesis. Misalnya pada contoh kode program14 di bawah ini, tampak bahwa sinyal “output” dikendalikan oleh nilai “i” yang tidak statis (Dinamis), yaitu nilai “i” yang dinamis berubah dalam rentang 0 hingga 7.

Program 14:

Program 15 dan program 16 adalah contoh program VHDL lain yang mengandung multiple-driven sehingga compiler menghentikan proses kompilasinya.

Program 15:

 

Program 16:

 

9.4 Membuat Kode Program Concurrent Menggunakan Pernyataan BLOCK

Dalam pemrograman VHDL, pernyataan BLOCK digunakan untuk mengelompokkan pernyataan concurrent dalam satu blok, sehingga memudahkan pembacaan dan pengelolaan kode.
Ada dua jenis pernyataan BLOCK:
  1. Simple BLOCK.
  2. Guarded BLOCK.

9.4.1 Simple BLOCK

Pernyataan BLOCK, dalam bentuknya yang sederhana, merupakan cara untuk mempartisi kode program secara lokal. Pernyataan BLOCK memungkinkan sekumpulan pernyataan dikelompokkan menjadi sebuah BLOCK, dengan tujuan membuat keseluruhan kode lebih mudah dibaca dan dikelola. Hal ini akan berguna saat menangani kode program yang panjang. Sintaksnya ditunjukkan di bawah ini.
Syntax simple BLOCK:

Program 17 adalah contoh kode program VHDL yang mengandung pernyataan simple BLOCK.

Program 17:

 

9.4.2 Guarded BLOCK

Guarded BLOCK adalah jenis BLOCK khusus yang mencakup ekspresi tambahan, yang disebut ekspresi guarded. Pernyataan guarded dalam guarded BLOCK hanya akan dieksekusi jika ekspresi guaded bernilai BENAR.
Syntax guarded BLOCK:

Catatan penting terkait guarded BLOCK:

Hanya pernyataan concurrent yang dapat ditulis dalam sebuah BLOCK, namun dengan guarded BLOCK, rangkaian sequential juga dapat dibangun. Namun, ini bukanlah pendekatan desain yang umum. Sehingga jarang digunakan. Contoh 9.7 dan Contoh 9.8 adalah contoh kode program VHDL yang mengandung pernyataan guarded BLOCK.
Contoh 9.7: Implementasi Latch dengan Guarded BLOCK
Program 18:

Penjelasan Program 18:

Program 18 mengimplementasikan latch transparan. Di dalamnya, clk=’1′ (baris 12) adalah ekspresi guard, sementara q<=GUARDED d (baris 14) adalah pernyataan guarded. Oleh karena itu, q<=d hanya akan terjadi jika clk=’1′.
Contoh 9.8: Implementasi D-Flip-Flop dengan Guarded BLOCK
Program 19:

Penjelasan Program 19:

Program 19 merupakan sebuah rancangan desain flip-flop tipe-D yang sensitif terhadap positive-edge, dengan reset sinkron. Interpretasi kodenya mirip dengan Program 18. Di dalamnya, clk’EVENT AND clk=’1′ (baris 11) adalah ekspresi guard, sementara q <= GUARDED ‘0’ WHEN rst=’1′ (baris 13) adalah pernyataan guarded. Oleh karena itu, q<=’0′ akan muncul ketika ekspresi guard bernilai true dan rst bernilai ‘1’.

Author

Taufiq Dwi Septian Suyadhi

Degrees from electronics and industrial engineering. Enthusiast on electronics, embedded systems, and robotics. Motivation: “Never ending learning and sharing valuable knowledge to the others”.

Leave a Reply

Post Related

error: Content is protected !!