2014-12-02 2 views
-1

Фактически я хочу создать локальный контроллер, который позволит защелку. Как вы можете видеть на моем коде ниже, сигнал en будет принимать выходные данные из w AND x, чтобы включить защелку. После этого w и x будут отображать en. Например, сначала предположим, что значения w и x начинаются с 1, en станет 1 и заставит защелку извлекать данные из data_in в data_out. После этого en станет входом w и x и приведет к отключению защелки. Тем не менее, схема не работала, когда я тестировал ее, используя программу университетских сигналов. Data_out не принял значение data_in. Я не могу понять, в чем проблема, но я новичок в VHDL. Надеюсь, ты сможешь помочь/посоветуй мне об этом :) Извините за мой плохой английский.Как контролировать вывод inout для локального контроллера

  library ieee; 
      use ieee.std_logic_1164.all; 
      entity gasp_ctrl is 
      port(
       w,x : inout std_logic; --! bidirectional wire 
       data_in : in std_logic; --! Data In when latch is enable 
       data_out: out std_logic -- 
      ); 
      end gasp_ctrl; 

      architecture ctrl of gasp_ctrl is 
       signal en, ww, xx : std_logic; 

      begin 
       en <= w and x; ------ 
       ww <= en; 
       xx <= not en; 
       w <= ww; 
       x <= xx; 


       -------- Latch ------ 
       process(en) 
       begin 
        if(en = '1') then 
         data_out <= data_in; 
        end if; 
       end process; 
      end gasp_ctrl; 
+0

Ваш код VHDL не анализирует. Конечное состояние для тела архитектуры должно быть «end ctrl;» или «end architecture;» или «end architecture ctrl;» вместо «end gasp_ctrl;». Сигнал порта 'inout' порта будет иметь значение, которое является значением разрешения между выходным значением и значением, установленным на входе. Функция, которую вы пытаетесь приписать этим двум сигналам 'x' и' w', не представляется практически невозможной без временного контроля того, какой «конец» использует какое значение, когда вы и не пытаетесь это сделать. Это также вряд ли будет иметь синтез. – user1155120

ответ

1

Ваших строк коды образует комбинаторный цикл:

en <= w and x; 
ww <= en; 
xx <= not en; 
w <= ww; 
x <= xx; 

Если вы wan't для описания асинхронного ворота и задержек, то вы должны создать экземпляр примитивов вручную, в противном случае синтез компилятор оптимизирует ваш линии и жалуются на сигнальные контуры.

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