簡體   English   中英

systemverilog中的重復運算符

[英]repetition operator in systemverilog

我有一個系統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 節復制運算符:

復制運算符(也稱為多重串聯)由串聯表示,前面有一個非負、非 x 和非 z 常量表達式,稱為復制常量

對於復制,我認為您需要使用數字常量(如 4)或常量類型(如parameter

  parameter count = 4;

我使用的另一個模擬器會生成警告並產生您看到的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM