ISim为所有触发器输出显示U.

时间:2017-11-04 11:53:36

标签: vhdl fpga

当我尝试使用ISIM模拟我的VHDL代码时,它仅显示所有输出的U

它只是由三个级联D型触发器组成。

这是我的VHDL代码:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity az_4_2 is
    Port ( clk: in std_logic;
            X : in  STD_LOGIC;
              Ain : in  STD_LOGIC;
           Bin : in  STD_LOGIC;
              Cin : in  STD_LOGIC;
           Aout : out  STD_LOGIC;
           Bout : out  STD_LOGIC;
              Cout : out  STD_LOGIC;
           Y : out  STD_LOGIC;
              reset : in std_logic);
end az_4_2;

architecture Behavioral of az_4_2 is
begin


process(clk, reset, Ain, Bin, Cin, X)
begin

if (reset = '1') then
Y <= '0';

elsif (Ain = '0') and (Bin = '0') and (Cin = '0') then
Y <= '0';

elsif (Ain = '0') and (Bin = '0') and (Cin = '1') then
Y <= '0';

elsif (Ain = '0') and (Bin = '1') and (Cin = '0') then
Y <= '0';

elsif (Ain = '0') and (Bin = '1') and (Cin = '1') then
if (x = '0') then
Y <= '0';
else
Y <= '1';
end if;

elsif (Ain = '1') and (Bin = '0') and (Cin = '0') then
if (x = '0') then
Y <= '0';
else
Y <= '1';
end if;

end if;


if(rising_edge(clk)) then


if (reset = '1') then
Aout <= '0';
Bout <= '0';
Cout <= '0';

elsif (Ain = '0') and (Bin = '0') and (Cin = '0') then
if (x = '0') then
Aout <= '0';
Bout <= '0';
Cout <= '0';
else
Aout <= '1';
Bout <= '0';
Cout <= '0';
end if;

elsif (Ain = '0') and (Bin = '0') and (Cin = '1') then
if (x = '0') then
Aout <= '0';
Bout <= '1';
Cout <= '0';
else
Aout <= '0';
Bout <= '1';
Cout <= '1';
end if;

elsif (Ain = '0') and (Bin = '1') and (Cin = '0') then
if (x = '0') then
Aout <= '0';
Bout <= '0';
Cout <= '0';
else
Aout <= '0';
Bout <= '1';
Cout <= '1';
end if;

elsif (Ain = '0') and (Bin = '1') and (Cin = '1') then
if (x = '0') then
Aout <= '1';
Bout <= '0';
Cout <= '0';
else
Aout <= '0';
Bout <= '1';
Cout <= '1';
end if;

elsif (Ain = '1') and (Bin = '0') and (Cin = '0') then
if (x = '0') then
Aout <= '0';
Bout <= '0';
Cout <= '0';
else
Aout <= '0';
Bout <= '1';
Cout <= '1';

end if;
end if;
end if;
end process;
end Behavioral;

这是我的TEST_BENCH:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

ENTITY tb_az_4 IS
END tb_az_4;

ARCHITECTURE behavior OF tb_az_4 IS 

COMPONENT az_4
    Port ( clk: in std_logic;
            reset: in std_logic;
            X : in  STD_LOGIC;
              Ain : in  STD_LOGIC;
           Bin : in  STD_LOGIC;
              Cin : in  STD_LOGIC;
           Aout : out  STD_LOGIC;
           Bout : out  STD_LOGIC;
              Cout : out  STD_LOGIC;
           Y : out  STD_LOGIC);
END COMPONENT;

   --Inputs
   signal clk, reset : std_logic := '0';

    --BiDirs
   signal X, Ain, Bin, Cin, Aout, Bout, Cout, Y : std_logic;

begin
   uut: az_4 PORT MAP (
          clk => clk,
             reset => reset,
          X => X,
          Ain => Ain,
             Aout => Aout,
             Bin => Bin,
          Bout => Bout,
             Cin => Cin,
             Cout => Cout,
          Y => Y
        );

   -- Clock process definitions
clock_process :process
begin
     clk <= '0';
     wait for 5 ns;
     clk <= '1';
     wait for 5 ns;
end process;


-- Stimulus process
stim_proc: process
begin        
   -- hold reset state for 100 ns.
   reset <= '1';    
    wait for 10 ns;
    reset <= '0';   
   Ain <= '0';
   Bin <= '0';
    Cin <= '0';
    x <= '0'; 

   wait;
end process;

END behavior;

为什么会发生这种情况?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在详细说明期间,组件声明的组件实例化与特定设计实体相关联。这可以显式地完成 - 通过封闭块声明性区域中的配置规范或提供绑定指示的配置声明,或通过默认绑定隐式地完成。

在示例中缺少配置规范和配置声明,在精化过程中会尝试使用默认绑定指示。搜索组件实例化语句中的组件名称(az_4)。

搜索找到第一个:

  • 具有相同简单名称且直接可见的实体声明(通过L.all形式的use子句;其中L是参考库)。
  • 如上所述的实体,可直接显示禁止可见组件声明,并使用相同的简单名称隐藏实体。

  • 由L.C表示的实体声明,其中L是声明组件C的目标库逻辑名称。

在您的情况下,搜索未找到az_4,注意您确实提供了az_4_2。

您在测试平台体系结构体中的uut在默认绑定指示中未绑定,而没有名为az_4的实体直接可见。

有三种方法可以解决这个问题。

  1. 您可以使四个名称匹配(实体az_4_2中的实体名称,它的匹配体系结构体,testbench体系结构体中的组件声明和组件实例化语句)并依赖于默认绑定。

  2. 您可以将绑定指示作为配置规范提供为testbench体系结构声明项:

     for uut: az_4                    -- ADDED configuration  specification
         use entity work.az_4_2;
    begin
       uut: az_4 port map (
    
  3. 或者您可以在配置声明中提供绑定指示,这对单个组件实例化来说几乎不值得。

  4. 我已经检查过您的代码将使用前两种方法进行分析,详细说明和模拟,并注意到您的测试平台不会停止模拟,直到模拟时间达到TIME&#39; HIGH而没有实施干预(例如在设定的时间间隔内运行模拟)。时钟不断运行。

    提供上面显示的配置规范会产生:

    tb_az_4.png

    这表明绑定指示有效,并且您的测试平台stim_proc进程尚未完全开发。