Я пишу код для простого арифметического уравнения d = 1 + (k * o).В моем коде три процесса. Третий процесс зависит от второго, а второй - от первого. Я не могу правильно составить список чувствительности.Выходные данные остаются неопределенными.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity dcalc is
Port ( k : in STD_LOGIC_VECTOR (7 downto 0);
o : in STD_LOGIC_VECTOR (7 downto 0);
e : in STD_LOGIC_VECTOR (7 downto 0);
d : out STD_LOGIC_VECTOR (7 downto 0);
clk: in STD_LOGIC);
end dcalc;
architecture Behavioral of dcalc is
COMPONENT divd
PORT(
d1 : IN std_logic_vector(7 downto 0);
e : IN std_logic_vector(7 downto 0);
remi : OUT std_logic_vector(7 downto 0);
clk : IN std_logic
);
END COMPONENT;
signal endp1,d2,k1,o1,e1,d3: unsigned (7 downto 0);
--signal d3:std_logic_vector(7 downto 0);
begin
--process 1
process(k,o,e)
begin
if(clk'event and clk='1') then
k1<=unsigned(k);
o1<=unsigned(o);
e1<=unsigned(e);
endp1<=x"01";
end if;
end process;
--process 2
process(endp1)
begin
if(clk'event and clk='1') then
d2<=1+(k1*o1);
end if;
end process;
--process 3
process(d2)
begin
if(clk'event and clk='1') then
d<=std_logic_vector(d2);
end if;
end process;
end Behavioral;
В первом процессе преобразование завершено.Когда процесс 1 завершен, тогда d2 должен быть рассчитан в процессе 2. Когда d2 рассчитывается в процессе 2, d должен быть обновлен в процессе 3. Вот мой код испытательного стенда:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
ENTITY ccalctb IS
END ccalctb;
ARCHITECTURE behavior OF ccalctb IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT dcalc
PORT(
k : IN std_logic_vector(7 downto 0);
o : IN std_logic_vector(7 downto 0);
e : IN std_logic_vector(7 downto 0);
d : OUT std_logic_vector(7 downto 0);
clk : IN std_logic
);
END COMPONENT;
--Inputs
signal k : std_logic_vector(7 downto 0) := (others => '0');
signal o : std_logic_vector(7 downto 0) := (others => '0');
signal e : std_logic_vector(7 downto 0) := (others => '0');
signal clk : std_logic := '0';
--Outputs
signal d : std_logic_vector(7 downto 0);
-- Clock period definitions
constant clk_period : time := 10 ns;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: dcalc PORT MAP (
k => k,
o => o,
e => e,
d => d,
clk => clk
);
-- Clock process definitions
clk_process :process
begin
clk <= '0';
wait for clk_period/2;
clk <= '1';
wait for clk_period/2;
end process;
-- Stimulus process
stim_proc: process
begin
-- hold reset state for 100 ns.
wait for 100 ns;
k<=x"07";
o<=x"08";
e<=x"07";
wait for clk_period*10;
-- insert stimulus here
wait;
end process;
END;
Пожалуйста, помогите.Вот результат моделирования после изменения всего списка чувствительности процесса только к clk: