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

Здравствуйте, уважаемые. Есть вопрос, подведу издалека. Ранее в рамках бакалаврской выпускной разрабатывал немаленький проект по средствам языка VHDL в Altera Quartus II. Не было ничего особенно хитрого, несколько десятков ФБ, написанных на VHDL, которые побитово перемножали числа. Два автомата - управляющий и исполнительный. Работу проверял обычными в Q2 встроенными средствами - файлом диаграмм, которые подтверждали правильность функционирования. Научный рук. остался тот же и дал тему разработать проект с применением процессора NiosII, что я, что он пока очень смутно представляем что это за штука такая. Пытался читать английские инструкции, инструкции, переведенные на наш язык (огромное спасибо переводчику) ,нашел несколько так сказать тестовых проектов, и все они сводятся к зажиганию диодов на прожженной плисине. Вопрос в следующем, сейчас проект должен быть на что то вроде перемножении плавающих точек или даже матриц, пока точно не решено, возможно ли без покупки стенда создать процессор в SopcBuilder (фб для QII *.vhd), написать в него какую нибудь прошивку в IDE, и средствами QII бросить туда например числа (в пины), внутри прошивки перемножить, отпустить на output и сделать те же диаграммы? Возможно ли это?

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


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

Возможно ли это?
Возможно!

Только для моделирования надо использовать среду ModelSim-Altera.

Ну и Qsys вместо SOPC Builder'а (по нынешним-то временам).

 

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


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

Вопрос в следующем, сейчас проект должен быть на что то вроде перемножении плавающих точек или даже матриц, пока точно не решено, возможно ли без покупки стенда создать процессор в SopcBuilder (фб для QII *.vhd), написать в него какую нибудь прошивку в IDE, и средствами QII бросить туда например числа (в пины), внутри прошивки перемножить, отпустить на output и сделать те же диаграммы? Возможно ли это?
Да, это более чем реально, я такое делал. Для этого надо создать максимально простейшую систему на базе Nios 2, сделать ей "generate", затем Nios EDK создать простую программу дергающую выводами и сгенерировать ELF/HEX файл прошивки, затем в основном проекте назначить получившейся реализации этот файл прошивки.

 

Была бы реальная плата, прошивку можно было бы залить на лету, но в симуляции можно без проблем назначить этот файл как я написал выше.

 

P.S.

Можно поинтересоваться, что за ВУЗ, преподаватели которого имею такой свежий взгляд на вещи? :)

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


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

Да, это более чем реально, я такое делал. Для этого надо создать максимально простейшую систему на базе Nios 2, сделать ей "generate", затем Nios EDK создать простую программу дергающую выводами и сгенерировать ELF/HEX файл прошивки, затем в основном проекте назначить получившейся реализации этот файл прошивки.

 

Была бы реальная плата, прошивку можно было бы залить на лету, но в симуляции можно без проблем назначить этот файл как я написал выше.

 

P.S.

Можно поинтересоваться, что за ВУЗ, преподаватели которого имею такой свежий взгляд на вещи? :)

 

Ижевский государственный тех. университет, факультет ИВТ. Спасибо большое за ответы, может быть где нибудь есть какие нибудь методички или примеры на похожие темы?

 

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


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

Возможно!

Только для моделирования надо использовать среду ModelSim-Altera.

Ну и Qsys вместо SOPC Builder'а (по нынешним-то временам).

Для отладки в симуляторе можно числа читать-писать из/в файл.

А для отладки в железе, можно для простоты дела числа наверняка можно сразу же записать в память, а результат выдавать на UART...

 

какие нибудь методички или примеры на похожие темы?

Если хотите, можем поговорить об этом по скайпу...

 

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


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

Если хотите, можем поговорить об этом по скайпу...

 

Разумеется, любая информация поможет. Логин в скайпе: lostbegan

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


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

...затем Nios EDK создать простую программу дергающую выводами и сгенерировать ELF/HEX файл прошивки, затем в основном проекте назначить получившейся реализации этот файл прошивки.

 

Если не трудно, можно развернутее. конкретно интересуют моменты:

1. простую программу дергающую выводами - что значит дергающую? использующая данные с пинов? какого типа должны быть значения?

2. в основном проекте назначить получившейся реализации этот файл прошивки - имеется в виду непосредственно в QII назначить файл?

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


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

Вообще существует ли пример проекта без участия Usb - бластера, диодов и самой платы? Какой нибудь элементарный, где например на схеме NIOS принимает значения, меняет (хоть элементарно инкрементирует значение одноразово) и дает что то на выход?

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


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

Вообще существует ли пример проекта без участия Usb - бластера, диодов и самой платы? Какой нибудь элементарный, где например на схеме NIOS принимает значения, меняет (хоть элементарно инкрементирует значение одноразово) и дает что то на выход?

