VHDL:将输出切片映射到信号

时间:2015-01-13 14:35:22

标签: vhdl aggregate

我想将32位输出端口的低位(bit0)映射到一个信号,并保持高位未连接(OPEN)。有没有办法将此映射视为聚合?

我尝试过以下无效: 港口地图(                  some_output => (0 => sig_1,其他=> OPEN)          );

2 个答案:

答案 0 :(得分:3)

以下不是有效答案,因为它不符合VHDL标准。然而,这个“答案”保留在这里,而不是删除,因为它显示了避免工具合规性的结构,因为有些工具显然接受这种非标准的兼容VHDL代码。

没有关联所有标量子元素的端口映射示例,在某些情况下Altera Quartus II和Mentor ModelSim接受,但也可能导致警告或错误:

port map(
  some_output(0) => sig_1,
  -- some_output others are simply not included in port mapping

因此,正如David Koontzs在评论中指出的那样,VHDL标准(IEEE Std 1076-2008)部分“6.5.7关联列表”描述了:

  

...显式声明的接口对象的每个标量子元素应与同一关联列表中的实际(或其子元素)恰好关联一次,并且所有这些关联应出现在该关联列表中的连续序列中。与接口对象的切片或子元素(或其片)相关联的每个关联元素应使用本地静态名称标识形式。

所以只关联一些标量子元素是无效的,因为标准说“每个标量子元素”,而open不能用于剩余的标量子元素,因为标准说“每个子元素”关联接口对象的切片...的关联元素应使用本地静态名称标识形式。“。

答案 1 :(得分:0)

另一种解决方案是:

signal my_vector       : STD_LOGIC_VECTOR(3 downto 0);
signal my_vector_float : STD_LOGIC_VECTOR(3 downto 0);

port map (
  [...]
  some_output(3 downto 0) => my_vector,
  some_output(7 downto 4) => my_vector_float,
  [...]
);

您现在可以设置一些报告过滤规则,以消除有关*_float信号的所有警告。