VHDL部门

时间:2014-01-21 22:08:02

标签: vhdl division signed

我试图划分两个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;

1 个答案:

答案 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;

使用我们得到的直接实例化实体:

tb_divex_ghdl.png

这表明直接实例化您的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;这可能是因为潜水的设计文件未包含在“项目”中。实际上它没有被分析到当前的工作库中,当它被分析到的库(一个不同的项目的工作库)没有通过上下文声明可见时,它根本就不是那里。