【发布时间】:2018-09-06 05:48:47
【问题描述】:
我正在尝试使用 VHDL 配置规范进行预设
这应该是可能的,如 IEEE1076-2008,第 7.3.2.1 节所示,其中给出了以下示例:
entity AND_GATE is
generic (I1toO, I2toO: DELAY_LENGTH := 4 ns);
port (I1, I2: in BIT; O: out BIT);
end entity AND_GATE;
entity XOR_GATE is
generic (I1toO, I2toO: DELAY_LENGTH := 4 ns);
port (I1, I2: in BIT; O: out BIT);
end entity XOR_GATE;
package MY_GATES is
component AND_GATE is
generic (I1toO, I2toO: DELAY_LENGTH := 4 ns);
port (I1, I2: in BIT; O: out BIT);
end component AND_GATE;
component XOR_GATE is
generic (I1toO, I2toO: DELAY_LENGTH := 4 ns);
port (I1, I2: in BIT; O: out BIT);
end component XOR_GATE;
end package MY_GATES;
entity Half_Adder is
port (X, Y: in BIT; Sum, Carry: out BIT);
end entity Half_Adder;
use WORK.MY_GATES.all;
architecture Structure of Half_Adder is
for L1: XOR_GATE use
entity WORK.XOR_GATE(Behavior) -- The primary binding
generic map (3 ns, 3 ns) -- indication for instance L1.
port map (I1 => I1, I2 => I2, O => O);
for L2: AND_GATE use
entity WORK.AND_GATE(Behavior) -- The primary binding
generic map (3 ns, 4 ns) -- indication for instance L2.
port map (I1, open, O);
begin
L1: XOR_GATE port map (X, Y, Sum);
L2: AND_GATE port map (X, Y, Carry);
end architecture Structure;
use WORK.GLOBAL_SIGNALS.all;
configuration Different of Half_Adder is
for Structure
for L1: XOR_GATE
generic map (2.9 ns, 3.6 ns); -- The incremental binding
end for; -- indication of L1; rebinds its generics.
for L2: AND_GATE
generic map (2.8 ns, 3.25 ns) -- The incremental binding
port map (I2 => Tied_High); -- indication of L2; rebinds
end for; -- its generics and binds its open port.
end for;
end configuration Different;
即使我自己添加示例中缺少的包
package GLOBAL_SIGNALS is
constant Tied_High : bit := '1';
end package GLOBAL_SIGNALS;
Modelsim 中的细化仍然失败。
错误:[...]/half_adder.vhd(36): (vcom-1035) 正式端口“I2”已打开或没有实际关联。
线路造成的
port map (I1, open, O);
这似乎表明 Modelsim 不能正确支持这些配置语句。
我想使用此配置规范来简化我的设计输入。
例子:
entity comp is
generic(step : time; defined: boolean);
port(clk, data : in bit);
end entity;
entity e is end entity e;
architecture a of e is
component comp is
generic(step : time; defined: boolean);
port(clk, data : in bit);
end component;
signal clk1, clk2 : bit;
for a : comp use
entity work.comp
generic map(step => 1 ns)
port map(clk => clk1);
for b : comp use
entity work.comp
generic map(step => 100 ns)
port map(clk => clk2);
for all : comp use
entity work.comp
generic map(defined => true);
signal sig_a, sig_b : bit;
begin
a: comp
port map(data => sig_a);
b_gen : for i in 0 to 2 generate
b: comp
port map(data => sig_b);
end generate;
end architecture;
这段代码抛出大量错误:
错误:[...]/e.vhd(19): (vcom-1031) 正式的泛型“已定义”已打开或没有实际关联。
错误:[...]/e.vhd(19): (vcom-1035) 正式端口“数据”已打开或没有实际关联。
错误:[...]/e.vhd(23): (vcom-1031) 正式的泛型“已定义”已打开或没有实际关联。
错误:[...]/e.vhd(23): (vcom-1035) 正式端口“数据”已打开或没有实际关联。
错误:[...]/e.vhd(26): (vcom-1031) 正式的通用“步骤”已打开或没有实际关联。
错误:[...]/e.vhd(24):组件“comp”的所有配置规范尝试重新绑定已绑定的实例。
错误:[...]/e.vhd(24):组件“comp”的所有配置规范尝试重新绑定已绑定的实例。
错误:[...]/e.vhd(32): (vcom-1031) 正式的通用“步骤”已打开或没有实际关联。
错误:[...]/e.vhd(32): (vcom-1031) 正式的泛型“已定义”已打开或没有实际关联。
错误:[...]/e.vhd(32): (vcom-1035) 正式端口“clk”已打开或没有实际关联。
错误:[...]/e.vhd(36): (vcom-1031) 正式的通用“步骤”已打开或没有实际关联。
错误:[...]/e.vhd(36): (vcom-1031) 正式的泛型“已定义”已打开或没有实际关联。
错误:[...]/e.vhd(36): (vcom-1035) 正式端口“clk”已打开或没有实际关联。
警告:[...]/e.vhd(24): (vcom-1263) 配置规范“all : comp”不适用于任何组件实例化语句。
错误:[...]/e.vhd(20):未找到带有标签“b”的语句。
因此,这似乎不是使用配置规范的受支持方式。太糟糕了,因为它会简化我的设计输入。
我这只是一个 Modelsim 错误,或者配置规范不会以这种方式帮助这些默认绑定?
【问题讨论】:
-
配置声明中的配置规范可能非常强大——它们不需要更改原始设计描述。例如,您可以将一个库中的实体替换为另一个库,并提供一个允许使用不同实际名称的接口。这方面的一个例子是使用不同供应商的单元库。您没有使用它的部分原因是综合供应商不支持将其视为零和竞争的配置声明,而它们可用于测试平台中的验证,例如不同的抽象级别。
-
正如 L2 的答案 I2 的评论中所指出的:AND_GATE 的端口映射是 Tied_High,来自未提供的包 global_signals 的信号描述为在库工作中通过 use 子句找到的。这将是位类型包中的信号,默认值为“1”。
-
@user1155120 哇,你甚至删除了你的答案并投了赞成票。仅供参考:我在我的问题中添加了更多信息以澄清我的观点。我发现这是必要的,因为在您的回答中,您告诉了我我已经知道的事情。对我来说,这意味着我需要改变我的问题,因为你不清楚我想知道什么。它仍然不是,似乎。
-
您的问题包括“但是为什么 Modelsim 不接受我的配置规范?”这就是答案所要解决的问题。所有的编辑是什么?看来您只是想要一个场所来抱怨标准(而且我与 P1076 无关)。
-
我的问题很严重。第一:有没有办法做我想做的事,使用配置。第二:modelsim 中的配置是否未正确实现。