Verilog 赋值语句结果检查
Verilog assign statement result check
Verilog 新手(好吧,确实是 SystemVerilog,但我发现对于非常基本的关键字,如分配和初始化,我也可以从 Verilog 资源中学习)。我在这个 link chipverify example 2 上遵循示例 2。这很简单,所以我会写下来。我觉得好像他们犯了一个错误,但由于我是新手,所以很难知道我的感觉是否正确。
module xyz (input [3:0] x, //let x='hC or x='b1100 for this example's purposes
input y, //y is a 1bit scalar y='h1 = 'b1
output [4:0] z);
//case 8
assign z = {3{y}};
endmodule
对于情况 8,他们说 z 将导致 z='b00111。我觉得不对!按照他们的情况 3,其中 z 只分配了位 [4:1],它表示铰孔位将不受驱动,从而导致高阻抗 Z。情况 8 的结果不应该是 z ='bZZ111 而不是 z='b00111?
告诉我,谢谢! =)
来自 IEEE Std 1800-2017(SystemVerilog 标准)中的第 10.7 节(赋值扩展和截断),
- When the right-hand side evaluates to fewer bits than the left-hand side, the right-hand side value is padded to the size of the
left-hand side.
在你的例子中,{3{y}}是一个无符号值,所以它被补0到5位,即5'b00111,然后赋值给z。
Verilog 新手(好吧,确实是 SystemVerilog,但我发现对于非常基本的关键字,如分配和初始化,我也可以从 Verilog 资源中学习)。我在这个 link chipverify example 2 上遵循示例 2。这很简单,所以我会写下来。我觉得好像他们犯了一个错误,但由于我是新手,所以很难知道我的感觉是否正确。
module xyz (input [3:0] x, //let x='hC or x='b1100 for this example's purposes
input y, //y is a 1bit scalar y='h1 = 'b1
output [4:0] z);
//case 8
assign z = {3{y}};
endmodule
对于情况 8,他们说 z 将导致 z='b00111。我觉得不对!按照他们的情况 3,其中 z 只分配了位 [4:1],它表示铰孔位将不受驱动,从而导致高阻抗 Z。情况 8 的结果不应该是 z ='bZZ111 而不是 z='b00111?
告诉我,谢谢! =)
来自 IEEE Std 1800-2017(SystemVerilog 标准)中的第 10.7 节(赋值扩展和截断),
- When the right-hand side evaluates to fewer bits than the left-hand side, the right-hand side value is padded to the size of the left-hand side.
在你的例子中,{3{y}}是一个无符号值,所以它被补0到5位,即5'b00111,然后赋值给z。