入力をインデックスとして使用して配列から要素にアクセスしようとしていますが、このエラーが発生し続けます:
cache.v:27: エラー: 配列 'tagc' インデックスは、このコンテキストでは定数でなければなりません。
これが私がそれをやろうとしている方法です:
assign tagc[index] = tag;
tagc は 1024 の reg の配列です。index は 10 ビットの入力です。タグは 20 ビット入力です。
それを行う方法はありますか?
2 つの可能性:
tagc のインデックス付きの場所を割り当てて、tag の値をミラーリングしようとしています。この場合、index を定数 (パラメーター、localparam、または `define) にする必要があります。
動的変数 'index' によってインデックス付けされた場所に tag の値を格納するメモリとして tagc を使用しています。この場合、tagc の更新をトリガーするイベントを決定した後、always ブロックで割り当てを行う必要があります。
通常、動的インデックスを使用した配列の割り当ては、クロック処理された手続き型ブロックで行われます。
always @(posedge clk) begin
tagc[index] <= tag;
end
ラッチングで行うこともできます。イネーブル信号を使用し、イネーブルindex
中に変更されないようにします。
always @* begin
if (enable) begin
tagc[index] <= tag;
end
end
または別のラッチ オプション:
integer i;
always @* begin
for(i=0; i<PARAM_SIZE_OF_TAG; i=i+1)
if (index==i) tagc[i] <= tag;
end
end
参考までに:非型tagc
として定義する必要がありますreg
wire