effort 0 16 июня, 2019 Опубликовано 16 июня, 2019 · Жалоба Помогите, пожалуйста, разобраться с добавление своего компонента в Qsys. Конкретно интересует файл _regs.h, в котором задаются регистры компонента. С одной 32-разрядной шины компонента выводится 5-ть однобитных выходов (подключаются к шилду ethernet). Как правильно распределить оффсеты для управления ими в Nios ii software с помощью IOWR и IORD? По сути интересует как сделать правильную адресацию для своего компонента (в мануалах описаны только альтеровские готовые компоненты с уже заданными регистрами)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darky777 0 19 июня, 2019 Опубликовано 19 июня, 2019 · Жалоба IORD_32DIRECT(base, offset) IOWR_32DIRECT(base, offset, data) offset задаете побайтно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
effort 0 20 июня, 2019 Опубликовано 20 июня, 2019 · Жалоба 16 часов назад, Darky777 сказал: IORD_32DIRECT(base, offset) IOWR_32DIRECT(base, offset, data) offset задаете побайтно. Спасибо! Со своими пинами разобрался. Понял что они вызываются по адресу, заданному внутри компонента. Теперь пытаюсь понять как из Eclipse (Nios ii software) управляются выводы посаженные на шину Avalon-MM (как например, взвести chipselect?). Подскажете по этому вопросу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darky777 0 21 июня, 2019 Опубликовано 21 июня, 2019 (изменено) · Жалоба On 6/20/2019 at 8:37 AM, effort said: Спасибо! Со своими пинами разобрался. Понял что они вызываются по адресу, заданному внутри компонента. Теперь пытаюсь понять как из Eclipse (Nios ii software) управляются выводы посаженные на шину Avalon-MM (как например, взвести chipselect?). Подскажете по этому вопросу? С точки зрения ниоса эти сигналы не управлются вами, этим сигналом как и read, write, byteenable управляет шинный арбитр/контроллер шины (он генерируется Qsys, Sopcbuilder,Platform designer ) , в зависимости от того, в какое окно адреса вы попадете, например, если модуль gpio располжен на шине с адреса 0xF000 и заканчивает 0xF00F то если вы обращаетесь например по адресу 0xF004 , шинный арбитр за вас отправит ему все контрольные сигналы. если обратитесь по другому адресу, то арбитр отправит чипселекты и прочие другим модулям. Изменено 21 июня, 2019 пользователем Darky777 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Александр77 1 22 июня, 2019 Опубликовано 22 июня, 2019 · Жалоба Спрошу тут, даб не плодить схожих тем. Есть потребность в памяти констант, создал OnChipROM. А как его прочитать поэлементно? Или сделать "дубово" через внешнюю, по отношению ниоса, ПЗУ и читать iord? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
effort 0 23 июня, 2019 Опубликовано 23 июня, 2019 · Жалоба В 21.06.2019 в 20:48, Darky777 сказал: С точки зрения ниоса эти сигналы не управлются вами, этим сигналом как и read, write, byteenable управляет шинный арбитр/контроллер шины (он генерируется Qsys, Sopcbuilder,Platform designer ) , в зависимости от того, в какое окно адреса вы попадете, например, если модуль gpio располжен на шине с адреса 0xF000 и заканчивает 0xF00F то если вы обращаетесь например по адресу 0xF004 , шинный арбитр за вас отправит ему все контрольные сигналы. если обратитесь по другому адресу, то арбитр отправит чипселекты и прочие другим модулям. Большое спасибо, стало понятно! Еще прочитал важную для понимания вещь, о том что обращение по адресу генерируется для всех подчиненных устройств и те устройства для которых этот адрес не предназначен его просто игнорируют. Еще момент, как правильно описать тестовую модель (modelsim) для пользовательского компонента? В Platform Designer, при генерации выдает такую ошибку: Error: name_custom_module_0: name_custom_module does not support generation for Verilog Simulation. Generation is available for: Quartus Synthesis. Как я понимаю, необходимо в ручную написать тестовый модуль? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darky777 0 24 июня, 2019 Опубликовано 24 июня, 2019 · Жалоба On 6/23/2019 at 7:49 AM, effort said: Большое спасибо, стало понятно! Еще прочитал важную для понимания вещь, о том что обращение по адресу генерируется для всех подчиненных устройств и те устройства для которых этот адрес не предназначен его просто игнорируют. Еще момент, как правильно описать тестовую модель (modelsim) для пользовательского компонента? В Platform Designer, при генерации выдает такую ошибку: Error: name_custom_module_0: name_custom_module does not support generation for Verilog Simulation. Generation is available for: Quartus Synthesis. Как я понимаю, необходимо в ручную написать тестовый модуль? Я пишу ручками.. А такими инструментами не пользовался. Речь идет об использвании этого документа? Как-то раз я воспользовался им ради интереса, собрал тестовый проект. Оказался довольно полезным, однако приходилось ручками некоторые исходники подправлять, что было крайне неприятно.. https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_avalon_verification_ip.pdf On 6/22/2019 at 10:30 PM, Александр77 said: Спрошу тут, даб не плодить схожих тем. Есть потребность в памяти констант, создал OnChipROM. А как его прочитать поэлементно? Или сделать "дубово" через внешнюю, по отношению ниоса, ПЗУ и читать iord? Когда-то давно один умный и матерый программист сказал мне, что для чтения и записи у ниоса рекомендуется использовать ТОЛЬКО IOWR и IORD. На чем это основано - без понятия.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
effort 0 26 июня, 2019 Опубликовано 26 июня, 2019 · Жалоба В 24.06.2019 в 22:02, Darky777 сказал: Я пишу ручками.. А такими инструментами не пользовался. Речь идет об использвании этого документа? Как-то раз я воспользовался им ради интереса, собрал тестовый проект. Оказался довольно полезным, однако приходилось ручками некоторые исходники подправлять, что было крайне неприятно.. https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_avalon_verification_ip.pdf Когда-то давно один умный и матерый программист сказал мне, что для чтения и записи у ниоса рекомендуется использовать ТОЛЬКО IOWR и IORD. На чем это основано - без понятия.. Хорошо, как написать testbench для компонента понятно, а как в ручную описать полную тестовую модель для системы с Nios II? Какие файлы проекта должна содержать тестируемая модель? Какие альтеровские библиотеки необходимо подключить для корректной симуляции? Может сбросите мне тестовый модуль системы с Nios для примера? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darky777 0 27 июня, 2019 Опубликовано 27 июня, 2019 · Жалоба Я бы с радостью скинул будь еслиб он у меня был... Никогда не приходилось писать тестбенч целостного проекта с работающим на нем nios, да и нужно ли это делать? Мастером может быть кто угодно, в тестбенче это Avalon-MM BFM (bus functional model) cсылку я давал. С помощью него вы можете составить сценарий работы с вашим модулем вместе с остальными. Пример проекта там, кстати, есть. К тому же интуиция мне подсказывает, что запуск симуляции с ниосом будет проблематичнее, и сама процесс симуляции будет долгим. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
effort 0 28 июня, 2019 Опубликовано 28 июня, 2019 · Жалоба 18 часов назад, Darky777 сказал: Я бы с радостью скинул будь еслиб он у меня был... Никогда не приходилось писать тестбенч целостного проекта с работающим на нем nios, да и нужно ли это делать? Мастером может быть кто угодно, в тестбенче это Avalon-MM BFM (bus functional model) cсылку я давал. С помощью него вы можете составить сценарий работы с вашим модулем вместе с остальными. Пример проекта там, кстати, есть. К тому же интуиция мне подсказывает, что запуск симуляции с ниосом будет проблематичнее, и сама процесс симуляции будет долгим. Спасибо за правильные мысли, общий смысл понятен, буду работать в этом направлении! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
effort 0 4 июля, 2019 Опубликовано 4 июля, 2019 (изменено) · Жалоба В общем, немного научился отлаживаться. Отдельно просимулировал в modelsim файлы компонента Platform Designer (QSys), добавил нужные сигналы в SignalTap собрал весь проект и прошил. В Eclipse прошиваю файл elf и запускаю отладку. В SignalTap ставил триггер на разные сигналы и выяснил, что Avalon-MM не взводит chipselect на чтение, но взводит на запись. В Eclipse задаю смещение относительно базового адреса как на рисунке 1. Обращаюсь как на рисунке 2. В SignalTap при установленном на cs триггере получаю рисунок 3. На чтение вообще не реагирует. На всякий случай прикреплю код верхнего уровня компонента Platform Designer (w5500.v). Подскажите в чем может быть дело и куда копать? Изменено 5 июля, 2019 пользователем effort Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darky777 0 5 июля, 2019 Опубликовано 5 июля, 2019 · Жалоба always @(*) begin if (reset_n == 0) readdata <= 0; else if (chipselect && clk_en && (address[2:0] == 3'd2)) readdata <= {24'd0 | SPI_TO_NIOS[7:0]}; else if (chipselect && clk_en && (address[2:0] == 3'd3)) readdata <= {31'd0 | SPI_FINISH}; else readdata <= 0; end у вас и * в списке чувствительности у always и неблокирующее присваивание! Так какую логику работу вы закладывали, на последовательную или комбинационную? Судя по диаграмме которую вы представили синтезатор сделал комбинационную. Что это значит в вашем случае? Означает что данные на readdata выставится в тот же такт, что и chipselect, то есть с задержкой равной 0 тактов. кстати говоря, почему вы утверждаете что на чтение он не реагирует, вот же, я его отчетливо вижу, прямо перед записью). Есть такой параметр в шине авалон-мм называемый readLatency. почитайте про него. При создании кастомной корки вы его сами задаете. Задавать его следует в соответствии в вашими характеристиками модуля, тогда PlatformDesigner учтет ваши пожелания. Успехов! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
effort 0 6 июля, 2019 Опубликовано 6 июля, 2019 · Жалоба В 05.07.2019 в 15:23, Darky777 сказал: always @(*) begin if (reset_n == 0) readdata <= 0; else if (chipselect && clk_en && (address[2:0] == 3'd2)) readdata <= {24'd0 | SPI_TO_NIOS[7:0]}; else if (chipselect && clk_en && (address[2:0] == 3'd3)) readdata <= {31'd0 | SPI_FINISH}; else readdata <= 0; end у вас и * в списке чувствительности у always и неблокирующее присваивание! Так какую логику работу вы закладывали, на последовательную или комбинационную? Судя по диаграмме которую вы представили синтезатор сделал комбинационную. Что это значит в вашем случае? Означает что данные на readdata выставится в тот же такт, что и chipselect, то есть с задержкой равной 0 тактов. кстати говоря, почему вы утверждаете что на чтение он не реагирует, вот же, я его отчетливо вижу, прямо перед записью). Есть такой параметр в шине авалон-мм называемый readLatency. почитайте про него. При создании кастомной корки вы его сами задаете. Задавать его следует в соответствии в вашими характеристиками модуля, тогда PlatformDesigner учтет ваши пожелания. Успехов! Логику реализовывал комбинационную, * для расширения списка чувствительности, чтобы отследить все сигналы в signaltap связанные с readdata. Тот chipselect, который на диаграмме появляется при адресе равном 3 (idle), а не 2 (read). За readLatency спасибо, попробую, реализовать с помощью него задержку чтения данных, но не понятно почему импульс не появляется без задержки и какую смысловую нагрузку она здесь несет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darky777 0 8 июля, 2019 Опубликовано 8 июля, 2019 · Жалоба On 7/6/2019 at 8:16 PM, effort said: Логику реализовывал комбинационную, * для расширения списка чувствительности, чтобы отследить все сигналы в signaltap связанные с readdata Для комбинационной логике при присваивании в always используется блокирующее присваивание (=). Для последовательной логики используется неблокирующее присваивание (<=). On 7/6/2019 at 8:16 PM, effort said: За readLatency спасибо, попробую, реализовать с помощью него задержку чтения Задержку вы можете сделать какую захотите. Главное сообщить об этом при создании кастомной корки, чтобы PlatformDesigner реализовал контролер с этой задержкой Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться