Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> VHDL

Menggerakkan Testbench VHDL dari Berkas Stimulus Eksternal dengan TEXTIO

Membaca data stimulus dari berkas eksternal adalah cara yang kuat untuk mengontrol Device‑Under‑Test (DUT) dalam VHDL. Dengan membuat skrip urutan nilai sinyal dan waktu simulasi dalam berkas teks biasa, desainer dapat dengan cepat menukar pola uji tanpa memodifikasi logika testbench. Artikel ini, yang kedua dalam seri tentang akses file VHDL, menunjukkan cara membaca berkas stimulus dengan pustaka TEXTIO dan menerapkan nilainya ke multiplexer 4 input.

Ringkasan Kasus Uji

DUT adalah multiplexer 4‑ke‑1 sinkron dengan kata data 8‑bit. Testbench tidak melakukan verifikasi output—ia hanya menggerakkan input sehingga gelombang dapat diperiksa secara manual. Deklarasi entitas direproduksi di bawah ini untuk referensi.

 entity mux_4 is port( din_0 : in unsigned(7 downto 0); din_1 : in unsigned(7 downto 0); din_2 : in unsigned(7 downto 0); din_3 : in unsigned(7 downto 0); sel : in unsigned(1 downto 0); dout : out unsigned(7 downto 0)); end entity; 

Sinyal yang terhubung ke DUT dideklarasikan dalam arsitektur testbench dan dibuat instance dengan label DUT:

 signal din_0 : unsigned(7 downto 0); signal din_1 : unsigned(7 downto 0); signal din_2 : unsigned(7 downto 0); signal din_3 : unsigned(7 downto 0); signal sel : unsigned(1 downto 0); signal dout : unsigned(7 downto 0); DUT: entity work.mux_4(rtl) port map ( din_0 => din_0, din_1 => din_1, din_2 => din_2, din_3 => din_3, sel => sel, dout => dout ); 

Mendesain Berkas Stimulus

Meskipun banyak format yang mungkin, contoh di bawah ini menunjukkan tata letak yang jelas dan mudah dibaca manusia. Setiap baris mewakili langkah simulasi dan berisi:

Komentar yang dimulai baris diabaikan oleh testbench; komentar yang mengikuti sekelompok data dicetak ke konsol simulator.

 # Column description: # wait_time | sel | din_0 | din_1 | din_2 | din_3 # Optional console printout 0 ns 0 AA BB CC DD # Setting initial values 10 ns 1 AA BB CC DD # Testing by changing the selector signal 10 ns 2 AA BB CC DD 10 ns 3 AA BB CC DD 10 ns 3 A1 B1 C1 D1 # Testing by changing all data inputs 10 ns 3 A2 B2 C2 D2 10 ns 3 A3 B3 C3 D3 10 ns 3 00 00 00 D2 # Changing all unselected inputs 10 ns 3 01 02 03 D2 10 ns 3 11 22 33 D2 1 ns 0 CC DD EE FF # Changing all inputs fast 1 ns 1 DD EE FF CC 1 ns 2 EE FF CC DD 1 ns 3 FF CC DD EE 10 ns 0 00 00 00 00 # Simulation stop 

Membaca File dengan TEXTIO

Di bawah ini adalah proses inti yang membuka berkas stimulus, mem-parse setiap baris, menetapkan nilai ke input DUT, dan menangani komentar. Contoh mengasumsikan berkas yang diformat dengan baik – satu spasi memisahkan kolom, dan karakter # diikuti oleh satu spasi.

 PROC_SEQUENCER : process file text_file : text open read_mode is "stimulus.txt"; variable text_line : line; variable ok : boolean; variable char : character; variable wait_time : time; variable selector : sel'subtype; variable data : dout'subtype; begin while not endfile(text_file) loop readline(text_file, text_line); -- Skip empty lines and single‑line comments if text_line.all'length = 0 or text_line.all(1) = '#' then next; end if; read(text_line, wait_time, ok); assert ok report "Read 'wait_time' failed for line: " & text_line.all severity failure; hread(text_line, selector, ok); assert ok report "Read 'sel' failed for line: " & text_line.all severity failure; sel <= selector; hread(text_line, data, ok); assert ok report "Read 'din_0' failed for line: " & text_line.all severity failure; din_0 <= data; hread(text_line, data, ok); assert ok report "Read 'din_1' failed for line: " & text_line.all severity failure; din_1 <= data; hread(text_line, data, ok); assert ok report "Read 'din_2' failed for line: " & text_line.all severity failure; din_2 <= data; hread(text_line, data, ok); assert ok report "Read 'din_3' failed for line: " & text_line.all severity failure; din_3 <= data; wait for wait_time; -- Print trailing comment to console, if any read(text_line, char, ok); -- Skip expected newline read(text_line, char, ok); if char = '#' then read(text_line, char, ok); -- Skip expected newline report text_line.all; end if; end loop; finish; end process; 

Output Simulasi

Saat dijalankan di ModelSim konsol menampilkan komentar di akhir bersama dengan waktu simulasi kumulatif. Cuplikan berikut menunjukkan urutan catatan yang dicetak:

 # ** Note: Setting initial values # Time: 0 ns Iteration: 1 Instance: /file_stim_tb # ** Note: Testing by changing the selector signal # Time: 10 ns Iteration: 0 Instance: /file_stim_tb # ** Note: Testing by changing all data inputs # Time: 40 ns Iteration: 0 Instance: /file_stim_tb # ** Note: Changing all unselected inputs # Time: 70 ns Iteration: 0 Instance: /file_stim_tb # ** Note: Changing all inputs fast # Time: 91 ns Iteration: 0 Instance: /file_stim_tbf # ** Note: Simulation stop # Time: 104 ns Iteration: 0 Instance: /file_stim_tb # Break in Process PROC_SEQUENCER at file_stim_tb.vhd line 98 

Gelombang yang dihasilkan oleh testbench mencerminkan waktu dan nilai data dari berkas, memungkinkan desainer untuk memverifikasi perilaku DUT secara visual.

Poin Utama

Dengan mengikuti contoh di atas, Anda dapat memanfaatkan fleksibilitas penuh TEXTIO VHDL untuk menggerakkan skenario tes kompleks sambil mempertahankan struktur testbench yang bersih dan mudah dipelihara.

Menggerakkan Testbench VHDL dari Berkas Stimulus Eksternal dengan TEXTIO

VHDL

  1. Menguasai Pernyataan Using C#: Impor, Alias, dan Direktif Statis
  2. Penanganan File C: Menguasai I/O dengan fopen, fprintf, fread, dan fseek
  3. Pengoperasian File Java dengan java.io – Pembuatan, Pembacaan, Penulisan & Penghapusan
  4. Menginisialisasi Block RAM FPGA dari Berkas Teks dengan Pustaka TEXTIO VHDL
  5. Cara Membuat Testbench Self-Checking di VHDL – Panduan Praktis
  6. Membaca File di Java dengan BufferedReader – Panduan Praktis dengan Contoh
  7. Python JSON: Enkoding, Dekoding, dan Penanganan File – Panduan Praktis
  8. Menguasai File I/O dalam Verilog: Buka, Baca, Tulis, dan Tutup
  9. Memahami File Header C: Tipe, Penggunaan, dan Praktik Terbaik
  10. Penjelasan Berkas Segitiga: Desain, Penggunaan, dan Perawatan