VHDL中的多维别名

问题描述 投票:0回答:1

我想问问是否可以在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
1个回答
0
投票

这全是由于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;
© www.soinside.com 2019 - 2024. All rights reserved.