Menguasai std_logic VHDL: Status, Resolusi, dan Analisis Gelombang
Dalam VHDL, tipe std_logic adalah dasar untuk mewakili satu bit pada kawat fisik. Tidak seperti tipe integer biasa yang digunakan dalam tutorial sebelumnya, std_logic menawarkan himpunan nilai yang lebih kaya yang memodelkan perilaku sinyal digital dunia nyata dengan lebih akurat.
Sementara pin digital biasanya membawa logika tinggi ('1') atau logika rendah ('0'), sinyal fisik juga dapat muncul dalam keadaan high-impedance, lemah, atau tidak terdefinisi. Tipe std_logic menangkap semua kemungkinan ini, menjadikannya tipe yang paling sering digunakan dalam desain VHDL.
Artikel ini adalah bagian dari seri Tutorial VHDL Dasar.
Di bawah ini adalah daftar lengkap nilai yang dapat dipegang oleh sinyal std_logic:
'1'
Logika 1
'0'
Logika 0
'Z'
High impedance
'W'
Sinyal lemah; 0 atau 1 tidak terdefinisi
'L'
Lemah 0 (pulldown)
'H'
Lemah 1 (pullup)
'-'
Don't care
'U'
Belum diinisialisasi
'X'
Tidak diketahui (beberapa driver)
Dalam sebagian besar tutorial kita akan fokus pada nilai utama '1' dan '0', dan sesekali 'U' dan 'X' untuk menyoroti kesalahan desain. Keadaan lainnya adalah fitur lanjutan yang berguna untuk memodelkan protokol seperti I²C atau membuat bus tri-state.
Beberapa proses mendorong sinyal std_logic yang sama, bahasa menggunakan fungsi resolusi untuk menentukan nilai yang dihasilkan. Mekanisme ini mencegah kesalahan waktu kompilasi atau waktu eksekusi dalam simulasi dan didefinisikan oleh tabel resolusi, seperti ditunjukkan di bawah.
U
X
0
1
Z
W
L
H
-
U
X
X
1
1
1
1
1
X
1
U
X
0
X
0
0
0
0
X
0
U
U
U
U
U
U
U
U
U
U
U
X
X
X
X
X
X
X
X
X
U
X
0
1
Z
W
L
H
X
Z
U
X
0
1
W
W
W
W
X
W
U
X
0
1
L
W
L
W
X
L
U
X
0
1
H
W
W
H
X
H
U
X
X
X
X
X
X
X
X
-
Latihan
Tutorial video ini menunjukkan cara mendeklarasikan sinyal std_logic dan memvisualisasikannya dalam simulasi gelombang.
Kode VHDL akhir yang dihasilkan dalam latihan ini ditampilkan di bawah ini:
library ieee; use ieee.std_logic_1164.all; entity T10_StdLogicTb is end entity; architecture sim of T10_StdLogicTb is signal Signal1 : std_logic := '0'; signal Signal2 : std_logic; signal Signal3 : std_logic; begin process is begin wait for 10 ns; Signal1 <= not Signal1; end process; -- Driver A process is begin Signal2 <= 'Z'; Signal3 <= '0'; wait; end process; -- Driver B process(Signal1) is begin if Signal1 = '0' then Signal2 <= 'Z'; Signal3 <= 'Z'; else Signal2 <= '1'; Signal3 <= '1'; end if; end process; end architecture;
Jendela gelombang di ModelSim setelah menekan run dan memperbesar timeline:
Gelombang dengan kursor ditempatkan pada bagian lain dari siklus sinyal berulang:
Analisis
Latihan ini mengilustrasikan fungsi resolusi VHDL dalam tindakan. Dengan memeriksa gelombang daripada mengandalkan output teks saja, kita mendapatkan gambaran yang lebih jelas tentang bagaimana beberapa driver berinteraksi pada sinyal std_logic.
Signal1 diubah oleh satu proses, jadi nilainya bergantian secara bersih antara '0' dan '1'. Sinyal yang didorong oleh Driver A dan Driver B menyelesaikan sesuai dengan tabel yang ditampilkan sebelumnya.
Sinyal
Driver A
Driver B
Hasil
Signal2
'Z'
'Z'
'Z'
Signal2
'Z'
'1'
'1'
Signal3
'0'
'Z'
'0'
Signal3
'0'
'1'
'X'
Kesimpulan
std_logic adalah tipe VHDL yang paling banyak digunakan untuk sinyal satu bit.
Bayangkan sinyal std_logic sebagai kawat fisik yang membawa nilai digital.
Saat beberapa proses mendorong sinyal std_logic yang sama, fungsi resolusi menentukan nilai akhir.