私は、シーケンシャルロジック(常にクロックのposedgeでアクティブ化されたブロック)内にcase文を持っています。このケースでは、変数var
を評価していますが、ビット幅はパラメータPARAM
によって異なります。可能な値のすべてをカバーする必要があります。var
はケースのステートメントで取ることができ、値はPARAM
に基づいて異なります。一例として、PARAM
が32の場合、var
は5ビット幅であるため、32個のケースが必要です。 PARAM
が16の場合、var
は4ビット幅であり、16の場合が必要です。このケースステートメントはif
ステートメントのネスト内にもあり、シーケンシャルロジック(これは条件付きgenerate
ステートメントについて既に考えている)の外に出す方法を考えるのが難しくなります。これを行う方法に関するアイデア?以下の構造のための擬似コードである:SystemVerilogのパラメータに依存するcase文
module a
#(parameter PARAM = 8,
parameter WIDTH = $clog2(PARAM)
)
...
input logic [WIDTH-1:0] var
...
always @(posedge clk)
begin
if(...)
begin
if(...)
begin
case(var)
3'd0:
3'd1:
3'd2:
3'd3:
3'd4:
3'd5:
3'd6:
3'd7:
default:
endcase
end
end
end
上記の例では、PARAM
がデフォルト値をとる場合には(8)、8例が存在すべきです。しかし、インスタンス化時にPARAM
が4だった場合は、4つのケースしか存在しません。
ありがとうございます。
あなたはコードがどのように見えるかの例を示す必要があります。各ケース項目のコードをどのようにパラメータ化するのでしょうか? –
Verilogにそのようなものはありません。ほとんどの場合、問題とは異なる解決策がありますが、それを理解するための例を提示する必要があります。最悪の場合、おそらくスクリプトや他の方法を使ってVerilogコードを生成することができます。 – Serge
良い答えが必要な場合は、IPを取り除いた例を示すために何らかの努力を払わなければなりません。 –