Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Моделирование NiosII в ModelSim
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
lostbegan
Проблема такая. Есть задача - выполнить элементарные действия на NiosII, получить диаграммы путем моделирования, как итог (проверка) работы. Платы нет, и скорее всего не будет. Перечислю инструменты:
1. Quartus Prime 16.1 Lite Edition
2. ModelSim - Intel FPGA 10.5b (Quartus Prime 16.1)
Опишу сначала что есть:
Создаю проект в QP16.1 семейства Cyclone IVE устройство пока "Auto selected by the fitter". Так же при создании проекта во вкладке EDA tools settings выбираю Simulation - ModelSim-Altera - VHDL.

Дальше собираю в Qsys:
NiosII (classic) processor самый простой с дебаггером 1ур.
память On-chip Memory (Ramrom) с размером 65536b. (на всякий случай)
pio output
pio input оба на 8 бит.
при генерации ставлю галки Create HDL - VHDL, создаю .bsf и создаю simulation model - VHDL. Так же создаю тут в qsys тестбенч на vhdl. Прикреплю скрин.

Опять в QP16.1:
Создаю .bdf и собираю там вышесозданный .bsf с входами и выходами. Прикрепляю к проекту файл *.qip, ставлю .bdf на top-level и компиллирую, ошибок нет. Еще скрин прикреплен

Eclipse:
Создаю NiosII Application and BSP from template, прикрепляю .sopcinfo и создаю blank_project.
Добавляю сишник с кодом
CODE
#include "altera_avalon_pio_regs.h"
#define PIO_IN_BASE 0x1000
#define PIO_OUT_BASE 0x1010 //Скопировал адреса с system.h

int main()
{
while(1)
{
IOWR_ALTERA_AVALON_PIO_DATA(PIO_OUT_BASE, 1);
}
return 0;
}


Generate bsp
Build project
и еще make targets - build - mem_target_generate
Создается elf и hex.

Теперь нужно промоделировать, по коду понятно, что я просто хочу увидеть клок, резет и единицу на выходе. Подскажите пожалуйста как и где увидеть правильные "волны"?








lostbegan
ну проект рабочий, инструкция понятная. однако например файл wave.do был там изначально, как его сформировать непонятно. таким способом свой проект прогонял, диаграммы ничего не показывают. может я немного не так сформировал вопрос. мне нужно что бы pio_out что то давал на диаграммы
AVR
Цитата(lostbegan @ Feb 20 2017, 21:00) *
ну проект рабочий, инструкция понятная. однако например файл wave.do был там изначально, как его сформировать непонятно. таким способом свой проект прогонял, диаграммы ничего не показывают. может я немного не так сформировал вопрос. мне нужно что бы pio_out что то давал на диаграммы

Меня реально подмывает уже сделать моделирование Nios2 в Modelsim, но будет ли получен академический эффект для автора темы? Ведь это самый кайф - расколоть такой орех самому.

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

В инете много сайтов типа марсохода с примерами как запустить в Modelsim хотя бы примитивный счетчик и увидеть его сигналы. Заработает счетчик - будет проще Nios2 запустить.
doom13
Цитата(lostbegan @ Feb 20 2017, 21:00) *
ну проект рабочий, инструкция понятная. однако например файл wave.do был там изначально, как его сформировать непонятно. таким способом свой проект прогонял, диаграммы ничего не показывают. может я немного не так сформировал вопрос. мне нужно что бы pio_out что то давал на диаграммы

После выполнения 8 пункта из вышеприведённой доки (рисунок), выполняете в консоли команду elab_debug, вытаскиваете необходимые линии/порты и запускаете симуляцию.

Цитата(lostbegan @ Feb 18 2017, 23:08) *
при генерации ставлю галки Create HDL - VHDL, создаю .bsf и создаю simulation model - VHDL. Так же создаю тут в qsys тестбенч на vhdl. Прикреплю скрин.

В Qsys пункт меню Generate -> Generate Testbench (согласно доке).
lostbegan
Цитата(AVR @ Feb 20 2017, 19:43) *
Ведь это самый кайф - расколоть такой орех самому.


Не такой уж и кайф) много времени провел в попытках, результата мало, итога как такового нет, это немного напрягает.

В Qsys пункт меню Generate -> Generate Testbench (согласно доке). - это так и делал, тб генерировал
doom13
Далее п 8 на рисунке, команда в консоли elab_debug и т.д., как написал выше и всё увидите

Все сделано согласно приведённой доке:
Код
#include <stdio.h>
#include "system.h"
#include "altera_avalon_pio_regs.h"

int main()
{
    while(1)
    {
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, 0xAA);
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, 0x55);
    }

    return 0;
}


Настройки Run Configurations - третий рисунок
lostbegan

>>Далее п 8 на рисунке, команда в консоли elab_debug и т.д., как написал выше и всё увидите

п8 я так понимаю это RunAs-NiosII ModelSim.
Далее насчет консоли вопрос? имеется в виду надо в скриптовый файл написать elab_debug. Тот который msim_setup.tcl? Просто как таковой консоли я не вижу

И еще вопрос, в Run configurations у меня стоит сссылка на ModelSim, а у вас на Questa SIM, это другой софт или просто часть Modelsim?
doom13
Цитата(lostbegan @ Feb 23 2017, 12:49) *
п8 я так понимаю это RunAs-NiosII ModelSim.

