Димон Безпарольный 0 March 2 Posted March 2 (edited) · Report post Создал сконвертировал elf - > hex При создании JIC файла прошивки из файла SOF указал также и HEX файл. При записи конфигурации с HEX файлом конфигурация не запускается. NIOS не виден даже программатором из Эклипс. Без файла HEX (при создании JIC) все чинно стартует и прошивка NIOS II загружается. Что я делаю не так? Просто надоело каждый раз грузить прошивку при сбросе питания. Edited March 2 by Димон Безпарольный Quote Share this post Link to post Share on other sites More sharing options...
Raven 21 March 3 Posted March 3 · Report post А вы точно все сделали как надо? Например, как это описано здесь: Terasic DE3 Board User Manual (см. вложение), Appendix C, Programming the Serial Configuration Device DE3_User manual_v1.2.3.pdf Quote Share this post Link to post Share on other sites More sharing options...
Димон Безпарольный 0 March 3 Posted March 3 · Report post 4 hours ago, Raven said: А вы точно все сделали как надо? Например, как это описано здесь: Да, именно по этой инструкции я и делал. Инструкция эта говорит как зашить конфигурационную часть намертво - во флэш. Это прекрасно работает. Но в инструкции не сказано как вставить программную часть для NIOS в этот же флэш. И такой инструкции я пока не нашел. Делал чисто интуитивно. Надо hex - сконвертировал из elf. При конвертации sof -> jic можно было его подсунуть. Подсунул - не работает. Не запускается вообще. Может я и неправильно делаю. Quote Share this post Link to post Share on other sites More sharing options...
StewartLittle 51 March 3 Posted March 3 · Report post Для того, чтобы обеспечить возможность загрузки исполняемого кода Nios'а из конфигурационного флэша, в ниосовской системе должен присутствовать компонент epcq_controller2. Причем вектор сброса должен указывать на этот контролер (а вектор исключения - та ту память, куда этот исполняемый код должен быть скопирован). Кроме того, в bsp нужно сделать соответствующие настройки (запретить исполнение пользовательского кода с адреса сброса). Мои примеры различных вариантов хранения и исполнения кода Вы можете скачать вот отсюда: https://cloud.mail.ru/public/JCXX/CKsCusF9H Там три варианта - исполняемый код хранится в On-Chip RAM (Ocr), исполняемый код хранится в конфигурационном ПЗУ и по старту загружается в On-Chip RAM (Lfcfg) и исполняемый код хранится в конфигурационном ПЗУ и исполняется из конфигурационного ПЗУ. Quote Share this post Link to post Share on other sites More sharing options...
Raven 21 March 3 Posted March 3 · Report post 1 hour ago, StewartLittle said: Там три варианта - исполняемый код хранится в On-Chip RAM (Ocr), исполняемый код хранится в конфигурационном ПЗУ и по старту загружается в On-Chip RAM (Lfcfg) и исполняемый код хранится в конфигурационном ПЗУ и исполняется из конфигурационного ПЗУ. У ТС, если это не успело измениться, как раз случай старта из On-Chip RAM (Reset vector же у вас туда указывает, верно? или нет?). Он не пытается испольнять код из EPCQ ни напрямую, ни после его копирования в SRAM. Проблема состоит в том, что нужно обеспечить, чтобы инициализация этой SRAM кодом загрузчика правильно зашла в конфигурационные данные FPGA. С чем у ТС, видимо, какие-то проблемы, хотя утверждает, что все делает по правильной процедуре. 2 hours ago, Димон Безпарольный said: Да, именно по этой инструкции я и делал. Инструкция эта говорит как зашить конфигурационную часть намертво - во флэш. Это прекрасно работает. Но в инструкции не сказано как вставить программную часть для NIOS в этот же флэш. И такой инструкции я пока не нашел. Делал чисто интуитивно. Надо hex - сконвертировал из elf. При конвертации sof -> jic можно было его подсунуть. Подсунул - не работает. Не запускается вообще. Может я и неправильно делаю. А у вас инициализация On-Chip RAM вообще делается где-нибудь и когда-нибудь в процессе? Если нет, то откуда в SOF-файле возьмутся коды исполняемой программы? Вы код для NiOS загружаете только в процессе отладки из Eclipse? Quote Share this post Link to post Share on other sites More sharing options...
StewartLittle 51 March 3 Posted March 3 · Report post В 03.03.2025 в 12:04, Raven сказал: У ТС, если это не успело измениться, как раз случай старта из On-Chip RAM Тогда это первый пример (Ocr). При этом отдельно hex-файл прописывать в конфигуратор не нужно, т.к. содержимое On-Chip RAM удже встроено в битстрим. Достаточно убедиться, что в настройках On-Chip RAM установлена галка Initialize memory content, что полученный hex-файл совпадает по имени с ожидаемым, ну и не забыть и перегенерировать систему в платформ дизайнере после того, как сделали hex-файл :) Quote Share this post Link to post Share on other sites More sharing options...
Raven 21 March 3 Posted March 3 · Report post 28 minutes ago, StewartLittle said: Тогда это первый пример (Ocr). При этом отдельно hex-файл прописывать в конфигуратор не нужно, т.к. содержимое On-Chip RAM удже встроено в битстрим. Достаточно убедиться, что в настройках On-Chip RAM установлена галка Initialize memory content, что полученный hex-файл совпадает по имени с ожидаемым, ну и не забыть и перегенерировать систему в платформ дизайнере после того, как сделали hex-файл :) Да. Но есть подозрение, что ТС эту инициализацию пока не делал. Ждем подтверждения от него. Quote Share this post Link to post Share on other sites More sharing options...
Serhiy_UA 1 March 3 Posted March 3 · Report post Очень давно работая с NiosII оставлял себе заметки по поднятому ТС вопросу (было это в 2010 и 2013). Посмотрите, может это чем-то поможет. hex.zip Nios.zip Quote Share this post Link to post Share on other sites More sharing options...
Raven 21 March 3 Posted March 3 · Report post 22 minutes ago, Serhiy_UA said: Очень давно работая с NiosII оставлял себе заметки по поднятому ТС вопросу (). Посмотрите, может это чем-то поможет. В целом хороший HowTo, но есть некоторые недочеты: Пункт 2 "Открыть требуемый hex-файл через File -> Open. Появится окно с запросом о ширине слова Word Size. Задать его равным 8 (важно задать именно 8)." не соответствует ширине On-Chip RAM (32 бита) - см. Приложение. Будет warning, и даже все сработает как надо благодаря кратности (8=2*4), но осадочек останется. Оно нам надо? Ведь можно сделать все, "как в лучших домах Бостона": Либо выбрать ширину =4 (как оно есть в действительности) в Memory Editor Либо прописать ширину =4 в свойствах BSP вашей платформы/проекта ("elf2hex_extra_args = $(mem_no_zero_fill_flag) --record=4") - подробности описаны здесь: Ваш первый проект на Nios II Quote Share this post Link to post Share on other sites More sharing options...
Димон Безпарольный 0 March 3 Posted March 3 (edited) · Report post 7 hours ago, Raven said: Да. Но есть подозрение, что ТС эту инициализацию пока не делал. Ждем подтверждения от него. И правда не делал. 8 hours ago, Raven said: как раз случай старта из On-Chip RAM (Reset vector же у вас туда указывает, верно? или нет?). Нет. В Onchip код не исполняется. Он исполняется из SDRam расположенной с нулевого адреса. Reset вектор 0x0. Исключения 0x20. 8 hours ago, Raven said: Проблема состоит в том, что нужно обеспечить, чтобы инициализация этой SRAM кодом загрузчика правильно зашла в конфигурационные данные FPGA. Кажется так. Только это SDRAM. 8 hours ago, Raven said: С чем у ТС, видимо, какие-то проблемы, хотя утверждает, что все делает по правильной процедуре. Нет. Ее то как раз я и не знаю. Т.е. сейчас я прошил JIC в конфигурационную ПЗУ. И он прекрасно стартует потому что на то есть животворящая инструкция. А вот как вместе с этим JIC туда запихнуть еще и прошивку NIOS которая загрузится в SDRAM по адресу 0 инструкции нет. Ну и я видимо по интуиции делаю неправильно. 7 hours ago, StewartLittle said: При этом отдельно hex-файл прописывать в конфигуратор не нужно, т.к. содержимое On-Chip RAM удже встроено в битстрим. Круто. Теперь я по крайней мере понял как загнать прошивку в Onchip. Но она туда не помещается. Edited March 3 by Димон Безпарольный Quote Share this post Link to post Share on other sites More sharing options...
StewartLittle 51 March 3 Posted March 3 · Report post В 03.03.2025 в 20:06, Димон Безпарольный сказал: Нет. В Onchip код не исполняется. Он исполняется из SDRam расположенной с нулевого адреса. Reset вектор 0x0. Исключения 0x20. Смотрите мой второй пример (Lfcfg). Разница только в том, что у Вас вектор исключения должен указывать на SDRAM. И про галку в bsp не забудьте. Quote Share this post Link to post Share on other sites More sharing options...
Raven 21 March 4 Posted March 4 · Report post 16 hours ago, Димон Безпарольный said: Нет. В Onchip код не исполняется. Он исполняется из SDRam расположенной с нулевого адреса. Reset вектор 0x0. Исключения 0x20. 16 hours ago, Димон Безпарольный said: Кажется так. Только это SDRAM. 16 hours ago, Димон Безпарольный said: Нет. Ее то как раз я и не знаю. Т.е. сейчас я прошил JIC в конфигурационную ПЗУ. И он прекрасно стартует потому что на то есть животворящая инструкция. А вот как вместе с этим JIC туда запихнуть еще и прошивку NIOS которая загрузится в SDRAM по адресу 0 инструкции нет. Ну и я видимо по интуиции делаю неправильно. Теперь ситуация стала яснее. Но на всякий случай поясню. Если код исполняется из SDRAM, то непосредственно из конфигурационных данных FPGA он туда попасть не может (в отличие от варианта с On-Chip RAM, где эта RAM - это часть FPGA, и потому может быть проинициализирована как часть процесса конфигурирования FPGA). Но его туда [в SDRAM] может поместить загрузчик, после чего передать управление этому коду. Это почти соответствует варианту Lfcfg от @StewartLittle, о чем он уже и говорил; разница только в том, что у него загрузчик копирует код из EPCQ в On-Chip RAM, а вам надо, чтобы он копировал его в SDRAM. Действует примерно так: Reset vector установлен на epcq_controller (в нем есть небольшой блок SRAM, в который зашит программа-загрузчик); После выхода из ресета управление получает программа-загрузчик (внутри EPCQ-контроллера), инициализирует CPU, копирует указанный объем кода из указанных адресов EPCQ в указанные адреса системы (вам надо, чтобы копировал в SDRAM @0x0); Программа-загрузчик передает управление по указанному адресу в скопированный код; Voila! Your code finally works from SDRAM! Обратите внимание на поправки, указанные @StewartLittle ! Ну, и внимательно изучите пример и его настройки. Quote Share this post Link to post Share on other sites More sharing options...
StewartLittle 51 March 4 Posted March 4 · Report post Ну а вообще ТС'у следовало бы воспользоваться поиском по форуму - этот вопрос здесь уже обсасывался и переобсасывался неоднократно. Вот там смотрите вложение к сообщению: https://electronix.ru/forum/topic/156362-quartus-191-pod-windows-u-kogo-nibud-normalno-rabotaet/?do=findComment&comment=1710231 Quote Share this post Link to post Share on other sites More sharing options...
Димон Безпарольный 0 March 6 Posted March 6 · Report post On 3/4/2025 at 5:11 PM, StewartLittle said: Вот там смотрите вложение к сообщению Спасибо за подробную мнструкцию. Quote Share this post Link to post Share on other sites More sharing options...
Димон Безпарольный 0 March 6 Posted March 6 (edited) · Report post Пока пробовал самый простой вариант. SOF + ELF. Решил попробовать Flash Programmer из Eclipse. Создал проект работающий в onchp. Делал по инструкции, но дальше такого вида Flash Programmer'а не пошло. Что я сделал не так? Кварус 13. Edited March 6 by Димон Безпарольный Quote Share this post Link to post Share on other sites More sharing options...