Перейти к содержанию
    

NIOS 2 - будет ли так работать

Не скажет ли кто из Уважаемых, на вскидку глянув на нижеследующее все я правильно делаю или нет??

 

1.Создаю SOPC в сопц-билдере (картинка 0), проц самый простой, без jtag вообще, он-чип рам разрядность 32, длина 8192 байт

2.Генерю сопц - ошибок нет

2.Создаю проект в Квартусе (картинка 1)

3.Компилирую - ошибок нет

4.В ниос создаю проект простейший (картинка 4), который в PIO_0 бесконечно по циклу пишет 0х55,0хАА

5.Компилирую - ошибок нет, получаю elf

6.В ком.строке ниос терминала набираю elf2hex --input=ns.elf --width=32 --base=0 --end=8192 ; получаю hex

7.Открываю файл onchip_memory2_0.hex (его сгенерил сопц), записываю туда байты из полученного hexа на шаге 5 (картинка 2)

8.Компилирую в кавртусе прект - ошибок нет

9.Создаю файл для симуляции результата, ожидаю на выходе PIO_0 0x55,0xaa,0x550xaa,...., получаю - 0 (картинка 3), пробовал инвертировать ресет - результат тот же.

 

Вот и вопрос: это я что-то не учел или симулятор ничего не покажет, хоть тресни - надо на реальном железе дебагером смотреть?

 

И еще общий вопрос: если мне нужно в ниосе 1 прерывание, но с быстрым откликом, мне придется-таки использовать VIC и соответственно самое большое ядро (в форуме читал, что без контроллера железных прерываний время отклика 146 тактов) или на малом ядре можно сделать?

 

PS. Хотел картинки выложить в текст-не получилось, поэтому во вложении

post-15968-1273156807_thumb.jpg

post-15968-1273156828_thumb.jpg

post-15968-1273156842_thumb.jpg

post-15968-1273156857_thumb.jpg

post-15968-1273156938_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если одно прерывание - можете урезать самостоятельно базовый обработчик до нужного вам уровня. Сохранять и восстанавливать регистры все равно надо будет скорее всего.

Чтобы ускорить обработку - сделайте память двухпортовой и присоедините ее через порты itcm и dtcm. Также можно поднять тактовую частоту - 100МГц для вашего примера не предел.

 

Посмотрите на задачу с другой стороны. Возможно, что простейшая предобработка и небольшая буферизация на порядки снизят требования к прерываниям. Найдите свой компромисс между железом и софтом :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если одно прерывание - можете урезать самостоятельно базовый обработчик до нужного вам уровня. Сохранять и восстанавливать регистры все равно надо будет скорее всего.

Чтобы ускорить обработку - сделайте память двухпортовой и присоедините ее через порты itcm и dtcm. Также можно поднять тактовую частоту - 100МГц для вашего примера не предел.

 

Посмотрите на задачу с другой стороны. Возможно, что простейшая предобработка и небольшая буферизация на порядки снизят требования к прерываниям. Найдите свой компромисс между железом и софтом :)

 

Спасибо vetal, ну регистры сохранять ведь не 140 тактов надо если урезать, я думаю 10-20, сколько реально это займет? А этого уже вполне достаточно.

Еще вопрос по процессору описанному выше: смотрел на содержимое памяти, покопался в документации на инструкции ниоса - ерунда какая-то получается, может я что-то не так понимаю? Не подскажете ли какой-нибудь дизассемблер, наверняка в ниосе есть таковой и элементарная документация, как дизасемблировать - попробую посмотреть сам что получилось в hex - файле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По поводу дизассемблера - в папке проекта генерируется *.objdump и *.map файлы. Среда по идее сама должна обновлять файлы инициализации памяти. При наличии отладочного модуля проект(программу) можно загрузить прямо из среды разработки.

Для onchip памяти с доступом через общую шину 1 такт на запись и 2 на чтение.

 