Да

Цитата(lostbegan @ Feb 23 2017, 12:49) *
Далее насчет консоли вопрос? имеется в виду надо в скриптовый файл написать elab_debug. Тот который msim_setup.tcl? Просто как таковой консоли я не вижу

Можно и в скрипт, но я в консоли вводил, эта команда "выбирает пункт меню из скрипта" msim_setup.tcl.


после выполнения команды elab_debug вытаскиваете нужные вам линии (второй рисунок) и запускаете симуляцию (команда в консоли run XXX us).
lostbegan
Цитата(doom13 @ Feb 23 2017, 11:25) *
Да


Можно и в скрипт, но я в консоли вводил, эта команда "выбирает пункт меню из скрипта" msim_setup.tcl.


после выполнения команды elab_debug вытаскиваете нужные вам линии (второй рисунок) и запускаете симуляцию (команда в консоли run XXX us).

все в принципе понятно, подобное делал, только без elab_debug. Только у меня ModelSim виснет. просто окошко закрывается с ошибкой. думаю стоит переустановить
doom13
Вот что получается в итоге:
1. Кнопка "Run As -> Nios II ModelSim" выполняет следующее
Код
...
cd obj/default/runtime/sim/mentor/ && "C:/questasim64_10.4a/win64/vsim" -gui -do "do load_sim.tcl; ld; "

, где C:/questasim64_10.4a/win64/ - директория установки симулятора на моём ПК
2. ld - команда описанная в файле obj/default/runtime/sim/mentor/msim_setup.tcl, включает в себя dev_com, com, elab:
Код
#msim_setup.tcl
...
alias ld "
  dev_com
  com
  elab
"
...

3. Вместо elab (Elaborates the top-level design) нужна команда elab_debug (Elaborates the top-level design with the novopt option), которую и запускаем из консоли.
4. Далее вытаскиваем нужные сигналы (можно оформить это запуском *.do файла).
5. Запускаем симуляцию - команда run

Цитата(lostbegan @ Feb 23 2017, 12:49) *
И еще вопрос, в Run configurations у меня стоит сссылка на ModelSim, а у вас на Questa SIM, это другой софт или просто часть Modelsim?

Другой
lostbegan
поставил тоже квестасим. Работает, окна не зависают. Генерирую тб в qsys - не simple, а standart. Напомню что выходы PIO у меня экспортированы. Далее все делаю как вы описывали, даю ссылку эклипсу на .spd, жму RUN, открывается questa. Генерирует, пишу elab_debug, опять генерирует и остается вот это (скрин1). Добавляю все объекты на волну, даю шагов столько, чтобы резет отработал, и хоть убей PIO не реагируют (скрин2)


код тот, что вы писали, точно такой же
doom13
Цитата(lostbegan @ Feb 23 2017, 15:49) *
Добавляю все объекты на волну, даю шагов столько, чтобы резет отработал, и хоть убей PIO не реагируют (скрин2)

На моём рисунке (Сообщение #7) время анализа 200 мкс и тактовая 125 МГц и PIO начал "моргать" где-то ~120 мкс после старта.
lostbegan
Я думаю дело не в этом. Скорее всего что то сделал не так. Я даже просматривал 2ms. Тактовый сигнал при отображении на экране был сплошной толстой зеленой полосой, но PIO так и не отозвался. Так же было и раньше, такое чувство, что не хватает какой то мелочи
doom13
Как настроен PIO в Qsys и какой код выполняет Nios?
lostbegan
к прошлому посту. Дабы не быть голословным, прикрепляю скрин. Полоска клока толстая изза масштабирования, означает что очень много синхросигналов.

К вашему вопросу. Код
CODE
#include <stdio.h>
#include "system.h"
#include "altera_avalon_pio_regs.h"
//#define PIO_0_BASE 0x41000

int main()
{
while(1)
{
IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, 0xAA);
IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, 0x55);
}

return 0;
}


PIO у меня два, на вх и вых. (скрин2)
ну и оба они экспортированы. Это видно на рис в первом посте данной темы
doom13
По Вашему рисунку настроек PIO в Qsys получается, что PIO_0 - это вход.

Что-то с именами напутано:
1) Если смотреть на рисунки в первом сообщении в system.h должны быть дефайны PIO_OUT_BASE и PIO_IN_BASE
2) Если смотреть на последний рисунок с настройками Qsys, то в system.h должны быть дефайны PIO_BASE (output) и PIO_0_BASE (input)
lostbegan
Да, system.h смотрел. Теперь заработало!!!! Путаница была, это два аналогичных проекта. просто в том я неправильно генерировал (не было elab_debug) а тут и правда вх/вых перепутал. Спасибо вам огромное! Помогли донабрать недостающие крупицы. Очень благодарен

Попробовал заводить через переменные, константы. Все отлично работает. Еще раз спасибо!
Раз уж заработало. То задам еще вопрос. Возможно ли в теории сделать следующее.
К примеру на Qsys я собрал ту же систему и создал схему BDF, на ней есть экспортированный вход PIО. Реально дать в него какой нибудь сигнал, который дальше в прошивке ниос обработать и так же вывести на PIO_OUT в виде диаграмм? Стоит ли к этому двигаться, или без платы нет смысла
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.