Hid*_*ida 0 parameters system-verilog
如果我已正确理解事物,则 SystemVerilog参数不具有固有类型,但将采用分配给它的值的类型.类似地,'1表示法应该适应变量的类型.当我们将两者合并时会发生什么?
也就是说,这些片段中的参数实例化会产生什么结果呢?
localparam BAR = '1;
Run Code Online (Sandbox Code Playgroud)
和
module testModule #(parameter BAR = 0, parameter [3:0] LONGBAR = 0)
(input logic a, output logic b);
assign b = a;
endmodule
testModule #('1, '1) u_testModule0(a, b);
Run Code Online (Sandbox Code Playgroud)
和
testModule #(BAR, BAR) u_testModule1(a, b);
Run Code Online (Sandbox Code Playgroud)
在没有任何类型上下文(自我确定)的情况下,文字'1等同于1'b1.对此的赋值localparam BAR是自定义的,因此BAR是带有值的一位参数1'b1
因为您的testModule定义BAR没有类型,所以用于覆盖它的任何表达式都将在自定义的上下文中进行计算.用于覆盖的表达式LONGBAR将在4位整数类型的上下文中进行计算.
testModule #('1, '1) u_testModule0(a, b);
Run Code Online (Sandbox Code Playgroud)
因此,在上面的实例化中,第一个覆盖求值为1'b1,第二个覆盖求值为4'b1111.testModule的BAR类型解析为1位类型,LONGBAR的类型固定为4位.
testModule #(BAR, BAR) u_testModule1(a, b);
Run Code Online (Sandbox Code Playgroud)
在第二个实例化中,第一个覆盖采用localparam BAR的BAR类型,因此testModule的类型使用该值解析为1位类型1'b1.但是在第二个覆盖中,这是在4位类型的上下文中的赋值.由于localparam BAR的值为1'b1,因此填充为0,LONGBAR的值为4'b0001.
| 归档时间: |
|
| 查看次数: |
570 次 |
| 最近记录: |