【问题标题】:$readmemh doesn't read the values from data file$readmemh 不从数据文件中读取值
【发布时间】:2021-08-10 20:05:07
【问题描述】:

我正在使用readmemh 喜欢:

reg [11:0] rom [0:121];

initial $readmemh("x.data", rom);

我的x.data 文件如下所示:

line 1: 1 
line 2: 10
. 
. 
. 
line 118: 1110101 
line 119: 1110110 
line 120: 1110111

当我在模拟过程中尝试使用rom[20] 时,我看到了 XXX 值。另外,我在模拟过程中检查了所有rom的数据值,我看到了XXX,XXX,..,XXX

我不确定我是否以正确的方式使用了$readmemh

【问题讨论】:

    标签: verilog fpga hdl


    【解决方案1】:

    当我使用您的代码读取文件时,我收到了 2 个不同模拟器的警告消息。在这两种情况下,模拟器都无法读取文件并将数据加载到rom 变量中。如果我添加以下代码:

    integer i;
    initial for (i=0; i<=121; i=i+1) $displayb(rom[i]);
    

    我在rom 中的所有位置都看到x。您将rom 声明为reg 类型,而reg 类型默认为x

    问题是Line 1:Line 2:等,语法不正确。您需要将它们从x.data 文件中删除。您的文件应如下所示:

    1      
    10     
    1110101
    1110110
    1110111
    

    但是,我仍然收到模拟器警告,因为模拟器将 1110101 解释为十六进制值。由于这个值对于 12 位变量来说太大了,所以模拟器不会将它加载到 rom 中,而将值保留为默认的 x

    我的猜测是您的数据实际上是二进制格式而不是十六进制。在这种情况下,请使用$readmemb 而不是$readmemh

    initial $readmemb("x.data", rom);
    

    当我进行更改时,我不再看到 x

    有关详细语法,请参阅 IEEE Std 1800-2017,第 21.4 节 从文件中加载内存数组数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多