То есть мой первый опыт.
Да, вот есть задача - подключиться к ISA своей железякой.
Выбрал AT94s10 - вроде все фичи есть и устраивают.
Ну, конечно куча литературы была скачана и прочитана - которая по диагонали, которая повнимательней. Соответсвенно в мозгах пока каша.

Куплен STK594. Соответственно среда разработки - System designer (Atmel)
Ура! Отдельно от компа все весело дрыгает ногами. Подключаем к компу - все печально - шина данных по включению вся в нулях!
Начинаю разбор - вроде для начинающего все в пределах нормы - несколько варнингов с виду не страшных - по поводу не подключенных сигналов. Но компилируется. Смотрю дальше - Figaro гад, совершенно спокойно из двунаправленной шины с Z состоянием как я хотел, сделал OBUF! Ну вот и вопрос - почто это он? И как бороться? Не, ну я понимаю, что я что-то не так ему сказал, но где?
Собственно файл:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity Inter is
port (
AddrIn : in std_logic_vector(19 downto 0); -- Input address bus
AddrOut : out std_logic_vector(17 downto 0):="000000000000000000"; -- Output latched address bus
AenIn : in std_logic; -- Input signal Address enable
DataExt : inout std_logic_vector(15 downto 0):="ZZZZZZZZZZZZZZZZ"; -- External Data bus
DataInt : inout std_logic_vector(15 downto 0):="ZZZZZZZZZZZZZZZZ"; -- Internal Data bus
MemWrIn : in std_logic; -- Input signal MemWr
MemRdIn : in std_logic; -- Input signal MemRd
IoWrIn : in std_logic; -- Input signal IoWr
IoRdIn : in std_logic; -- Input signal IoRd
MemCs16 : out std_logic:='Z'; -- Output signal MemCS16
IoCs16 : out std_logic:='Z'; -- Output signal IOCS16
FlashRd : out std_logic:='H';
FlashCs : out std_logic:='H';
SBHE : in std_logic
);
end;
architecture Behavior of Inter is
signal IntAddr : std_logic_vector(19 downto 0); -- Internal buffering address
begin
-- AddrOut <="000000000000000000";
DataExt <="ZZZZZZZZZZZZZZZZ";
MemCs16 <='Z';
IoCs16 <='Z';
FlashRd <='H';
FlashCs <='H';
-----------------------------------------------------------
process (AenIn, AddrIn) -- Address latch process
begin
if(AenIn'event and AenIn='1')then -- rising edge of AEN
IntAddr<=AddrIn; -- store to internal buffer
if(AddrIn(19 downto 16)=X"f") then -- compare to work address space
AddrOut<=AddrIn(17 downto 0); -- if ok, addr to output
end if;
end if;
end process;
-----------------------------------------------------------
process(IoWrIn) -- IO write process
begin
if(IoWrIn'event and IoWrIn='0') then -- failling edge of IOWr
if(IntAddr(11 downto 0)=X"378" and ((MemRdIn='1' and MemWrIn='1') and IoRdIn='1')) then
DataInt<=DataExt; -- if addr space and concurrent signal is ok
end if;
end if;
end process;
-----------------------------------------------------------
process(MemRdIn) -- Memory read end process
begin
if(MemRdIn'event and MemRdIn='1') then -- failling edge of MemRd
DataExt<="ZZZZZZZZZZZZZZZZ";
end if;
end process;
-----------------------------------------------------------
process(IoRdIn) -- IO read end process
begin
if(IoRdIn'event and IoRdIn='1') then -- failling edge of MemRd
DataExt<="ZZZZZZZZZZZZZZZZ";
end if;
end process;
-----------------------------------------------------------
process(IoRdIn) -- IO read process
begin
if(IoRdIn'event and IoRdIn='0') then -- failling edge of IORd
if(IntAddr(11 downto 0)=X"378" and ((MemWrIn='1' and IoWrIn='1') and MemRdIn='1')) then
DataExt<=X"0000";
end if;
end if;
end process;
-----------------------------------------------------------
end;