У меня есть сигнал порта, определенный как INOUT
сигнал. Я устанавливаю порт как выход D-защелки, и выход не определен при ненормальных обстоятельствах. Когда я не запускаю вывод D-защелки через другой модуль, все работает нормально. Однако мне нужно взять выходной сигнал из d-защелки и использовать его в качестве входа в другой модуль. Когда это будет сделано, выход из защелки D ВСЕГДА не определен. Ниже мой код:INOUT сигнал порта не определен при использовании в качестве входного и выходного сигналов
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity top_level is
Port (a_raw : in STD_LOGIC_VECTOR (3 downto 0);
b_raw : in STD_LOGIC_VECTOR (3 downto 0);
a_latched : inout STD_LOGIC_VECTOR (3 downto 0);
b_latched : inout STD_LOGIC_VECTOR (3 downto 0);
reset : in STD_LOGIC;
load : in STD_LOGIC;
s : in STD_LOGIC_VECTOR (3 downto 0);
out0 : inout STD_LOGIC_VECTOR (3 downto 0);
out1 : inout STD_LOGIC_VECTOR (3 downto 0);
out2 : inout STD_LOGIC_VECTOR (3 downto 0);
out3 : inout STD_LOGIC_VECTOR (3 downto 0);
out4 : inout STD_LOGIC_VECTOR (3 downto 0);
out5 : inout STD_LOGIC_VECTOR (3 downto 0);
flag : inout STD_LOGIC_VECTOR (4 downto 0);
result : inout STD_LOGIC_VECTOR (3 downto 0));
signal numone : STD_LOGIC_VECTOR (3 downto 0) := "0001";
signal test : STD_LOGIC_VECTOR (3 downto 0) := a_latched;
end top_level;
architecture Structure of top_level is
component fulladdsub
Port (
x : inout STD_LOGIC_VECTOR (3 downto 0);
y : inout STD_LOGIC_VECTOR (3 downto 0);
cin : in STD_LOGIC;
sum : out STD_LOGIC_VECTOR (3 downto 0));
end component;
component D_Latch
Port (
D : in STD_LOGIC_VECTOR (3 downto 0);
EN : in STD_LOGIC;
Q : inout STD_LOGIC_VECTOR (3 downto 0));
end component;
begin
stage0: D_Latch port map(D=>a_raw, EN=>load, Q=>a_latched); -- allows load to stop A,B from changing
stage1: D_Latch port map(D=>b_raw, EN=>load, Q=>b_latched);
--stage2: fulladdsub port map(x=>a_latched, y=>b_latched, cin=>'0', sum=>out0); -- A+B
--stage3: fulladdsub port map(x=>a_latched, y=>b_latched, cin=>'1', sum=>out1); -- A-B
stage2: fulladdsub port map(x=>a_latched, y=>numone, cin=>'0', sum=>out2); -- A+1
--stage5: fulladdsub port map(x=>a_latched, y=>numone, cin=>'1', sum=>out3); -- A-1
--stage6: fulladdsub port map(x=>b_latched, y=>numone, cin=>'0', sum=>out4); -- B+1
--stage7: fulladdsub port map(x=>b_latched, y=>numone, cin=>'1', sum=>out5); -- B-1
end Structure;
b_latched
и a_latched
являются порты вопрос здесь. Когда я моделирую свой код как есть, a_latched
всегда неопределен (он используется в стадии2), и b_latched
определяется, когда это должно быть. Может ли кто-нибудь помочь мне решить эту проблему?