Пример чего?

 

Когда Вы работаете с Nios II, то у Вас есть:

1. аппаратная часть проекта, которая выполняется в Qsys (а ранее в SOPC Builder);

2. программная часть проекта (т.е. исполняемый код Nios II), который создается в Nios II SBT.

 

Даже если Вы собираетесь только моделировать, то Вам необходимы обе эти части.

При создании аппаратной части Вы можете сделать и тестбенч для моделирования.

А при создании программной часть - dat-файл, который будет инициализировать модель памяти при симуляции. И запускать симулятор Вы можете прямо из-под Nios II SBT.

 

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

 

А USB Blaster нужен только для того, чтобы загрузить проект (обе его части!!!) в реальное железо (и отлаживать его там).

 

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


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

Пример чего?

 

Когда Вы работаете с Nios II, то у Вас есть:

1. аппаратная часть проекта, которая выполняется в Qsys (а ранее в SOPC Builder);

2. программная часть проекта (т.е. исполняемый код Nios II), который создается в Nios II SBT.

 

Даже если Вы собираетесь только моделировать, то Вам необходимы обе эти части.

При создании аппаратной части Вы можете сделать и тестбенч для моделирования.

А при создании программной часть - dat-файл, который будет инициализировать модель памяти при симуляции. И запускать симулятор Вы можете прямо из-под Nios II SBT.

 

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

 

А USB Blaster нужен только для того, чтобы загрузить проект (обе его части!!!) в реальное железо (и отлаживать его там).

 

Насчет Sopc, Qsys понятно. SBT это я так понимаю старый IDE, для прошивки, тоже понятно. То что обе части будут обязательно участвовать тоже ясно. Что такое тестбенч в теории понимаю, но пока не прощупал. Что такое бластер и плата я тоже представляю. Но я не могу никак понять как набор аппаратной и программной части собрать в единое целое. При создании проекта прошивки он запрашивает информацию о ранее созданном процессоре в SOPC, есть контакт. прошивка вроде потом генерирует файл памяти, ну видимо тоже есть контакт. Пробел в том что я хочу собранный в SOPC NIOS разместить на схеме Quartus и чтобы он мог принимать какие то значения от внешних блоков на той же схеме. Я абстрактно представляю это так - я создаю какой нибудь функциональный блок, который например формирует число 3. Передает его в раннее созданный мной в sopc блок НИОС, там он эти значения как то принимает, и видимо в теле программного кода к примеру прибавляет к 3 еще 3. И выводит полученное число опять же в какой нибудь ФБ или обычный OUTPUT. Это вообще возможно или я сказки придумываю?

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


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

Если не трудно, можно развернутее. конкретно интересуют моменты:

1. простую программу дергающую выводами - что значит дергающую? использующая данные с пинов? какого типа должны быть значения?

2. в основном проекте назначить получившейся реализации этот файл прошивки - имеется в виду непосредственно в QII назначить файл?

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

Как сделать систему тоже могу подсказать, отвечу на любые конкретные вопросы.

2. Возможно я ошибаюсь, кажется мои слова справедливы лишь ядра Microblaze в среде Xilinx ISE. Но я подозреваю что в Quartus II это аналогично.

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


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

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

Как сделать систему тоже могу подсказать, отвечу на любые конкретные вопросы.

 

Где можно найти информацию по этим "специальным дергающим" функциям?

Если можете предложить помощь, буду рад совершенно любой информации, пока все никак не может собраться в общую картину

 

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


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

Пробел в том что я хочу собранный в SOPC NIOS разместить на схеме Quartus и чтобы он мог принимать какие то значения от внешних блоков на той же схеме. Я абстрактно представляю это так - я создаю какой нибудь функциональный блок, который например формирует число 3. Передает его в раннее созданный мной в sopc блок НИОС, там он эти значения как то принимает, и видимо в теле программного кода к примеру прибавляет к 3 еще 3. И выводит полученное число опять же в какой нибудь ФБ или обычный OUTPUT. Это вообще возможно или я сказки придумываю?

Тут Вы перемудрили.

Передать какую-либо величину в процессор проще всего через стандартное периферийное устройство - UART, PIO, и т.п. Тут ничего изобретать не надо - бесплатная библиотека наиболее ходовых периферийных устройств уже имеется в Qsys. Создаете систему с нужной Вам периферией (т.е. процессор+память+периферия) и все. Это все вместе - один модуль, который Вы можете использовать в квартусовском проекте.

Дальше все просто - приняли байт из периферийного устройства, обработали его, и выдали, например, в другое периферийное устройство (предупреждение - моделировать UART/SPI/I2C/<и т.п.> будет геморройно, лучше для начала PIO ограничиться).

 

 

