Я написал объект для 4-разрядного Adder. Этот объект использует другой порт 1 битовых полный сумматора в качестве видимого в коде:Сигналы в форме VHDL testbench не инициализированы
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity adder4bit is
Port (a,b : in STD_LOGIC_VECTOR(3 downto 0);
cin : in STD_LOGIC;
sum : out STD_LOGIC_VECTOR(3 downto 0);
cout : out STD_LOGIC);
end adder4bit;
architecture Behavioral of adder4bit is
component FA is port(a,b,cin : in STD_LOGIC;
sum,cout : out STD_LOGIC);
end component;
signal c : std_logic_vector(2 downto 0);
begin
fa0: FA port map(a(0),b(0),cin,sum(0),c(0));
fa1: FA port map(a(1),b(1),c(0),sum(1),c(1));
fa2: FA port map(a(2),b(2),c(1),sum(2),c(2));
fa3: FA port map(a(3),b(3),c(2),sum(3),cout);
end Behavioral;
Однако следующий TestBench не кажется, что работает как всегда получают значения неиницализированных в сигнале. Я не уверен в коде Waveform!
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY adder4bit_TB IS
END adder4bit_TB;
ARCHITECTURE behavior OF adder4bit_TB IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT adder4bit
PORT(
a : IN std_logic_vector(3 downto 0);
b : IN std_logic_vector(3 downto 0);
cin : IN std_logic;
sum : OUT std_logic_vector(3 downto 0);
cout : OUT std_logic
);
END COMPONENT;
--Inputs
signal a : std_logic_vector(3 downto 0) := (others => '0');
signal b : std_logic_vector(3 downto 0) := (others => '0');
signal cin : std_logic := '0';
--Outputs
signal sum : std_logic_vector(3 downto 0);
signal cout : std_logic;
-- No clocks detected in port list. Replace <clock> below with
-- appropriate port name
-- constant <clock>_period : time := 10 ns;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: adder4bit PORT MAP (
a => a,
b => b,
cin => cin,
sum => sum,
cout => cout
);
-- Clock process definitions
-- <clock>_process :process
-- begin
-- <clock> <= '0';
-- wait for <clock>_period/2;
-- <clock> <= '1';
-- wait for <clock>_period/2;
-- end process;
-- Stimulus process
stim_proc: process
begin
-- hold reset state for 100 ns.
wait for 100 ns;
a <= a + '1';
end process;
stim_proc1: process
begin
-- hold reset state for 100 ns.
wait for 50 ns;
b <= b + '1';
end process;
stim_proc2: process
begin
-- hold reset state for 100 ns.
wait for 25 ns;
cin<=not cin;
end process;
END;
То, что я пытаюсь достичь, - это увеличение a и b с интервалом в 100 и 50 нс соответственно. Но в форме волны каждый сигнал кажется неинициализированным! Что я делаю не так??
Редактировать 1: Код для Adder4bit и FA:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity FA is
Port (a,b,cin : in STD_LOGIC;
cout,sum : out STD_LOGIC);
end FA;
architecture Behavioral of FA is
begin
sum <= a xor b xor cin;
cout <= (a and b) or (b and cin) or (cin and a);
end Behavioral;
Adder4bit:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity adder4bit is
Port (a,b : in STD_LOGIC_VECTOR(3 downto 0);
cin : in STD_LOGIC;
sum : out STD_LOGIC_VECTOR(3 downto 0);
cout : out STD_LOGIC);
end adder4bit;
architecture Behavioral of adder4bit is
component FA is port(a,b,cin : in STD_LOGIC;
sum,cout : out STD_LOGIC);
end component;
signal c : std_logic_vector(2 downto 0);
begin
fa0: FA port map(a(0),b(0),cin,sum(0),c(0));
fa1: FA port map(a(1),b(1),c(0),sum(1),c(1));
fa2: FA port map(a(2),b(2),c(1),sum(2),c(2));
fa3: FA port map(a(3),b(3),c(2),sum(3),cout);
end Behavioral;
Пожалуйста, добавьте код FullAdder. – Paebbels
Скажите, пожалуйста, какой VHDL-симулятор вы используете. – user1155120
Привет, Извините за то, что так поздно. Я использую ISim Ver 14.1 –