vhdl'87中实例引脚上的常量连接

时间:2014-02-27 06:07:59

标签: vhdl modelsim register-transfer-level

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

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

1 个答案:

答案 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)。

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