2016-12-10 3 views
0

У меня есть сигнал порта, определенный как 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 определяется, когда это должно быть. Может ли кто-нибудь помочь мне решить эту проблему?

ответ

0

Когда вы используете inout, ваша архитектура должна явно привести его к 'Z', когда вы пытаетесь использовать его в качестве ввода. Аналогично, содержащая архитектура (обычно это только тестовая площадка для inouts) должна установить свой драйвер на 'Z', когда он хочет прочитать результат.

Я не могу точно определить, в чем ваша проблема, потому что в вашем вопросе недостаточно деталей; ему не хватает реализаций D_Latch и независимо от того, что у вас есть с другим модулем.

Также имейте в виду, что если это для цели FPGA, вы должны использовать только inout для портов верхнего уровня, которые подключаются к контактам на вашей ПЛИС. Это, как правило, единственный раздел FPGA, который имеет буферы с тремя состояниями (то, что inout представляет собой аппаратное обеспечение).

Если D_Latch фактически записан как защелка, то выход будет неопределенным, если вы никогда не утверждали EN, поскольку это то, что должна делать защелка.

Смежные вопросы