2014-01-21 32 views
1

我想分解两个32位std_logic_vector信号(请参阅下面的代码)。两个输入都是可变的。 当我编写一个单独的模块并对其进行测试时,它是可以的,但是当我将它用作其他模块的一部分时,它不能被模拟。模拟没有错误,但它已停止并将我链接到此模块。 顺便说一下,我与赛灵思VHDL中的分区

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

实际错误报告或消息? –

+0

它不会阻止模拟我认为它与位数有关。 – EYx

+0

它可能没有停止......再给它几个小时!或者更合理地说,将X和Y都转换为整数,以便更快地模拟。 –

回答

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; 

它采用了直接实例化的实体,我们得到:

tb_divex_ghdl.png

这表明直接实例您divex导致一些作品。

您从未回应Brian Drummond的实际警告/错误消息请求,这也阻止某人确定您正在使用哪个供应商的工具。

没有看到那些和你的测试台或刺激应用方法,任何人回答都是残疾人。

您可能正在通过组件声明使用组件实例,在这种情况下,您可能没有绑定组件。您可以使用组件声明来分析VHDL设计规范,但除非实体先前已被分析到设计库中,其内容通过上下文子句可见,否则可能不会将组件绑定到库设计单元。

见IEEE标准1076-1993/-2008 12.4.3/14.5.4组件实例声明:

实例化 组件声明组件实例声明的制定没有影响,除非该组件实例 或者完全绑定到由实体声明 定义的设计实体和架构主体,或者绑定到实体的这样的设计配置。如果一个组件实例被如此绑定,那么对应的组件实例化语句的详细描述由代表组件 实例和(在该块内)的隐含块语句的详细描述组成,该隐含块语句表示该设计实体的隐含块语句 组件实例绑定为 。

一个组件实例使用默认绑定基于它的名字:

5.2.2/7.3.3默认绑定指示

在某些情况下,默认绑定指示将适用于 的没有明确的约束指示。默认绑定 指示包含默认实体方面,以及 默认通用映射方面和默认端口映射方面,如 合适。

如果没有可见的实体声明具有相同的简单名称为的 实例化的组件,则默认的实体方面是开放....

所以你divex组件可以是开放

在某些管理“项目”的工具中,可能会出现这种情况,因为divex的设计文件未包含在“项目”中。有效地,它不会被分析到当前的工作库中,并且当它已经被分析到一个库(一个不同的工程的工作库)中时,它不会被上下文语句看到,它根本就不存在。