Hallo,
ich habe unter Linux eine Testbench geschrieben, die eine
Hex-Eingangsdatei (auf dem PC) byteweise ausliest und pro Taktzyklus ein
Byte an den Eingang meines Verilog-Moduls anlegt. Klappte in Linux und
mit Xilinx ISE einwandfrei.
Nun wollte ich die Testbench jedoch unter Windows ausführen, beim
Hex-Zeichen 0x1A (Substitutionszeichen) erkennt Xilinx ISE jedoch ein
Dateiende, obwohl die Datei noch nicht fertig ausgelesen ist.
kurzer Beispielcode:
1 | reg [8:0] c;
|
2 | input_file = $fopen("test.hex","r");
|
3 | initial begin
|
4 | @ (posedge clk_i);
|
5 | c = $fgetc(input_file);
|
6 | if (c != 'h1ff) begin
|
7 | data_in = c[7:0];
|
8 | data_val = 1'b1;
|
9 | end
|
10 | else begin
|
11 | data_val = 1'b0;
|
12 | end
|
13 | end
|
Problem ist, wenn ich das Zeichen c nach dem $fgetc() auslese, erhalte
ich das EOF-Zeichen 0x1FF (-1), kann also nicht selektieren, ob nun ein
0x1A aufgetreten ist, oder ein echtes EOF. Probiert habe ich außerdem
integer anstatt reg, bringt aber das selbe Ergebnis: eine -1.
Ich hoffe ihr könnt mir in dieser Sache helfen.