数组声明不清楚

时间:2015-05-16 16:04:19

标签: vhdl

使用代码:

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

1 个答案:

答案 0 :(得分:2)

con'high是对high数组的con属性的引用,并返回con数组范围的最高(最大)索引值。

因此,对于x_array2 * 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的声明。