我想将32位输出端口的低位(bit0)映射到一个信号,并保持高位未连接(OPEN)。有没有办法将此映射视为聚合?
我尝试过以下无效: 港口地图( some_output => (0 => sig_1,其他=> OPEN) );
答案 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
信号的所有警告。