systemverilog中的重复运算符

时间:2016-12-05 18:34:24

标签: 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 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 1FIRST Not equal 1110 and 1

为什么打印1而不是1111?

1 个答案:

答案 0 :(得分:2)

我使用的一个模拟器工具会产生编译器错误。根据{{​​3}},第11.4.12.1节“复制运算符:

  

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

通过复制,我认为您需要使用数字常量(如4)或常量类型(如parameter)。

  parameter count = 4;

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