我有一个系统verilog比较如下。
module m();
int count = 4;
logic [3:0] first = 14;
logic [3:0] second = 15;
initial begin
$display("Second %b\n", {count{1'b1}});
if(first == {count{1'b1}}) $display("FIRST Equals\n");
else $display("FIRST Not equal %b and %b\n", first, {count{1'b1}});
if(second == {count{1'b1}}) $display("SECOND Equals\n");
else $display("SECOND Not equal %b and %b\n", second, {count{1'b1}});
end
endmodule
这是输出
Second 1
FIRST Not equal 1110 and 1
SECOND Equals
我不明白的是打印语句Second 1
和FIRST Not equal 1110 and 1
为什么打印 1 而不是 1111?
最佳答案
我使用的一个模拟器工具会生成编译器错误。根据IEEE Std 1800-2012 ,第 11.4.12.1 节复制运算符:
A replication operator (also called a multiple concatenation) is expressed by a concatenation preceded by a non-negative, non-x, and non-z constant expression, called a replication constant
对于复制,我认为您需要使用数字常量,例如 4,或常量类型,例如 parameter
。
parameter count = 4;
我使用的另一个模拟器会生成警告并生成您看到的结果。
关于verilog - systemverilog 中的重复运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40980992/