vhdl - VHDL中的多维别名
问题描述
我想问一下是否可以在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_vectors 的一维数组。所以不是同一类型
TL3 & TL2
不是一个声明的对象,它是一个函数返回值。
您唯一的解决方案是使用信号(或变量),因为您正在创建一个新的子类型。
signal TL4: STD_LOGIC_VECTOR (15 downto 0);
TL4 <= TL2 & TL3;
推荐阅读
- reactjs - (React) 组件更新时如何将焦点放在第一个元素上?
- python - 使用和不使用参数的上下文装饰器
- python - 无法将 float64 列转换为 pandas 对象
- python - 总和在给定范围内的列表列表(作业)
- android - 从 YouTube 的共享菜单加载后,在我的 WebView 中打开 URL
- android - Android SQLite 获取表的大小(以 kb 为单位)
- wordpress - 将存档模板应用于帖子类别时未捕获的错误
- jquery - 仅在视口中播放视频一次
- angular - 如何在 ngx-slick-carousel 中显示最后一个元素
- c - for循环,为什么总是执行最后一个条件?