Cara menggunakan jenis VHDL yang paling umum:std_logic
Jenis yang paling umum digunakan dalam VHDL adalah std_logic . Pikirkan jenis ini sebagai bit tunggal, informasi digital yang dibawa oleh kabel fisik tunggal. std_logic memberi kami kontrol yang lebih halus atas sumber daya dalam desain kami daripada integer jenis, yang telah kita gunakan di tutorial sebelumnya.
Biasanya, kami ingin kabel dalam antarmuka digital memiliki nilai '1' atau '0' . Kedua nilai ini adalah satu-satunya nilai yang dapat dimiliki oleh bit, digit biner. Namun pada kenyataannya, sinyal digital fisik dapat berada dalam beberapa status, yaitu std_logic type melakukan pekerjaan yang baik meniru. Oleh karena itu, ini adalah jenis yang paling sering digunakan dalam VHDL.
Pos blog ini adalah bagian dari seri Tutorial VHDL Dasar.
std_logic type dapat memiliki nilai berikut:
‘1’
Logika 1
‘0’
Logika 0
‘Z’
Impedansi tinggi
'A'
Sinyal lemah, tidak tahu apakah 0 atau 1
'L'
Lemah 0, pull-down
‘H’
Lemah 1, pullup
‘-‘
Tidak peduli
'U'
Tidak diinisialisasi
'X'
Tidak diketahui, banyak driver
Ini mungkin tampak seperti banyak status berbeda untuk tipe yang seharusnya memodelkan nilai biner tunggal. Jangan khawatir, kami tidak akan menggunakan semua jenis ini dalam seri tutorial ini. Kami akan menggunakan '1' dan '0' tentu saja. Dan kita juga akan melihat 'U' dan 'X' , yang akan membantu kami menemukan kesalahan dalam desain kami. Nilai lainnya adalah fitur VHDL lanjutan yang dapat digunakan untuk hal-hal seperti pemodelan komunikasi dengan misalnya I
2
perangkat C, atau untuk membuat bus tiga negara bagian.
Jika beberapa proses mencoba untuk menulis nilai yang berbeda ke sebuah sinyal, kita katakan bahwa ia memiliki banyak driver . Jika std_logic sinyal memiliki beberapa driver, itu tidak akan menjadi kesalahan kompilasi atau run-time, setidaknya tidak di simulator. Itu karena std_logic adalah tipe terselesaikan , artinya nilainya akan ditentukan oleh fungsi resolusi.
Nilai dari std_logic sinyal dengan dua driver akan ditentukan berdasarkan tabel resolusi ini:
U
X
0
1
Z
B
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
B
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
–
Olahraga
Dalam video tutorial ini kita akan belajar bagaimana menggunakan mendeklarasikan dan menampilkan std_logic sinyal dalam bentuk gelombang:
Kode terakhir yang kita buat dalam tutorial 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 bentuk gelombang di ModelSim setelah kita menekan run, dan memperbesar timeline:
Bentuk gelombang dengan kursor ditempatkan di bagian lain dari siklus sinyal berulang:
Analisis
Latihan menunjukkan bagaimana fungsi resolusi VHDL bekerja dengan std_logic Tipe. Saat bekerja dengan logika digital, seringkali lebih praktis untuk mempelajari garis waktu dalam bentuk gelombang daripada menggunakan cetakan. Oleh karena itu kami menggunakan bentuk gelombang ModelSim untuk memeriksa nilai sinyal dalam latihan ini.
Proses pertama dan Signal1 hanya digunakan untuk mengubah nilai yang dijalankan oleh proses ketiga pada Signal2 dan Signal3 .
Proses kedua, Driver A, akan mencoba menjalankan 'Z' ke Signal2 , dan '0' ke Signal3 terus-menerus.
Proses ketiga, Driver B, akan bergantian antara mengemudi '1' dan 'Z' ke kedua Signal2 dan Signal3 .
Kami melihat di tangkapan layar bentuk gelombang bahwa Signal1 berubah antara '0' dan '1' , karena hanya ada satu proses yang mencoba menggerakkan sinyal ini. Kita juga dapat melihat bahwa beberapa sinyal driver diselesaikan sesuai dengan tabel resolusi yang diposting di komentar kode VHDL:
Sinyal
Pengemudi A
Pengemudi B
Hasil
Sinyal2
'Z'
'Z'
'Z'
Sinyal2
'Z'
‘1’
‘1’
Sinyal3
'0'
'Z'
'0'
Sinyal3
'0'
‘1’
'X'
Bawa Pulang
std_logic adalah tipe yang paling umum digunakan untuk menyimpan nilai bit tunggal dalam VHDL
Pikirkan sebuah std_logic sinyal sebagai kabel fisik dalam desain digital kami
Jika beberapa proses mencoba menjalankan std_logic sinyal, nilainya ditentukan oleh tabel resolusi