場合によっては、スライスの幅がゼロでない場合に配列スライスと照合したい状況がパラメータ化されたコードになります。私はこのようなものを書くかもしれません:到達不可能な評価でVerilogが無効/無効なスライス範囲
parameter SLICE_WIDTH;
parameter SLICE_BASE;
logic [my_array_size : 0] my_array;
//...
always_ff @ (posedge clk) begin
if (SLICE_WIDTH==0 || my_array[SLICE_BASE+:SLICE_WIDTH]==0) begin
//alternately "if (SLICE_WIDTH==0 || my_array[SLICE_WIDTH+SLICE_BASE-1:SLICE_BASE]==0) begin"
//do something
end
else begin
//do something else
end
end
これは私がVHDLを書くときにこれらの状況を扱う方法でした。無効なアレイの範囲が評価されるのを防ぐために、一定の評価における短絡に頼っています。書かれているようにシステムのVerilogでは、これはQuestaSimの "range select of parted is reversed"エラーと "range width is zero"エラーをスローします。
//do something
の内容をいくつかのif-generate構造に複製せずに、ほとんどのツールが受け入れるヌル範囲をきれいに処理する方法はありますか?あなたは何ができるか
このインスタンスでは、マスキングのバリエーションを使用することができましたが、一般的なケースはより洗練されていません。私は、一連の論理的な行を複製せずに中間のネットにコンディショニングするためにgenerateを使うことができると思います。 – QuantumRipple