VHDL の配列型 - 2023.2 日本語

Vivado Design Suite ユーザー ガイド: ロジック シミュレーション (UG900)

Document ID
UG900
Release Date
2023-10-18
Version
2023.2 日本語

VHDL 配列は、C/C++ では VHDL 配列のエレメント タイプを表す C/C++ 型の配列として表現されます。次の表に、VHDL 配列およびそれと等価の C/C++ 型の例を示します。

表 1. 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 にマップされます。

表 2. VHDL 配列の C/C++ へのマップ
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);