Цитата(nya @ Nov 27 2008, 15:23)

Здравствуйте.
Подскажите пожалуйста, как правильно организовать двунаправленную линию? Имеет место быть некий блок на VHDL, (а точнее два одинаковых блока - для проверки их работы) с двунаправленным портом. В симуляции работает нормально,то есть передача данных в обе стороны (между двумя блоками) работает как нужно, без неопределенностей. В блоке, работающем на прием, входовыход стоит в Z.
В плисе - без соединения входов-выходов - тоже работает, но если соединить - никакого сигнала нет. Как нужно правильно организовать эти самые входовыходы? Какие-то буферы, или настройки имплементации... Плис - Xilinx Spartan 2, среда разработки - AHDL+ISE9.2
Или, может, ссылку на информацию об этом...
Спасибо.
library ieee;
use ieee.std_logic_1164.all;
entity InOutGen is
GENERIC (DataRange : integer);
port
(
ClockIn, -- General Clock
nResetIn, -- General Reset active low
nEnable : in std_logic; -- Active 0 for read
DataIn : in std_logic_vector(DataRange downto 0);
DataOut : out std_logic_vector(DataRange downto 0);
DataIO : inout std_logic_vector(DataRange downto 0)
);
end InOutGen;
architecture ArchInOutGen of InOutGen is
signal DataIoTmp : std_logic_vector(DataRange downto 0);
signal DataOutTmp : std_logic_vector(DataRange downto 0);
begin
DataIoTmp <= DataIO;
DataOut <= DataOutTmp;
InOutProcess:
process (nResetIn,ClockIn,nEnable,DataIoTmp,DataIn,DataOutTmp)
begin
if (nResetIn = '0')then
DataIO <= (others => 'Z');
DataOutTmp <= (others => '0');
elsif ClockIn'event and ClockIn = '1'then
if nEnable = '0' then
DataIO <= DataIn;
DataOutTmp <= DataOutTmp;
else
DataIO <= (others => 'Z');
DataOutTmp <= DataIoTmp;
end if;
end if;
end process InOutProcess;
end ArchInOutGen;