[an error occurred while processing this directive]
Попробую помочь
(«Телесистемы»: Конференция «Программируемые логические схемы и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Shtirlits 05 ноября 2006 г. 17:35
В ответ на: Кто работал с FPSLIC (STK594), помогите, плз. отправлено <font color=gray>kybikrybik</font> 03 ноября 2006 г. 20:10

Есть тонкость: нужно следить, чтобы никакая сволочь не изменила значение регистра FISCR до записи/чтения FISUx. То есть, прерывания нужно отключать, если есть какой-нибудь код, который по прерываниям тоже работает с этими портами. А то может и битик FIADR кто-то поднимает...

Надо бы посмотреть на ваш исходный текст для FPGA-шной части.
Должно быть примерно так (точки поставил для выравнивания):
process(AVR_CLK)
begin
..if rising_edge(AVR_CLK) then
....if IOSELA(15)='1' and FIOWEA='1' then
......PORT_PINS <= ADINA; -- тут делается 8 ячеек, к каждой идет 3 провода от IOSELA(15), FIOWEA и ADINA(x), выход отправляется на ножку.
....end if;
..end if;
end process;

PORT_PINS - ваши выходные ножки.

Однако, мне больше нравится делать так, чтобы были использованы регистры, которые находятся в буферах ввода вывода, а не в драгоценных ячейках. Чтобы это сделать, нужно расположить ножки одного порта на одной из "сторон" микросхемы. На одной "стороне" может быть только один порт. Ну и еще нужно проследить за соблюдением таймингов, что в этом долбанном figaro не так-то просто и достигается ручной разводкой.
Выглядит это примерно так:

outp1_clk <= AVR_CLK and IOSELA(15) and FIOWEA; -- эдакий clock enable на одном LUT-е.
process(outp1_clk)
..begin
....if rising_edge(outp1_clk) then
......PORT_PINS <= ADINA;
....end if;
..end process;

Еще я не понял в вашем сообщении про "наблюдаю , что в FISUD значение только 4 младших байта".

На всякий случай проговорю как эта муть работает:
1) сначала вы записываете в FISCR число, которое выбирает линию ввода-вывода и следите, чтобы она не поменялась
2) затем вы пишите соответствующий FISUx, какой FISUx при каком значении FISCR даст '1' на IOSELA(x) смотреть на странице 54 даташита на FPSLIC
3) делаете схему в FPGA, которая запоминает значения, которые оказались на проводах ADINA(7 downto 0) в тот момент, когда IOSELA(x)='1', FIOWEA='1' и случился фронт по клоку от AVR-ки.
Дальше с этими запомненными значениями можно делать что хочется, на ножки их выводить или еще что.

И еще один мерзкий момент: При ресете AVR-ки на всех линиях IOSELA(x) будет '1', а на ADINA будет X"00".

Да, проверьте, что файлик .ICT у вас есть, он правильный и содержит нужные вам соединения проводов от AVR-ки с портами вашего дизайна.
А то figaro может вяло сругнуться на него и развести что попало куда попало, а вы и не заметите. Помогает вдумчивое разглядывание разведенной схемы.

Спрашивайте еще что не понятно.

Файл .ICT - едиственное для чего нужен modelsim во всей этой конструкции, его можно и руками написать, ниже файл для k05:

Part_Type = '05'
AVR_IO_Selects ('iosela(2)'='IOSELA2' 'iosela(3)'='IOSELA3' 'iosela(4)'='IOSELA4' 'iosela(5)'='IOSELA5' 'iosela(0)'='IOSELA0' 'iosela(6)'='IOSELA6' 'iosela(1)'='IOSELA1' )
AVR_Controls ('fiowea'='FIOWEA' 'fiorea'='FIOREA' )
Data_from_AVR ('adina(3)'='ADINA3' 'adina(4)'='ADINA4' 'adina(5)'='ADINA5' 'adina(0)'='ADINA0' 'adina(6)'='ADINA6' 'adina(1)'='ADINA1' 'adina(7)'='ADINA7' 'adina(2)'='ADINA2' )
Data_from_SRAM ('mdina(5)'='MDINA5' 'mdina(0)'='MDINA0' 'mdina(6)'='MDINA6' 'mdina(1)'='MDINA1' 'mdina(7)'='MDINA7' 'mdina(2)'='MDINA2' 'mdina(3)'='MDINA3' 'mdina(4)'='MDINA4' )
Data_to_AVR ('adouta(1)'='ADOUTA1' 'adouta(7)'='ADOUTA7' 'adouta(2)'='ADOUTA2' 'adouta(3)'='ADOUTA3' 'adouta(4)'='ADOUTA4' 'adouta(5)'='ADOUTA5' 'adouta(0)'='ADOUTA0' 'adouta(6)'='ADOUTA6' )
Data_to_SRAM ('mdouta(4)'='MDOUTA4' 'mdouta(5)'='MDOUTA5' 'mdouta(0)'='MDOUTA0' 'mdouta(6)'='MDOUTA6' 'mdouta(1)'='MDOUTA1' 'mdouta(7)'='MDOUTA7' 'mdouta(2)'='MDOUTA2' 'mdouta(3)'='MDOUTA3' )
FPGA_Interrupts ('inta(3)'='INTA3' 'inta(2)'='INTA2' 'inta(1)'='INTA1' 'inta(0)'='INTA0' )
SRAM_Address ('maddra(3)'='MADDRA3' 'maddra(8)'='MADDRA8' 'maddra(10)'='MADDRA10' 'maddra(15)'='MADDRA15' 'maddra(2)'='MADDRA2' 'maddra(7)'='MADDRA7' 'maddra(14)'='MADDRA14' 'maddra(1)'='MADDRA1' 'maddra(6)'='MADDRA6' 'maddra(13)'='MADDRA13' 'maddra(0)'='MADDRA0' 'maddra(5)'='MADDRA5' 'maddra(12)'='MADDRA12' 'maddra(4)'='MADDRA4' 'maddra(9)'='MADDRA9' 'maddra(11)'='MADDRA11' )
SRAM_Controls ('wea'='WEA' 'sramclk'='SRAMCLK' )
AVR_Side_Clocks ('AVR_CLK'='GCLK5' )


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание