vermeog中readmemb和$ fscanf之间的区别

时间:2017-02-05 22:58:33

标签: verilog hdl-coder

在verilog中,我可以找到两个系统函数来从文本文件中读取数据。一个id readmemb / readmemh,另一个是fscanf。我很困惑两者之间的区别是什么?我可以一直使用readmemb / h而忘记fscanf吗?

我的理解是memreadb / h用于初始化内存,但这样可以初始化任何变量。例如,我有0和1流的文本文件,我想读取并存储它,然后每个时钟将它们串行馈送到移位寄存器1位。

{{1}}

我认为这会一次性将0和1的流放入seq_input,然后我可以使用延迟从此向DUT提供位。 为什么我会使用fscanf,会有什么区别?

1 个答案:

答案 0 :(得分:1)

$readmemb/h$fscanf之间的区别在于文件的解析方式。 $fscanf为文件提供典型的C风格界面(主要是),让你用格式字符串解析它。 $readmemb/h接收一个具有非常明确定义的结构的文件,并为您完成所有解析。

所以,你可能只是在你的情况下使用$readmemb并且忘记自己处理解析,但是如果你真的想要的话,可以使用$fscanf来完成工作(通常你会做更多的工作)必须至少先打开文件)。但请记住,任何这些系统调用都需要从程序块中进行,如下所示:

reg [63:0] seq_input;
...
initial begin
  $readmemb("my_file.b", seq_input);
end

您的文件在文本编辑器中的位置如下:

101001000110011...

如果您想要$readmemb/h格式的更多内容,我在这里回答了这个问题: How to initialize contents of inferred Block RAM (BRAM) in Verilog