Sebuah testbench self-checking adalah program VHDL yang memverifikasi kebenaran perangkat yang sedang diuji (DUT) tanpa bergantung pada operator untuk memeriksa output secara manual. Testbench yang memeriksa sendiri sepenuhnya berjalan sendiri, dan pada akhirnya mencetak pesan “OK” atau “Gagal”.
Setiap modul VHDL harus memiliki testbench self-checking terkait. Sangat penting untuk dapat memverifikasi bahwa semua modul memiliki perilaku yang diinginkan kapan saja. Misalnya, ketika Anda membuat perubahan pada DUT, sub-modul, atau modul antarmuka. Kita semua tahu bahwa hal-hal dapat rusak, dan alat terbaik Anda untuk mengatasi masalah ini adalah testbench pemeriksaan mandiri.
Perangkat sedang diuji
Mari kita langsung masuk dan membuat contoh testbench self-checking. Pertama, kita perlu sesuatu untuk diuji, sebuah DUT. Untuk itu saya telah membuat modul pada kode di bawah ini. Ini adalah pengonversi kode biner ke abu-abu.
library ieee;
use ieee.std_logic_1164.all;
entity gray_converter is
port (
bin : in std_logic_vector;
gray : out std_logic_vector
);
end gray_converter;
architecture rtl of gray_converter is
begin
process(bin) is
begin
gray(gray'high) <= bin(bin'high);
for i in bin'high - 1 downto bin'low loop
gray(i) <= bin(i + 1) xor bin(i);
end loop;
end process;
end architecture;
Kode abu-abu adalah skema pengkodean angka alternatif, berbeda dari pengkodean biner biasa. Properti utama dan tujuan kode Gray adalah bahwa hanya satu bit yang berubah saat menghitung antara nilai angka yang berdekatan.
Desimal
Biner
Abu-abu
0
0000
0000
1
0001
0001
2
0010
0011
3
0011
0010
4
0100
0110
5
0101
0111
6
0110
0101
7
0111
0100
8
1000
1100
9
1001
1101
10
1010
1111
11
1011
1110
12
1100
1010
13
1101
1011
14
1110
1001
15
1111
1000
Tabel di atas menunjukkan bagaimana kode Gray berbeda dari kode biner.
Meja ujian
Kita akan mulai dengan membuat testbench dasar dan membuat DUT di dalamnya. Kode di bawah ini menunjukkan file testbench dengan DUT yang dipakai dan semua impor yang diperlukan.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use std.env.finish;
entity gray_converter_tb is
end gray_converter_tb;
architecture sim of gray_converter_tb is
signal bin : std_logic_vector(3 downto 0) := (others => '0');
signal gray : std_logic_vector(3 downto 0);
begin
DUT : entity work.gray_converter(rtl)
port map (
bin => bin,
gray => gray
);
end architecture;
Perhatikan bahwa kita mengimpor std.env.finish yang membutuhkan VHDL-2008. Jika Anda mencoba mengkompilasi testbench di ModelSim tanpa mengubah apa pun, Anda akan mendapatkan kesalahan berikut:
# ** Warning: gray_converter_tb.vhd(6): (vcom-1516)
Package "STD.ENV" does not exist in this language version.