Ich teste ein Modul für ein 8-Bit-Register, getrennt von dem Rest meines Codes. Ich verwende ModelSim, um die Werte festzulegen und dann Ausführen, um die Ergebnisse anzuzeigen. Dieses Modul soll einen binären Zahleneingang, ein klares Bit, ein Freigabebit und einen Ausgang haben.Verilog Registercode Fehler - Zustandsprüfungen
module Register8bit(D, Clk, Clear, Enable, OutNum);
input [7:0] D; //8 bit binary data
input Clk; //Clock
input Clear; //Clear bit
input Enable; //Enable bit
output reg [7:0] OutNum;
always @(posedge Clk)
begin
if (Enable)
begin
if (Clear)
OutNum <= 8'b00000000;
else
OutNum <= D;
end
end
endmodule
Hier ist die Ausgabe I (in dieser Reihenfolge) erwarten, mit D = 10001111 und Clk = 1.
Steps CLR Enable OutNum
1 0 0 xxxxxxxx (initially undefined)
2 0 1 10001111 (input data is used)
3 1 0 10001111 (because write-protection)
4 1 1 00000000 (Clear and Enable are true, so set to 0)
5 0 1 10001111 (Clear is false and Enable is true, so use input data)
Der erste Schritt funktioniert, aber die zweiten nicht (so die Ruhe funktioniert auch nicht). Insbesondere bleibt OutNum im zweiten Schritt undefiniert. Die Aktualisierung von OutNum mit den Eingabedaten funktioniert im ersten Schritt, wenn Enable wahr ist.
Wie soll ich dieses Modul reparieren?
Prüfstands Code:
`timescale 1ns/1ps
module test_register;
//inputs
reg [7:0] D;
reg Clk;
reg Clear;
reg Enable;
//outputs
reg [7:0] OutNum;
//instantiate
Register8bit uut(
.D(D),
.Clk(Clk),
.Clear(Clear),
.Enable(Enable)
);
initial begin
D = 10001111;
Clk = 1;
//step 1
#100;
Clear = 0;
Enable = 0;
#100;
//step 2
Clear = 0;
Enable = 1;
#100;
//step 3
Clear = 1;
Enable = 0;
#100;
//step 4
Clear = 1;
Enable = 1;
#100;
//step 5
Clear = 0;
Enable = 1;
#100;
end
endmodule
Der Testbench-Code ist aktiv. – Rez