Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Начинаю на FpSlick и ни хрена не пойму
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
andk
Вот судьба заставила обратиться к плисинам...
То есть мой первый опыт.
Да, вот есть задача - подключиться к ISA своей железякой.
Выбрал AT94s10 - вроде все фичи есть и устраивают.
Ну, конечно куча литературы была скачана и прочитана - которая по диагонали, которая повнимательней. Соответсвенно в мозгах пока каша. smile.gif
Куплен 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;
k2i
1.Z- состояние должно включаться не по фронту а по уровню,
например так

if IORdIn = '0' and AddrIn = "....." then
DataExt <= DataInt;
else
DataExt <= "ZZZZZZZZZZZZZZZZ";
end if;

2. Плата должна работать только при совпадении выделенного ей адреса с адресом на шине.

3. возможно что-то ещё, трудно разобраться в этом коде.
andk
То есть нужно писать так?
process(IoRdIn) -- IO read process
begin
if(IoRdIn='0') then -- low level 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;

>> 2. Плата должна работать только при совпадении выделенного ей >>адреса с адресом на шине.
А у меня разве не так?

>> 3. возможно что-то ещё, трудно разобраться в этом коде.
Почему трудно? что я пишу не так?
А как нужно?
k2i
Цитата(andk @ Jan 5 2005, 09:43)
То есть нужно писать так?
process(IoRdIn) -- IO read process
begin
if(IoRdIn='0') then -- low level 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;

*



Да, только надо дописать

else DataExt <= "ZZZZZZZZZZZZZZZZ";


Цитата(andk @ Jan 5 2005, 09:43)
>> 2. Плата должна работать только при совпадении выделенного ей >>адреса с адресом на шине.
А у меня разве не так?


>> 3. возможно что-то ещё, трудно разобраться в этом коде.
Почему трудно? что я пишу не так?
А как нужно?
*


У тебя значение одного и того же сигнала присваивается в разных процессах, а надо в одном, как я уже написал
andk
>>У тебя значение одного и того же сигнала присваивается в разных процессах, а надо в одном, как я уже написал

Упс...
То есть ВСЯ работа с шиной данных (DataExt в моем случае) должна быть описана в одном процессе?
k2i
Не вся работа, а только присвоение значений сигналу DataExt.
andk
Угу, неправильно сформулировал "Погорячился, был не прав (с)"
Каждому выходному сигналу - свой процесс - так что ли?
И вообще, где написано про правила формирования выходных сигналов человеческим языком? Ну так чтоб хотя бы на одной странице, а не размазано по всему документу?
_Sam_
Правила определены в стандарте VHDL.

А на Figaro зря ругаешься. Он только размещает проект на кристалле, используя входной нетлист. obuf, inbuf или bidir определяет синтезатор(компилятор для VHDL).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.