使用代码:
type x_array is array(1 to 2 * con'high - 2) of signed (7 downto 0);
con' high的工作是什么?
在程序中con
是一个定义为:
generic(
con : const_array := ("00110011", "00110011", "00110011", "00110011"));
...
和const_array
是一个8位的无约束数组。
请解释什么是2 * con'high - 2
?
答案 0 :(得分:2)
con'high
是对high
数组的con
属性的引用,并返回con
数组范围的最高(最大)索引值。
因此,对于x_array
,2 * con'high - 2
将用作'x_array'索引范围的一部分,以便根据x_array
定义con
范围。
con'high
的实际值取决于const_array
的声明,或者更确切地说取决于用于const_array
范围的类型。因此,const_array
的各种声明:
type const_array is array(positive range <>) of signed(7 downto 0);
-- Range is 1 to 4, and con'high = 4
type const_array is array(natural range <>) of signed(7 downto 0);
-- Range is 0 to 3, and con'high = 3
type const_array is array(integer range <>) of signed(7 downto 0);
-- Range is integer'low to integer'low + 3, and con'high = integer'low + 3,
-- e.g. -2147483645 for 32-bit integer
或者更奇怪的是:
subtype const_array_range is natural range 17 downto 14;
type const_array is array(const_array_range) of std_logic_vector(7 downto 0);
-- Range is 17 to 14, and con'high = 17
或者它甚至可以是枚举类型中的值,其声明如下:
type const_array_range is (ALFA, BRAVO, CHARLIE, DELTA, ECHO);
type const_array is array(const_array_range range <>) of std_logic_vector(7 downto 0);
-- Range is ALFA to DELTA, and con'high = DELTA
在con'high
中使用2 * con'high - 2
时,最后一行会导致错误,但同样,该值取决于const_array
的声明。