Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибка чтения по шине Avalon
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Shevnnov
Есть рабочий проект (вернее был). В нем есть свой компонентс примитивным DMA, который по заданному адресу по команде читает из памяти sdram. До сегодняшнего дня всё работало, всё читалось. Но возникла проблема - в ходе работы компонента используется прерывание. А так как компонент, обрабатывает пакеты, приходящие из вне, то время задержки при обработке прерывания (т.н. latency) оказалось слишком большое (что-то порядка 11us, против желаемых 0,9us). Решил использовать векторный контроллер прерываний (VIC). Как я понял внешие прерывания обрабатываются только Nios II/f.
До этого проект в проекте использовался Nios II/s. Поменял процессор, выставли Interrupt Controller - External. Поправил IRQ у компонентов системы. Остальное всё оставил старое. И запустил на Model Sim. Получил картинку, приведенную ниже. Данные tx_data_readdata =32'hxxxxxxx.
Плохой результат было списал на то, что неправильно преывание внешнее обрабатываю (инициализация и ф-ия обработки осталась та же, что и была для Innternal IC). Во вкладке Nios II -> Advanced Features Поставил Interrupt Controller = Internal. Эффекта ноль. Временные диаграммы симуляции точно такие же.
Вопрос? В чем проблема?
Кода возвращаю назад Nios II/s то данные tx_data_readdata читаются.

И еще вопрос. Нужно ли переделывать инициализацию прерывания и обработчик прерывания компонента при замене IIC на EIC (внутреннего на внешний контроллер)? Если надо то как?
vadimuzzz
Цитата(Shevnnov @ Jan 19 2011, 04:29) *
И еще вопрос. Нужно ли переделывать инициализацию прерывания и обработчик прерывания компонента при замене IIC на EIC (внутреннего на внешний контроллер)? Если надо то как?

это зависит от того какой API вы использовали. если legacy - то да, он поддерживает только IIC.
Shevnnov
Цитата(vadimuzzz @ Jan 19 2011, 04:46) *
это зависит от того какой API вы использовали. если legacy - то да, он поддерживает только IIC.


Нет, использовал Enhanced API.

Вопрос с чтение с щины Avalon остается открытым. В чем проблема?
vadimuzzz
Цитата(Shevnnov @ Jan 19 2011, 13:32) *
Вопрос с чтение с щины Avalon остается открытым. В чем проблема?

из той картинки, что вы привели, выводы делать проблемно. надо идти по цепочке, начиная с tx_data_readdata

нашел у себя пример с VIC и таймером, может пригодится:
CODE

#include <stdio.h>
#include "system.h"
#include <sys/alt_irq.h>
#include "altera_avalon_timer_regs.h"

void timer_interrupt_latency_irq()
{
IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_0_BASE,0);
alt_ic_irq_disable(TIMER_0_IRQ_INTERRUPT_CONTROLLER_ID, TIMER_0_IRQ);
printf("Hello from timer!\n");
alt_ic_irq_enable(TIMER_0_IRQ_INTERRUPT_CONTROLLER_ID, TIMER_0_IRQ);
}

int main()
{
IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE,0);
printf("Hello from Nios II!\n");
/* Register the interrupt */
alt_ic_isr_register(TIMER_0_IRQ_INTERRUPT_CONTROLLER_ID, TIMER_0_IRQ, timer_interrupt_latency_irq, TIMER_0_BASE, NULL);
/* Start timer */
IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_0_BASE,1000);
IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE, ALTERA_AVALON_TIMER_CONTROL_ITO_MSK
| ALTERA_AVALON_TIMER_CONTROL_CONT_MSK
| ALTERA_AVALON_TIMER_CONTROL_START_MSK);
while (1);//Event Loop
return 0;
}
Shevnnov
Суть в том, что был проект - в котором работало всё (и работает, если поставить Nios II/s) и запустить на симуляторе. Но если в нём заменяю на проц Nios II/f пересобираю систему, перегенерирую BSP - то получаю такую картину.
vadimuzzz
Цитата(Shevnnov @ Jan 19 2011, 16:19) *
Суть в том, что был проект - в котором работало всё (и работает, если поставить Nios II/s) и запустить на симуляторе. Но если в нём заменяю на проц Nios II/f пересобираю систему, перегенерирую BSP - то получаю такую картину.

по таймингам эти процессоры сильно разные. грубо, на порядок. причина может быть в этом. у вас же все инструменты под рукой, пройдитесь моделсимом, откуда эти иксы взялись
Shevnnov
Вопрос с Иксами решился. В Nios II/f есть кеширование данных. Отключил его - всё стало нормально, данные считываются как надо, без иксов. Буду разбираться с VIC
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.