web-dev-qa-db-ja.com

VHDLの信号の多次元配列

このように宣言されたVHDLのシグナルがあります:

signal Temp_Key : std_logic_vector(79 downto 0);

この Temp_Keyforループを31回通過し、変更されます。 31種類すべてを保存したいTemp_Keys配列内。

VHDLで多次元配列を使用して80ビット信号を保存することは可能ですか?

8
Amritha

はい、最初に型を宣言する必要があります:

type YOUR_ARRAY_TYPE is array (0 to 30) of std_logic_vector(79 downto 0);

タイプを未定義の長さとして宣言することもできることに注意してください。したがって、シグナルを宣言するときに、80ビットワードの数を指定できます。また、VHDL 2008では、slvのサイズを指定せずに、信号の作成時に宣言することもできます。例えば:

type slv_array is array (natural range <>) of std_logic_vector;

そしてそれを使用します

signal MY_SIGNAL : YOUR_ARRAY_TYPE;
...
MY_SIGNAL(0) <= data;
...
MY_SIGNAL(1) <= data;

参考のために ここ を参照してください。

23
Josh

上記の投稿のように、任意の多次元配列データ型を作成できます。注意する必要があるもう1つのことは、このコードが合成可能かどうか(つまり、FPGAまたはASICを対象としているのか、それとも純粋にシミュレーション用であるのか)です。タイミングの重要度と使用する領域の量に応じて、FSM /カウンターまたは生成ブロックを使用して0から31まで繰り返すことができます。上記の投稿に示されている多次元配列インスタンスは確かに合成可能です。

0
boffin

VHDLには2つのオプションがあります

オプション1

signal X is array (range) of ArrayType;

オプション2

signal Y is array (range1, range2) of Type;

オプション1はツールによってより適切にサポートされていると思います。また、これら2つのオプションと、常に カレー 多変量関数(x、y)を単一パラメーターのもののチェーンにできることを教えてくれる関数型プログラミングとの類似性を見つけましたf(x)-> f(y)。後者は配列の配列のように見えます。

0
Val