VHDL'87 中实例引脚上的持续连接



我有以下简单的测试用例:

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不支持这一点,那么将常量连接到实例引脚的正确方法是什么。

查看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 Std1076-1993 VHDL LRM-2.1.1.2信号参量]

因此,是的,端口关联中的实际值的有效值存在差异。1993年的"自由化"也适用于后来的版本(2002年、2008年)。

实际需要命名,而不仅仅是一个表达式。具有默认值的输入可以保持打开状态。

最新更新