2016-10-06 8 views
0

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.

+2

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

+0

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

Antwort

1

Hier ist, was Ihre Testbench tut: zu einem bestimmten Zeitpunkt (speziell die erste pagege von clk), schreiben Sie den aktuellen Wert von pseudo_random_val 8192 mal (die den gleichen Wert haben) in die Datei.

Dies wird den Wert von pseudo_random_val in die Datei einmal pro Taktperiode für die Dauer der Simulation schreiben (die mehr oder weniger als 8192 mal sein können):

always @(posedge clk) $fwrite(file, "%h\n", pseudo_random_val); 
+1

Danke, dass Sie mir geholfen haben, meinen Fehler zu erkennen! Es funktioniert wie beabsichtigt – kcinj