我有以下 Verilog 代码,它抛出一个我无法完全弄清楚的错误:
module error #(parameter WIDTH = 8);
reg [WIDTH - 1:0] v;
initial begin
v <= {1'b1, {WIDTH - 1}{1'b0}};
end
endmodule
我基本上希望
v
是一个以 1
开头,后面跟着一堆 0
的向量。例如,如果参数WIDTH
是8
,我想获得向量10000000
。
上面的代码给了我一个错误,提示“需要右大括号”和“需要分号”。我想我只是不太理解向量复制和/或串联的语法。我尝试了多种语法组合,例如使用
()
而不是 {}
,向 {}
添加额外的 1
,使用 b
语法或不使用它,但没有任何成功。
parameter
以及串联语法的使用对于我的实际设计来说是必要的,上面的代码只是一个展示问题的小模块,所以理想情况下我想找出为什么会出现这个错误以及应该做什么我改变了我的语法来使其工作。
牙套未正确放置。
改变:
v <= {1'b1, {WIDTH - 1}{1'b0}};
至:
v <= {1'b1, {(WIDTH - 1){1'b0}}};
请参阅 IEEE Std 1800-2017,第 11.4.12.1 节 复制运算符
括号不是必需的,但我认为它们使代码更容易理解。