alexPec 3 6 мая, 2010 Опубликовано 6 мая, 2010 · Жалоба Не скажет ли кто из Уважаемых, на вскидку глянув на нижеследующее все я правильно делаю или нет?? 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. Хотел картинки выложить в текст-не получилось, поэтому во вложении Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 6 мая, 2010 Опубликовано 6 мая, 2010 · Жалоба Если одно прерывание - можете урезать самостоятельно базовый обработчик до нужного вам уровня. Сохранять и восстанавливать регистры все равно надо будет скорее всего. Чтобы ускорить обработку - сделайте память двухпортовой и присоедините ее через порты itcm и dtcm. Также можно поднять тактовую частоту - 100МГц для вашего примера не предел. Посмотрите на задачу с другой стороны. Возможно, что простейшая предобработка и небольшая буферизация на порядки снизят требования к прерываниям. Найдите свой компромисс между железом и софтом :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 6 мая, 2010 Опубликовано 6 мая, 2010 · Жалоба Если одно прерывание - можете урезать самостоятельно базовый обработчик до нужного вам уровня. Сохранять и восстанавливать регистры все равно надо будет скорее всего. Чтобы ускорить обработку - сделайте память двухпортовой и присоедините ее через порты itcm и dtcm. Также можно поднять тактовую частоту - 100МГц для вашего примера не предел. Посмотрите на задачу с другой стороны. Возможно, что простейшая предобработка и небольшая буферизация на порядки снизят требования к прерываниям. Найдите свой компромисс между железом и софтом :) Спасибо vetal, ну регистры сохранять ведь не 140 тактов надо если урезать, я думаю 10-20, сколько реально это займет? А этого уже вполне достаточно. Еще вопрос по процессору описанному выше: смотрел на содержимое памяти, покопался в документации на инструкции ниоса - ерунда какая-то получается, может я что-то не так понимаю? Не подскажете ли какой-нибудь дизассемблер, наверняка в ниосе есть таковой и элементарная документация, как дизасемблировать - попробую посмотреть сам что получилось в hex - файле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 6 мая, 2010 Опубликовано 6 мая, 2010 · Жалоба По поводу дизассемблера - в папке проекта генерируется *.objdump и *.map файлы. Среда по идее сама должна обновлять файлы инициализации памяти. При наличии отладочного модуля проект(программу) можно загрузить прямо из среды разработки. Для onchip памяти с доступом через общую шину 1 такт на запись и 2 на чтение. Обработчик там по сложнее, чем вам кажется. По мимо сохранения контекста делается куча разных проверок + поиск нужного обработчика в таблице адресов прерываний(от наибольшего до наименьшего приоритета) + вызов самой функции обработчика. Возвращение из прерывания чуть быстрее происходит. Лучше не мучайтесь, а сделайте нормальный аппарат. Занимать он будет на порядок меньше чем VIC, а работать будет проще. Если надо по приходу прерывания быстро что-то куда-то скопировать - путь это сделает аппарат(там совсем просто получится), а прерывание выставит уже когда информация будет в озу. В обработчике прерывания дадите аппарату новый адрес для следующей порции информации и установите флаг готовности данных. В пользовательском режиме проанализировав флаг и обработав порцию данных освободите занятую область для следующей порции и т.д. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 7 мая, 2010 Опубликовано 7 мая, 2010 · Жалоба Лучше не мучайтесь, а сделайте нормальный аппарат. Занимать он будет на порядок меньше чем 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: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 7 мая, 2010 Опубликовано 7 мая, 2010 · Жалоба Пробовал в эклипсе делать Debug as Local c++ application - выдает ошибку: Надо выбирать Debug(или run) as NiosII Hardware. Т.к. процессор самый простой выбран - у него 6 тактов на инструкцию. Выполните моделирование на более длительном интервале(5-10мс). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StewartLittle 45 7 мая, 2010 Опубликовано 7 мая, 2010 · Жалоба Вот и вопрос: это я что-то не учел или симулятор ничего не покажет, хоть тресни - надо на реальном железе дебагером смотреть? Для симулятора нужен dat-файл (это файл для инициализации блоков памяти в симуляторе). Для создания dat-файла нужно сделать таргет mem_init_install, и сбилдить его. Файло создается в папке с софтовым проектом (обычно ..\software\<имя_проекта>\mem_init\hdl_sim). Как это делается из командной строки, я не знаю Пользуюсь гуем :laughing: И еще общий вопрос: если мне нужно в ниосе 1 прерывание, но с быстрым откликом, мне придется-таки использовать VIC и соответственно самое большое ядро (в форуме читал, что без контроллера железных прерываний время отклика 146 тактов) или на малом ядре можно сделать? Попробуйте в ниосовском ядре применить готовую пользовательскую инструкцию Interrupt Vector. Может быть, в Вашем случае этого окажется достаточно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 7 мая, 2010 Опубликовано 7 мая, 2010 · Жалоба Надо выбирать Debug(или run) as NiosII Hardware. Т.к. процессор самый простой выбран - у него 6 тактов на инструкцию. Выполните моделирование на более длительном интервале(5-10мс). Огромное спасибо, vetal!!! Как я сам-то не допер? Все работает!!! :08: Железо (eval EP3C25) у меня на подходе, щас просто пытаюсь понять принцип построения систем на ниосе и написание программ. Понимание приходит, будем копать глубже... А Debug as NiosII Hardware появляется только когда железо есть? У меня в списке только local C++ application. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 7 мая, 2010 Опубликовано 7 мая, 2010 · Жалоба Попробуйте в ниосовском ядре применить готовую пользовательскую инструкцию Interrupt Vector. Может быть, в Вашем случае этого окажется достаточно. Да, да, где-то видел такое, когда пдф-ы читал, посмотрю повнимательне. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться