Пример работы с двунаправленной шиной. От идеала далек, но мало ли
tim_data:process
variable timer0:unsigned(31 downto 0):="00000000000000000000000000000000";--начальное значение
variable timer1:unsigned(31 downto 0):="00000000000000000000000000000000";
constant delt:unsigned(31 downto 0):="00000000000000000000000000001011";--преращение
variable timerz:std_logic_vector(31 downto 0):="ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
begin
wait on ouen,clin;--Ждем смены такта и сигнала разрешения
if(ouen='1')then
tbus<=timerz;-- линия в 3-м состоянии, работа на выход
else
wait for 120 ns;
tbus<=std_logic_vector(timer0);--вводим данные из шины
timer0:=timer0 + delt;-- готовим новое значение.
end if;
end process tim_data;