0

systemverilogにはifコンパイラ指令はありません。したがって、次の行は間違っています:systemverilogの回避策 `if if compiler directive

`define BITS 16 

reg[`BITS-1:0] my_reg; 

... 
`if `BITS > 10 
    my_reg[31] = 1'b0; 
endif 
... 

警告/エラーがある場合は `なし。

どうすれば解決できますか?

答えて

3

あなたは、手続きif声明

if (`BITS > 10) 
     my_reg[31] = 1'b0; 

とコンパイラ/シンセサイザは定数式で分岐文を出し最適化することができます。 ifステートメントによって余分なロジックが作成されないことを意味します。

アウトオブバウンドメッセージを回避するには、(定数まだ)より複雑な式

my_reg[(`BITS>31) ? 31 : 0] = 1'b0; 
0

1800年から2012年LRM、22.5.1を必要とする:は「`定義ディレクティブが作成されますテキスト置換のマクロ。例:。:あなたのニーズに応じて、parameter/localparamを使うべき数値パラメータについては

`define D(x,y) initial $display("start", x, y, "end"); 

`D("msg1" , "msg2") // expands to 'initial $display("start", "msg1", "msg2", "end");'