我有以下简单的测试用例:
library ieee;
use ieee.std_logic_1164.all;
entity top is
end top;
architecture top of top is
component foo
port (A : std_logic_vector(1 downto 0));
end component;
begin
inst : foo port map (A(1) => '0', A(0) => '0');
end top;
------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
entity foo is
port (A : std_logic_vector(1 downto 0));
end foo;
architecture foo of foo is
begin
end foo;
在运行modelsim时,运行正常。但是,当我使用选项'-87'运行modelsim时,它会给我一个错误Error: top.vhd(13): (vcom-1451) Actual (enumeration literal '0') for formal "A" is not signal name.
我没有得到这个。这是VHDL'87中的一些非法RTL吗?
如果在VHDL'87中不支持,那么将常量连接到实例引脚的方法是正确的。
答案 0 :(得分:2)
查看Modelsim的Verror消息:
vcom消息#1451:实际指示符不是静态信号 名字,它是一个表达。在VHDL 1987端口映射中,实际的 关联元素中的指示符必须是静态信号 名称或转换函数调用,其唯一参数是静态 信号名称。在任何VHDL语言的子程序关联列表中 版本,实际与类SIGNAL子程序相关联 参数必须是静态信号名称 更高版本的VHDL允许 端口图中实际的灵活性。
尝试使用-93,-2002或-2008切换到vcom [DOC:IEEE Std 1076-1987 VHDL LRM - 2.1.1.2信号参数,
4.3.3.2关联列表]
[DOC:IEEE Std 1076-1993 VHDL LRM - 2.1.1.2信号参数]
所以,是的,对于端口关联中的实际有效内容是有区别的。 -1993'自由化'也适用于后期版本(-2002,-2008)。
实际需要命名而不仅仅是表达式。具有默认值的输入可以保持打开状态。