Cara membuat proses dengan Daftar Sensitivitas di VHDL
Anda harus selalu menggunakan daftar sensitivitas untuk memicu proses dalam modul produksi. Daftar sensitivitas adalah parameter untuk proses yang mencantumkan semua sinyal yang sensitif terhadap proses tersebut. Jika ada sinyal yang berubah, proses akan aktif, dan kode di dalamnya akan dieksekusi.
Kita telah belajar menggunakan wait on dan wait until pernyataan untuk membangunkan proses ketika sinyal berubah. Namun, sejujurnya, ini bukan cara saya menulis sebagian besar proses saya.
Pos blog ini adalah bagian dari seri Tutorial VHDL Dasar.
Saat menulis kode VHDL, gaya penulisan tergantung pada apakah kode tersebut dimaksudkan untuk dijalankan hanya dalam simulator atau tidak. Jika saya sedang menulis kode simulasi, seperti yang telah kita lakukan dalam seri tutorial ini, saya selalu gunakan wait pernyataan untuk mengontrol proses. Jika saya menulis kode yang ingin saya buat implementasi fisiknya, saya tidak pernah gunakan wait pernyataan.
Sintaks untuk proses dengan daftar sensitivitas adalah: process(<signal1>, <signal2>, ..) is
begin
<main logic here>
end process;
Kekhasan penting dengan daftar sensitivitas adalah bahwa semua sinyal yang terbaca dalam proses harus berada pada daftar sensitivitas. Namun, simulator tidak akan memberi tahu Anda jika Anda gagal menambahkan sinyal ke daftar sensitivitas, karena itu legal dalam bahasa VHDL. Masalahnya adalah jika Anda gagal melakukan ini, kode akan berperilaku berbeda saat disintesis dan digunakan dalam implementasi fisik.
Dalam VHDL-2008, kata kunci all diizinkan untuk digunakan alih-alih mencantumkan setiap sinyal. Sayangnya, sebagian besar perangkat lunak sintesis tidak mendukung revisi bahasa VHDL yang lebih baru ini.
Olahraga
Dalam tutorial video ini kita akan belajar cara membuat proses menggunakan daftar sensitivitas di VHDL:
Kode terakhir yang kita buat dalam tutorial ini:
entity T09_SensitivityListTb is
end entity;
architecture sim of T09_SensitivityListTb is
signal CountUp : integer := 0;
signal CountDown : integer := 10;
begin
process is
begin
CountUp <= CountUp + 1;
CountDown <= CountDown - 1;
wait for 10 ns;
end process;
-- Process triggered using Wait On
process is
begin
if CountUp = CountDown then
report "Process A: Jackpot!";
end if;
wait on CountUp, CountDown;
end process;
-- Equivalent process using a sensitivity list
process(CountUp, CountDown) is
begin
if CountUp = CountDown then
report "Process B: Jackpot!";
end if;
end process;
end architecture;
Output ke konsol simulator saat kita menekan tombol run di ModelSim:
Kita dapat melihat dari cetakan bahwa kedua proses berperilaku sama. Itu karena proses dengan daftar sensitivitas secara definisi setara dengan proses dengan wait on di akhir proses.
Proses dengan daftar sensitivitas biasanya digunakan dalam kode yang dimaksudkan untuk disintesis. Kode tersebut biasa disebut sebagai kode register-transfer level (RTL). Ini adalah konvensi, tetapi ada alasan bagus untuk itu. Meskipun beberapa wait on dan wait until pernyataan dapat disintesis, sulit untuk mengetahui jenis perangkat keras apa yang akan dibuat.
Bawa Pulang
Proses dengan daftar sensitivitas setara dengan proses dengan wait on di akhir
Semua sinyal yang sedang dibaca dalam suatu proses harus ada dalam daftar sensitivitas
Gunakan wait pernyataan dalam kode simulasi, dan daftar sensitivitas dalam kode RTL