2016-03-21 5 views
0

Ich mache ein Verilog-Programm, das Zeilen von 77-Bit-Binärzeichenfolgen aus einer Eingabedatei lesen muss. Die Eingabedatei wird so formatiert, dass es sich um eine Zeichenkette aus 77 1 und 0 gefolgt von '\ n' handelt.fscanf für lange Binärzeichenfolgen in Verilog

Mein Programm will diese Zeile für Zeile lesen und die gesamte Zeichenfolge in eine reg zu speichern, die wie folgt aussieht:

reg DATA_REG [76:0] 

I

bin mit
fscanf(data_input_file, "???????", DATA_REG) 

aber ich bin nicht sicher, was zu setzen in den Zitaten. Ich möchte, dass die Zeichenfolge wörtlich interpretiert wird; das heißt, wenn die Nummer ... 0000001110 ... ist, möchte ich, dass DATA_REG 0000001110, nicht 1110 oder 14 enthält.

Vielen Dank für Ihre Hilfe!

+0

Warum nicht '$ readmemb' tun? – toolic

+0

Nie davon gehört! : P so wird (für Schleife bis eof) readmemb (data_input_file, DATA_REG) arbeiten? –

+0

Nein, es wird nicht so benutzt. Lesen Sie IEEE Std 1800-2012, Abschnitt 21.4 Laden von Speicherarray-Daten aus einer Datei. – toolic

Antwort

0

Sie haben zwei Möglichkeiten. Wenn die Gesamtanzahl der Zeilen zu lesen ist nicht so groß, können Sie die gesamte Datei in einen Speicher eingelesen

reg [76:0] memory[0:MAX_LINES]; 
integer index; 
initial $readmemb("filename",memory); 
always @index DATA_REG = memory[index];// or just use memory[index] directly 

oder Sie können

status = $fsanf(data_input_file, "%b", DATA_REG); 
+0

Ich bemerke, dass 'DATA_REG' als' reg DATA_REG [76: 0] 'definiert ist. Muss es nicht definiert werden als 'reg [76: 0] DATA_REG' für' status = $ fsanf (data_input_file, "% b", DATA_REG) 'um zu arbeiten? –

+0

Ich gehe davon aus, dass ein Tippfehler war, bis der OP antwortet. –

+0

Ja, es war ein Tippfehler. wenn ich anfängliche $ readmemb versuche ("Dateiname", Speicher); Ich bekomme einen Fehler "kann nicht direkt auf den Speicher zugreifen" –