systemverilog中的重复运算符

systemverilog中的重复运算符,verilog,system-verilog,Verilog,System Verilog,我有一个系统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 eq

我有一个系统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
我不明白的是打印语句
第二个1
第一个不等于1110和1


为什么打印的是1而不是1111

我使用的一个模拟器工具会生成编译器错误。根据第11.4.12.1节,复制运营商:

复制操作符(也称为多重连接)是 由前接非负、非x和 非z常量表达式,称为复制常量

对于复制,我认为您需要使用数字常量,如4,或常量类型,如
参数

  parameter count = 4;

我使用的另一个模拟器会生成警告,并生成您看到的结果。

这很有趣,如果有4而不是计数,它会工作。我很好奇,让
`define count 4
然后使用
`count
工作怎么样?