2016-06-30 1 views
1

皆さん。(Verilog)変数をインデックスとして使用して配列要素にアクセスするにはどうすればよいですか?

私はインデックスとして入力を使用して配列から要素にアクセスしようとしていると私はこのエラーを取得しておいてください。

cache.v:27: error: array 'tagc' index must be a constant in this context.

は、ここで私がやろうとしている方法は次のとおりです。

assign tagc[index] = tag; 

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

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

+1

として定義する必要があります。アレイ内の動的に変化するインデックスに入力信号を割り当てることは、まったく有効でないように見える。 – hexafraction

答えて

1

2つの可能性:

  1. あなたがタグの値を反映するためにTAGCのインデックス付き場所を割り当てるしようとしている、あなたは、インデックスを必要とし、その場合には、定数(パラメータ、localparamこと、または `定義します)。

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

0

通常、ダイナミックインデックスを使用する配列の割り当ては、クロック式の手続き型ブロックで行われます。

always @(posedge clk) begin 
    tagc[index] <= tag; 
end 

ラッチすることで行うこともできます。イネーブル信号を使用し、indexがイネーブルされている間は変更されないようにしてください。

always @* begin 
    if (enable) begin 
    tagc[index] <= tag; 
    end 
end 

それとも別のラッチのオプション:FYI

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タイプ

関連する問題