verilog - systemverilog 中的重复运算符

标签 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 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?

最佳答案

我使用的一个模拟器工具会生成编译器错误。根据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/

相关文章:

verilog - 处理 SystemVerilog 包中的参数化

verilog - 在 Intel Quartus 中,我可以使用字符串参数初始化 RAM 吗?

properties - 我可以在一个循环中生成多个 SystemVerilog 属性吗?

command-line-arguments - 如何在systemverilog中获取作为plusargs的值数组?

system-verilog - 宽度可配置时如何编写脉冲宽度systemverilog断言

system-verilog - 什么算作虚拟接口(interface)的非法层次引用?

syntax - Verilog:命名约定

verilog - 将枚举转换为逻辑

Verilog:如何取绝对值

random - 在systemverilog中使用随机随机1位和2位错误