我想问问是否可以在VHDL中将别名与多维数组一起使用以及如何解决(1)。
我在体系结构的开头定义了以下数组>
subtype WORD8 is STD_LOGIC_VECTOR (7 downto 0);
type IMEM is array (0 to 576) of WORD8;
signal MEM: IMEM;
通过程序,我使用进程,并且像这样对内存的一部分进行别名>
alias Version: STD_LOGIC_VECTOR (3 downto 0) is MEM(0)(3 downto 0);
alias IHL: STD_LOGIC_VECTOR (3 downto 0) is MEM(0)(7 downto 4);
下面的这行也是别名,两行都有效
alias TOS: STD_LOGIC_VECTOR (7 downto 0) is MEM(1);
alias TOS: STD_LOGIC_VECTOR (7 downto 0) is MEM(1)(7 downto 0);
现在,我有一个比WORD8大的数据,其长度为2xWORD8。我尝试了以下代码,但是没有成功。它导致>
错误:索引名称不是'std_logic_vector'
--(1) How to solve this?
alias TL: STD_LOGIC_VECTOR (15 downto 0) is MEM(3 downto 2);
此行也给出相同的错误>
alias TL: STD_LOGIC_VECTOR (15 downto 0) is MEM(3 downto 2)(7 downto 0);
我正在尝试一种解决方法,但也没有成功>
alias TL2: STD_LOGIC_VECTOR (7 downto 0) is MEM(2);
alias TL3: STD_LOGIC_VECTOR (7 downto 0) is MEM(3);
alias TL4: STD_LOGIC_VECTOR (15 downto 0) is TL3&TL2;
这全是由于VHDL中的强类型键入以及别名规则。别名必须直接指向相同类型的对象。也不能是不是来自声明(例如函数返回)的新对象。由于这些限制,您所有的错误。
std_logic_vector(7 downto 0)
是std_logic的一维数组。 MEM(3 downto 2)(7 downto 0)
是std_logic_vector的一维数组。所以不是同一类型
TL3 & TL2
不是声明的对象,它是函数的返回值。
您唯一的解决方案是使用信号(或变量),因为您正在创建新的子类型。
signal TL4: STD_LOGIC_VECTOR (15 downto 0);
TL4 <= TL2 & TL3;