Ich schreibe eine Testbench für ein LFSR und möchte den Wert der Ausgabe in eine TXT-Datei schreiben, damit ich das später für einige Skripts verwenden kann. In meinen Wellenformen sind die Hexadezimalwerte des Ergebnisses korrekt, aber die Ausgabedatei besteht nur aus 1s, nicht aus den tatsächlichen Werten. Ich konnte nicht feststellen, warum (gerade mit Verilog beginnen). Hier ist die Testbench:Verilog Testbench Schreiben unerwartete Ausgabe in Datei
module lfsr13_tb();
reg clk, rst_n, en;
reg[12:0] seed;
wire[12:0] pseudo_random_val;
integer file, i;
lfsr13 iDUT(.clk(clk), .en(en), .rst_n(rst_n), .seed(seed), .pseudo_random_val(pseudo_random_val));
initial begin
seed = 1;
clk = 0;
rst_n = 0; // assert reset
en = 0; // disabled to start
file = $fopen("lfsr_output.txt", "w");
@(negedge clk) rst_n = 1; // deassert reset
@(posedge clk) en = 1; // assert enable to begin lfsr function
for(i=0; i<=8191; i=i+1) begin
$fwrite(file, "%h\n", pseudo_random_val);
end
$fclose(file);
end
always
#5 clk = ~clk;
endmodule
Jede Hilfe sehr geschätzt. Ich muss die "pseudo_random_val" in jeder Periode in die Ausgabedatei geschrieben haben.
Es sieht aus wie Sie das gerade schreiben gleicher Wert 8192 mal zur Datei ... vielleicht einen Delay oder Event Trigger hinzufügen? (Auch etwas Einrückung würde bei der Lesbarkeit helfen ...) – wilcroft
Ja, ich sehe das jetzt. Ich möchte, dass es jeden eindeutigen Wert von pseudo_random_val (8192 Werte) in die Ausgabedatei schreibt. Sollte ich eine Taktverzögerung in der for-Schleife hinzufügen? Was mich verwirrt ist, dass meine Wellenform die korrekte Funktionalität zeigt, ich möchte nur diese Werte in eine Textdatei ausgeben. Entschuldigungen über die Einrückung, modelsims Standard-Tab ist wie 8 Leerzeichen, also verwende ich es nicht. – kcinj