VHDL-Testbench für eine ALU: Simulation mit Dateiein- und -ausgabe
VHDL-Testbench für eine ALU
Die folgende Testbench simuliert eine arithmetisch-logische Einheit (ALU) in VHDL. Die Testdaten werden aus einer Datei eingelesen und die Ergebnisse in eine Ausgabedatei geschrieben.
Bibliotheken und Typdefinitionen
Zu Beginn werden die benötigten Bibliotheken eingebunden und der Speichertyp memoria definiert:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.STD_LOGIC_ARITH.ALL;
use std.textio.all;
use ieee.std_logic_textio.all;
Entity und Architektur
Die Testbench besitzt keine Ports. Die Architektur sim enthält die Taktkonstante TCLK sowie die Komponentendeklaration der ALU.
Taktgenerierung
Das Taktsignal clk_i wird asymmetrisch erzeugt: Es ist nach 25 ns high und nach 75 ns low, bei einer Periodendauer von 10 ns mit Tastverhältnis angepasst.
Signaldeklarationen
Es werden die Signale a_i, b_i, opr_i, ovfw_sign_i und resultado_i deklariert. Die Konstante N ist auf 4 gesetzt, sodass die Datenbreite 4 * N = 16 Bit beträgt.
Instanziierung der DUT
Die ALU (Device Under Test) wird über eine generic map und eine port map eingebunden.
Testprozess
Der Prozess arbeitet in zwei Durchläufen:
- Addition (
opr_i = '0'): Die Werte ausdatos.txtwerden eingelesen, addiert und das Ergebnis mit dem Überlaufflag inresultado.txtgeschrieben. - Subtraktion (
opr_i = '1'): Gleiches Vorgehen. Bei gesetztem Überlaufflag wird ein Minuszeichen ausgegeben.
Nach Abschluss beider Durchläufe werden die Dateien geschlossen und mit einer Assertion wird die Meldung "fin simulación" ausgegeben.
Hinweise
- Die Wartezeit
wait for 10 nsstellt sicher, dass die ALU das Ergebnis berechnen kann. - Die Variablen
buf,buf2unddat2dienen als Zwischenspeicher für das Lesen und Schreiben. - Die Datei
datos.txtmuss im Hexadezimalformat vorliegen, dahreadundhwriteverwendet werden.