我试图划分两个32位std_logic_vector信号(参见下面的代码)。两个输入都是可变的。 当我编写一个单独的模块并测试它时,它没关系,但当我将它用作另一个模块的一部分时,它无法模拟。模拟没有错误,但它已停止并将我链接到此模块。 顺便说一下,我正在使用Xilinx
library IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
entity DivEx is
port(
X : in STD_LOGIC_VECTOR(31 downto 0);
Y : in STD_LOGIC_VECTOR(31 downto 0);
R : out STD_LOGIC_VECTOR(31 downto 0)
);
end DivEx;
architecture Behavioral of DivEx is
begin
R <= std_logic_vector(to_signed(to_integer(signed(X) / signed(Y)),32));
end Behavioral;
答案 0 :(得分:1)
VHDL没有模块。他们称之为声明组件或直接实例化实体或配置的组件实例化。
有了这个测试台:
library ieee;
use ieee.std_logic_1164.all;
entity tb_divex is
end entity;
architecture foo of tb_divex is
signal x: std_logic_vector(31 downto 0) :=x"000000FF";
signal y: std_logic_vector(31 downto 0) :=x"00000005";
signal r: std_logic_vector(31 downto 0);
begin
DUT:
entity work.divex
port map (
x => x,
y => y,
r => r
);
STIMULUS:
process
begin
wait for 10 ns; -- so we can see these on a waveform display
y <= x"00000023";
wait for 10 ns;
x <= x"00000123";
y <= x"00000003";
wait for 10 ns;
wait;
end process;
end architecture;
使用我们得到的直接实例化实体:
这表明直接实例化您的divex
会产生有效的内容。
您从未回复过Brian Drummond关于实际警告/错误消息的请求,这也禁止某人确定您使用的是哪个供应商的工具。
如果没有看到那些以及您的测试平台或刺激应用方法,那么任何回答的人都会受到伤害。
您可能通过组件声明使用组件的实例化,在这种情况下,您可能没有绑定组件。您可以使用组件声明来分析VHDL设计规范,但除非先前已将实体分析到其内容通过上下文子句可见的设计库,否则详细说明可能无法将组件绑定到库设计单元。
参见IEEE Std 1076-1993 / -2008 12.4.3 / 14.5.4组件实例化声明:
详细说明实例化a的组件实例化语句 除非组件实例是,否则组件声明无效 要么完全绑定到实体声明定义的设计实体 和体系结构体或绑定到这种设计的配置 实体。如果组件实例如此绑定,那么详细说明 相应的组件实例化语句由 详细说明表示组件的隐含块语句 实例和(在该块内)隐含的块语句 表示组件实例所在的设计实体 界。
组件实例化使用基于它的默认绑定名称:
5.2.2 / 7.3.3默认绑定指示
在某些情况下,将应用默认绑定指示 没有明确的约束力指示。默认绑定 指示由默认实体方面和a组成 默认通用映射方面和默认端口映射方面,如 合适的。
如果没有可见的实体声明具有与其相同的简单名称 实例化组件,然后默认实体方面是打开....
因此,您的divex
组件可以打开。
在一些工具中管理项目&#39;这可能是因为潜水的设计文件未包含在“项目”中。实际上它没有被分析到当前的工作库中,当它被分析到的库(一个不同的项目的工作库)没有通过上下文声明可见时,它根本就不是那里。