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