0

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

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

4

1 回答 1

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

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

于 2014-02-27T09:38:47.483 回答