Где можно найти информацию по этим "специальным дергающим" функциям?

Если можете предложить помощь, буду рад совершенно любой информации, пока все никак не может собраться в общую картину

Вся необходимая документация живет вот тут: https://www.altera.com/products/processors/support.html

 

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


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

Насчет Sopc, Qsys понятно. SBT это я так понимаю старый IDE, для прошивки, тоже понятно. То что обе части будут обязательно участвовать тоже ясно. Что такое тестбенч в теории понимаю, но пока не прощупал. Что такое бластер и плата я тоже представляю. Но я не могу никак понять как набор аппаратной и программной части собрать в единое целое. При создании проекта прошивки он запрашивает информацию о ранее созданном процессоре в SOPC, есть контакт. прошивка вроде потом генерирует файл памяти, ну видимо тоже есть контакт. Пробел в том что я хочу собранный в SOPC NIOS разместить на схеме Quartus и чтобы он мог принимать какие то значения от внешних блоков на той же схеме. Я абстрактно представляю это так - я создаю какой нибудь функциональный блок, который например формирует число 3. Передает его в раннее созданный мной в sopc блок НИОС, там он эти значения как то принимает, и видимо в теле программного кода к примеру прибавляет к 3 еще 3. И выводит полученное число опять же в какой нибудь ФБ или обычный OUTPUT. Это вообще возможно или я сказки придумываю?

Да, сам Nios2 в ПЛИСовом проекте добавляется как еще один модуль:

wire [31:0] out_value;
my_nios2_cpu CPU(
.clock(clockNmhz),
.reset(reset), // линия сброса
.gpio_in(32'd3), // число "три" на входу
.gpio_out(out_value)
);

Отрабатывает программа (много тактов clockNmhz) и на шине out_value мы видим число "шесть".

Можно работать с одним GPIO блоком (параллельные линии ввода-вывода), но новичку я бы посоветовал использовать один только как входной, а второй только как выходной. При создании системы с Nios 2 также следует вызвать в менюшке assign addresses и оно само правильно раскидает блоки в адресом пространстве Nios2.

 

В самом же блоке my_nios2_cpu крутится прошивка (ELF/HEX/что угодно), и сформирована она должна быть в среде Eclipse (например). Там создается новый workspace и затем File->(new/create)->"Application and BSP" (как-то так). Указываем путь до файла SOPC (или *.qsys) и создаем там BSP-проект и hello world программку-пример. Всё это создастся автоматически. Затем мы собираем проект BSP и приступаем к редактированию программки своей (не BSP).

 

Там мы настраиваем при помощи доступа к регистрам процессора направления работы блоков GPIO (части процессора Nios2), считываем вход gpio_in (это допустим блок GPIO_0) видим там 3, прибавляем тройку и выводи в gpio_out (блок GPIO_1). Чтение с GPIO фактически это будут как беззнаковые числа, можно читать их в переменные типа unsigned int. При генерации BSP мы получили файлы system.h и ряд других - вот они то и содержат адреса блоков GPIO в адресом пространстве Nios2. Собрав проект программки получаем прошивку (тот самый ELF или HEX), которую (другие подскажут) подсовываем в главном ПЛИСовом проекте как прошивку для процессора.

 

Далее запускаем симуляцию - как? Это отдельный вопрос, причем в отличие от САПР фирмы Xilinx, на мой взгляд у Altera это делается слишком сложно в самой среде и поэтому я бы попытался запустить в отдельно запущенном Modelsim Altera(Intel) Starter Edition.

 

В общих чертах всё именно так. Но я прекрасно понимаю что просто так по моим словам этого не сделать, придется много разбираться. Примеров в интернете очень много, ведь по ним я и учился, по статьям всяким с картинками. Но по сути всё предельно просто, главное уловить суть и тогда всё что касается процессоров типа Nios2 и Microblaze будет казаться примитивным.

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


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

Создаете систему с нужной Вам периферией (т.е. процессор+память+периферия) и все. Это все вместе - один модуль, который Вы можете использовать в квартусовском проекте.

Дальше все просто - приняли байт из периферийного устройства, обработали его, и выдали, например, в другое периферийное устройство (предупреждение - моделировать UART/SPI/I2C/<и т.п.> будет геморройно, лучше для начала PIO ограничиться).

 

то есть процессор+память можно обставить двумя PIO на вх/вых и программно в прошивке с них бросать данные, обрабатывать и посылать на второй PIO. Потом моделировать в modelSim? Тогда Quartus как участвует? BlockSchematicFile вообще предполагается при таком раскладе?

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


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

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

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

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

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

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

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

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

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

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