是Verilog的新手(当然,是SystemVerilog,但是我发现,对于非常基本的关键字,例如Assign和Initialize,我也可以从Verilog资源中学习)。我正在此链接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节(赋值扩展和截断)中,>]
- [当右侧求值的位数少于左侧时,右侧值将填充为左侧。
在您的情况下,{3 {y}}是一个无符号值,因此将其0填充为5位,即5'b00111,然后分配给z。