VHDL 配列は、C/C++ では VHDL 配列のエレメント タイプを表す C/C++ 型の配列として表現されます。次の表に、VHDL 配列およびそれと等価の C/C++ 型の例を示します。
VHDL の配列型 | C/C++ の配列型 |
---|---|
std_logic_vector (std_logic の配列) |
char [ ]
|
bit_vector (bit の配列) |
char [ ]
|
string (character の配列) |
char [ ]
|
integer の配列 |
int [ ]
|
real の配列 |
double [ ]
|
C/C++ では、VHDL 配列の左インデックスは C/C++ 配列要素 0 にマップされ、右インデックスは C/C++ 要素 <array size> - 1 にマップされます。
C/C++ の配列インデックス | 0 | 1 | 2 | … | <array size> - 1 |
VHDL 配列 (left TO right) インデックス | left | left + 1 | left + 2 | … | right |
VHDL 配列 (left DOWNTO right) インデックス | left | left – 1 | left – 2 | … | right |
コード例
// For the following VHDL definitions
// signal slv : std_logic_vector(7 downto 0);
// signal bv : bit_vector(3 downto 0);
// signal s : string(1 to 11);
// type IntArray is array(natural range <>) of integer;
// signal iv : IntArray(0 to 3);
// do the following assignments
//
// slv <= "11001010";
// bv <= B"1000";
// s <= "Hello world";
// iv <= (33, 44, 55, 66);
const unsigned char slvVal[] = {3, 3, 2, 2, 3, 2, 3, 2}; // 3 = '1', 2 = '0'
loader.put_value(slv, slvVal);
const unsigned char bvVal[] = {1, 0, 0, 0};
loader.put_value(bv, bvVal);
const char sVal[] = "Hello world"; // ends with extra '\0' that XSI ignores
loader.put_value(s, sVal);
const int ivVal[] = {33, 44, 55, 66};
loader.put_value(iv, ivVal);