Обработчик там по сложнее, чем вам кажется. По мимо сохранения контекста делается куча разных проверок + поиск нужного обработчика в таблице адресов прерываний(от наибольшего до наименьшего приоритета) + вызов самой функции обработчика. Возвращение из прерывания чуть быстрее происходит.

 

Лучше не мучайтесь, а сделайте нормальный аппарат. Занимать он будет на порядок меньше чем VIC, а работать будет проще.

Если надо по приходу прерывания быстро что-то куда-то скопировать - путь это сделает аппарат(там совсем просто получится), а прерывание выставит уже когда информация будет в озу. В обработчике прерывания дадите аппарату новый адрес для следующей порции информации и установите флаг готовности данных. В пользовательском режиме проанализировав флаг и обработав порцию данных освободите занятую область для следующей порции и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Лучше не мучайтесь, а сделайте нормальный аппарат. Занимать он будет на порядок меньше чем VIC, а работать будет проще.

 

Да, дествительно, проще аппаратно по сигналу копировать данные в буфер, а уж после, не спеша их обработать.

 

По поводу дизассемблера - в папке проекта генерируется *.objdump и *.map файлы. Среда по идее сама должна обновлять файлы инициализации памяти. При наличии отладочного модуля проект(программу) можно загрузить прямо из среды разработки.

 

Посмотрел objdump, нашел это место, где в порт записывается число 0x55 и 0xaa:

int main()
{
  58:    00880004     movi    r2,8192
  5c:    01001544     movi    r4,85
  60:    00c02a84     movi    r3,170
  while (1)
  {
  IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE,0x55);
  64:    11000035     stwio    r4,0(r2)
  IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE,0xaa);
  68:    10c00035     stwio    r3,0(r2)
  6c:    003ffd06     br    64 <main+0xc>

 

посмотрел hex-файл, который я ставлю на ниос-память - там тоже есть

 

Пробовал в эклипсе делать Debug as Local c++ application - выдает ошибку:

Error creating session

Can not run program "gdb". Launching failed

 

Че делать - не знаю :wassat:

post-15968-1273213080_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробовал в эклипсе делать Debug as Local c++ application - выдает ошибку:

Надо выбирать Debug(или run) as NiosII Hardware.

 

Т.к. процессор самый простой выбран - у него 6 тактов на инструкцию. Выполните моделирование на более длительном интервале(5-10мс).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот и вопрос: это я что-то не учел или симулятор ничего не покажет, хоть тресни - надо на реальном железе дебагером смотреть?

Для симулятора нужен dat-файл (это файл для инициализации блоков памяти в симуляторе). Для создания dat-файла нужно сделать таргет mem_init_install, и сбилдить его. Файло создается в папке с софтовым проектом (обычно ..\software\<имя_проекта>\mem_init\hdl_sim).

Как это делается из командной строки, я не знаю :blush:

Пользуюсь гуем :laughing:

 

И еще общий вопрос: если мне нужно в ниосе 1 прерывание, но с быстрым откликом, мне придется-таки использовать VIC и соответственно самое большое ядро (в форуме читал, что без контроллера железных прерываний время отклика 146 тактов) или на малом ядре можно сделать?

Попробуйте в ниосовском ядре применить готовую пользовательскую инструкцию Interrupt Vector. Может быть, в Вашем случае этого окажется достаточно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо выбирать Debug(или run) as NiosII Hardware.

 

Т.к. процессор самый простой выбран - у него 6 тактов на инструкцию. Выполните моделирование на более длительном интервале(5-10мс).

 

Огромное спасибо, vetal!!! Как я сам-то не допер? Все работает!!! :08: Железо (eval EP3C25) у меня на подходе, щас просто пытаюсь понять принцип построения систем на ниосе и написание программ. Понимание приходит, будем копать глубже...

А Debug as NiosII Hardware появляется только когда железо есть? У меня в списке только local C++ application.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте в ниосовском ядре применить готовую пользовательскую инструкцию Interrupt Vector. Может быть, в Вашем случае этого окажется достаточно.

 

Да, да, где-то видел такое, когда пдф-ы читал, посмотрю повнимательне. Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...