当我尝试使用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;
为什么会发生这种情况?我该如何解决这个问题?
答案 0 :(得分:0)
在详细说明期间,组件声明的组件实例化与特定设计实体相关联。这可以显式地完成 - 通过封闭块声明性区域中的配置规范或提供绑定指示的配置声明,或通过默认绑定隐式地完成。
在示例中缺少配置规范和配置声明,在精化过程中会尝试使用默认绑定指示。搜索组件实例化语句中的组件名称(az_4)。
搜索找到第一个:
如上所述的实体,可直接显示禁止可见组件声明,并使用相同的简单名称隐藏实体。
由L.C表示的实体声明,其中L是声明组件C的目标库逻辑名称。
在您的情况下,搜索未找到az_4,注意您确实提供了az_4_2。
您在测试平台体系结构体中的uut在默认绑定指示中未绑定,而没有名为az_4的实体直接可见。
有三种方法可以解决这个问题。
您可以使四个名称匹配(实体az_4_2中的实体名称,它的匹配体系结构体,testbench体系结构体中的组件声明和组件实例化语句)并依赖于默认绑定。
您可以将绑定指示作为配置规范提供为testbench体系结构声明项:
for uut: az_4 -- ADDED configuration specification
use entity work.az_4_2;
begin
uut: az_4 port map (
或者您可以在配置声明中提供绑定指示,这对单个组件实例化来说几乎不值得。
我已经检查过您的代码将使用前两种方法进行分析,详细说明和模拟,并注意到您的测试平台不会停止模拟,直到模拟时间达到TIME&#39; HIGH而没有实施干预(例如在设定的时间间隔内运行模拟)。时钟不断运行。
提供上面显示的配置规范会产生:
这表明绑定指示有效,并且您的测试平台stim_proc进程尚未完全开发。