1

入力をインデックスとして使用して配列から要素にアクセスしようとしていますが、このエラーが発生し続けます:

cache.v:27: エラー: 配列 'tagc' インデックスは、このコンテキストでは定数でなければなりません。

これが私がそれをやろうとしている方法です:

assign tagc[index] = tag;

tagc は 1024 の reg の配列です。index は 10 ビットの入力です。タグは 20 ビット入力です。

それを行う方法はありますか?

4

2 に答える 2

1

2 つの可能性:

  1. tagc のインデックス付きの場所を割り当てて、tag の値をミラーリングしようとしています。この場合、index を定数 (パラメーター、localparam、または `define) にする必要があります。

  2. 動的変数 'index' によってインデックス付けされた場所に tag の値を格納するメモリとして tagc を使用しています。この場合、tagc の更新をトリガーするイベントを決定した後、always ブロックで割り当てを行う必要があります。

于 2016-07-01T00:07:05.143 に答える
0

通常、動的インデックスを使用した配列の割り当ては、クロック処理された手続き型ブロックで行われます。

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として定義する必要がありますregwire

于 2016-07-01T00:11:42.413 に答える