Для входного порта (например, в ОЗУ):
....
port(
data :inout std_logic_vector (DATA_WIDTH-1 downto 0);
....
-- Memory Write Block
-- Write Operation : When we = 1, cs = 1
MEM_WRITE: process (address, cs, we, data, address_1, cs_1, we_1, data_1) begin
if (cs = '1' and we = '1') then
mem(conv_integer(address)) <= data;
end if;
end process;
-- Tri-State Buffer control
data <= data_out when (cs = '1' and oe = '1' and we = '0') else (others=>'Z');
-- Memory Read Block
MEM_READ: process (address, cs, we, oe, mem) begin
if (cs = '1' and we = '0' and oe = '1') then
data_out <= mem(conv_integer(address));
else
data_out <= (others=>'0');
end if;
end process;
Вы назначаете чтение и запись данных для ввода с условием. Когда данные читаются, они управляются другим модулем. Когда это пишет, это управляется внутренним.
- При управлении другим модулем (как в сигнале) данные разрешаются между всеми 'Z' и вектором "0101010", например. Данные будут обработаны как «0101010».
- В другом случае: другой модуль должен управлять данными по всем "Z", и тогда внутренний сигнал может поместить свое значение в данные.