我正在制作一个 Verilog 程序,需要从输入文件中读取 77 位二进制字符串行。输入文件将被格式化为由 77 个 1 和 0 后跟 ' '.
我的程序想要逐行读取这个并将整个字符串存储到一个如下所示的 reg 中:
reg DATA_REG [76:0]
我在用
fscanf(data_input_file, "???????", DATA_REG)
但我不确定在引号中放什么。我希望按字面解释字符串;也就是说,如果数字是...0000001110...我希望 DATA_REG 包含 0000001110,而不是 1110 或 14.
感谢您的帮助!
您可以指定您正在阅读的数据的宽度如下:
status = $fsanf(data_input_file, "%**77**b", DATA_REG);
您需要确保输入文件中的数据具有相同的宽度。
你有两个选择。如果要读取的总行数不是那么多,可以将整个文件读入内存
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
或者你可以做
status = $fscanf(data_input_file, "%b", DATA_REG);
你可以试试这个逻辑它会起作用。
模块 TB_example();注册 tb_clk; reg tb_reset; reg one_bit=0;
DW_file DUT_file(.clk (tb_clk), .reset(tb_reset), .one_bit(one_bit));
整数 fd=0;整数 i=0;整数计数=0; reg str=0;
初始开始 tb_clk=1'b0;永远 #20 tb_clk=~tb_clk;结束
初始开始 tb_reset<=1'b0;/// #2000; tb_reset<=1'b1; #2000; fd = $fopen("sample_1_bit_file.txt", "r"); $display("FILE DATA=%0d",fd); while (! $feof(fd)) begin @(posedge tb_clk) count<=count+1'b1; $fgets(str, fd); i=$fscanf(fd,"%b",str); one_bit=str; // bit stream of the variable $display("DATA------%0b", str); end $f close(fd); end endmodule