首页 > 解决方案 > 使用 Verilog 中的参数获取错误

问题描述

我是使用 verilog 验证记忆的新手。我已经在测试台中将地址宽度和数据宽度定义为参数,我在下面尝试这样,这给了我一个错误:

parameter ADDRESS_WIDTH =9

在某处的测试台下方,我正在调用任务:

Read_mode(ADDRESS_WIDTH’134)

我遇到了这个错误。请帮忙。

标签: verilogtest-bench

解决方案


ADDRESS_WIDTH’134产生语法错误,因为将参数用于这样的数字文字大小是非法的,并且当您使用撇号时,它必须后跟一个基本说明符(例如h十六进制格式)。此外,您问题中的撇号可能是个问题,具体取决于您如何将其复制并粘贴到编辑器中。

要将数字文字传递给 a ,无需指定值的位宽,因为在声明输入task时可以考虑这一点。task您可以使用所需的位宽声明输入,然后仅使用基本说明符传递数值,例如'h134十六进制值:

module tb;

parameter ADDRESS_WIDTH = 9;

task Read_mode (input [ADDRESS_WIDTH-1:0] addr);
    $displayh(addr);
endtask

initial begin
    Read_mode('h134);
    Read_mode(134);
    Read_mode('hfff);
end

endmodule

印刷:

134
086
1ff

请注意,134(没有底数)是十进制值,大于 9 位 ( 'hfff) 的值将被强制为 9 位 ( 1ff)。

请参阅 IEEE Std 1800-2017,第 5.7.1 节整数文字常量


推荐阅读