Category: дизайн

Category was added automatically. Read all entries about "дизайн".

Ардуина с ПЛИСом и Верилогом: предварительно

Предварительно по гибриду Ардуины и ПЛИСа (Arduino MKR Vidor 4000), репост из фейсбука

1. Самое интересное: прошивка для ПЛИС создается в обычном квартусе (Intel Quartus, бесплатная версия Lite), на обычном Верилоге, к среде Ардуино эта процедура никакого отношения не имеет. Из кода на верилоге Квартус генерирует файл ttf (так называемый битстрим), он дальше пойдет на ПЛИС несколькими возможными путями.

шаблон пустого проекта с топ-левел модулем, настройками и кое-какими ip-блоками (открывается, собирается, генерирует файл ttf в последнем Квартусе, проверил) здесь:
https://github.com/vidor-libraries/VidorFPGA

важный нюанс: на самом деле файл ttf, генерируемый Квартусом, как есть не подходит для прошивки чипа в плате, его предварительно нужно пропустить еще через некий постпроцессор, который производит с ним какие-то вспомогательные манипуляции. Сейчас этот инструмент не открыт, поэтому сгенерить свою прошивку из Верилога для платы вот прям сейчас не получится. Но обещают все открыть в обозримом (по словам разработчиков - в ближайшем) будущем. Можно немного подождать или попробовать сделать такой пост-процессор самостоятельно - на форуме и в статьях были кое-какие подробности, плюс можно поковырять файлы ttf, выложенные в качестве демо.









доб1: пост в фб 6 сентябня, сейчас 12 октября, вериложный тулчейн еще не открыт
доб2: когда (и если) все-таки откроют, будет повод вернуться к Верилогу
доб3: Альтера уже Интел
доб4: (из коментов) еще один производитель ПЛИС (не Xilinx и не Интел-Альтера) - Lattice: http://www.latticesemi.com/en/Products.aspx#_58F82ED81585418A93A8EE6349B10899
доб5: (из коментов) проект IceStorm - открытые утилиты для работы с ПЛИС Lattice (реверс-инжиниринг): http://www.clifford.at/icestorm/


АПДЕЙТ: 24 ноября, тулчейн открыли
https://forum.arduino.cc/index.php?PHPSESSID=a5hp71v7ioivdcl67hno0nurc2&topic=581316.0
https://github.com/vidor-libraries/VidorBitstream

Collapse )

Очень важные технологии

Заглянул в фейсбук Виптеха, а там столько красивого, нельзя не поделиться. Все эти штуки проектируют, разрабатывают и производят в Нижнем Новгороде.

Вот здесь мы заходили посмотреть их производство электронных плат 2 года назад, сейчас как само собой разумеещееся. Портфолио с 2014 года превратилось в настоящие конфетки.






Collapse )

больше проектов в фейсбуке: https://www.facebook.com/VIPtechnologies/

Рраптор режет полку

Очередной исторический момент, на этот раз для проекта Рраптор: сегодня Михаил Белов вырезал на нем первую действительно полезную вещь - не запчасть для робота, не деталь для неизвесного электронного устройства, а полку для компьютерного стола и она будет реально использоваться в быту.


Рраптор режет полку from 1i7 on Vimeo.

Технологическая цепочка: Inkscape ⇒ DXF ⇒ dxf2gcode ⇒ linuxcnc ⇒ Rraptor ⇒ компьютерный стол

Рраптор режет полку-02.jpg

Рраптор режет полку-07.jpg

Collapse )

Лабораторная работа2: знакомство с платой ПЛИС (FPGA) - основы комбинаторной логики (1)

Введение: Для введения я сначала приготовил небольшой документ, который появился по результатам переписки с Юрием Панчулом и Сергеем Вакуленко, следуя которому я хотел рассказать про индустрию инструментов автоматизации проектирования электронных приборов (EDA), цикл разработки и производства микропроцессора и про текущее состояние на рынке инженеров цифрового дизайна. Но через 3 минуты после начала стало понятно, что информация о том, что для разработки процессоров используются платы ПЛИС и язык Verilog, не очень хорошо впитывается в людей, которые платы ПЛИС и язык Verilog никогда перед этим раньше не видели, поэтому рассказ по содержимому документа я решил оставить до более подходящего случая (например в качестве подведения итогов по области ПЛИС после лабы с процессором) и сразу приступить к практической части - знакомству с платами ПЛИС и языком Verilog.

1. Запуск среды разработки и создание проекта для платы Digilent Basys 2

Запустить среду разработки специально подготовленным скриптом (см установка программного обеспечения):


> /opt/Xilinx/bin/start_ise.sh

или 2мя командами в терминале:


> . /opt/Xilinx/13.4/ISE_DS/settings32.sh
> ise &

На появившемся экране нажать кнопку "New Project...", в появившемся диалоге "New Project Wizard" ввести имя проекта "basic_boolean" (место положения проекта можно сменить по желанию), нажать Next:



Collapse )

2. Создать файл с исходным кодом на Verilog - пустой модуль

Далее создаем первый файл с исходниками на верилоге: меню Project > New Source..., в открывшемся диалоге "New Source Wizard":
- выбираем в списке слева тип файла исходного кода (Source Type) = Verilog Module
- Вводим справа в поле File name: basic_boolean

кнопка Next


Collapse )

3. Структурная единица дизайна на Verilog - модуль как черный ящик со входами и выходами

Далее небольшое разъяснения о том, что из себя представляет модуль HDL (Verilog). Модуль Verilog - это основная структурная единица построения цифровой системы - по сути полный аналог физического модуля цифровой логики (logic gate) из 1й лабораторной работы (см упражнение 7 - модуль 4011 - 4NAND) - черный ящик с ножками - на какие-то ножки (input) подается входной сигнал - параметры модуля, с других ножек (output) считывается выходной сигнал - результат работы модуля.



тот же модуль в виде таблицы истинности

Определение любого модуля начинается с перечисления его входов (input) и выходов (output) в зависимости о того, что от этого модуля требуется.

В модуле basic_boolean будет проверена работа базовых булевых операторов NOT, AND, OR, NAND, поэтому у него будет два входа (2 операнда - a и b) и несколько выходов - по одному на каждый оператор (для NOT пусть будет 2) - возьмем:

Collapse )
4. Базовые булевы операторы

В теле модуля входами и выходами можно оперировать примерно как переменными внутри привычной программы - переменным-выходам можно присваивать значения при помощи оператора assign - при этом значением может быть резульатат действия стандартных булевых операторов (или их комбинаций) над переменными-входами (или другими внутренними переменными или числовыми константами).

Каждый вход и выход в данном случае несет ровно 1 бит информации (1=TRUE, 0=FALSE). Значения 2х входных битиков конвертирует в значения 5ти выходных битиков - добавляем еще несколько строк кода:

basic_boolean.v
module basic_boolean(input a, input b,
    output not_a, output not_b, output a_and_b,
    output a_or_b, output a_nand_b
    );

assign not_a = ~a; // NOT
assign not_b = ~b; // NOT
assign a_and_b = a & b; // AND
assign a_or_b = a | b; // OR
assign a_nand_b = ~(a & b); // NAND

endmodule


Collapse )
4. Синтез (synthesis) для ПЛИС (FPGA)




Перед синтезом для платы ПЛИС нужно сначала понять, что любая плата ПЛИС опять же представляет из себя черный ящик - внутри него находится прошивка, синтезированная из программы на Verilog, а снаружи опять же торчат разные устройства ввода (рычажки, кнопки, порт для клавиатуры и т.п) и вывода (отдельные светодиоды, светодиодный дисплей, порт для VGA-дисплея и т.п.), которые с одной стороны доступны человеку, работающему с платой (понажимать кнопки, посмотреть на светодиоды), а с другой - доступны для манипуляций внутри программы (считать значение вкл/выкл с определенного рачажка, подать значение вкл/выкл в нужный светодиод).

Соответственно для того, чтобы программа на Verilog получила возможность начать общение с устройствами ввода/вывода конкретной платы, нужен некий механизм, который ей в этом поможет. Для этого в среде разработки Xilinx ISE WebPack используется механизм специальных файлов с расширением ucf.

4.1. Подключение ucf-файла с описанием структуры платы ПЛИС

Все устройства ввода-вывода на плате ПЛИС пронумерованы уникальными идентификаторами. На Dililent Basys 2 эти идентификаторы можно посмотреть прямо на самой плате или же узнать из документации, доступной на сайте продукта.




см белые подписи рядом с каждым устройством




Устройства ввода рычажки SW и ввода-вывода PIO (о них ниже)

Для проверки работы модуля basic_boolean выберем два рычажка (каждый из которых может находиться в 2х состояниях - LOW/HIGH=0/1=FALSE/TRUE) - для входных параметров a и b и 5 светодиодов (которые тоже могут находиться в 2х состояниях - ВЫКЛ/ВКЛ=LOW/HIGH=0/1=FALSE/TRUE) - для выходных значений not_a, not_b, a_and_b, a_or_b, a_nand_b.

Collapse )

4.2. Создание модуля верхнего уровня для манипуляции реальными устройствами ввода/вывода платы ПЛИС

Как уже было сказано выше, основная структурная единица дизайна на Verilog - это модуль с набором входов и выходов. В рамках дизайна можно "размещать" модули на одном уровне друг рядом с другом и подключать выходы одного модуля к входам другого. А еще можно поместить несколько модулей внутрь другого модуля более высокого уровня - тогда входы внешнего модуля будут подключены к входам внутренних модулей, а выходы внутренних модулей будут подключены к выходам внешнего модуля. Таким образом дизайн на Verilog может расти как вширь, так и вглубь на любое количество уровней.


Collapse )
4.3. Синтез прошивки

Можно синтезировать прошивку для ПЛИС - в списке действий под деревом проекта выбрать элемент Generate Programming File, кликнуть два раза и подождать пока рядом с элементом не появится зеленый кружочек с белой галочкой внутри - значит bit-файл (basic_boolean_basys2.bit) с прошивкой готов.


Collapse )
sw[0], sw[1] справа налево
ld[0]...ld[4] справа налево



a=sw[0]=FALSE, b=sw[1]=FALSE
ld[0]=not_a=TRUE
ld[1]=not_b=TRUE
ld[2]=a_and_b=FALSE
ld[3]=a_or_b=FALSE
ld[4]=a_nand_b=TRUE



a=sw[0]=TRUE, b=sw[1]=FALSE
ld[0]=not_a=FALSE
ld[1]=not_b=TRUE
ld[2]=a_and_b=FALSE
ld[3]=a_or_b=TRUE
ld[4]=a_nand_b=TRUE




a=sw[0]=FALSE, b=sw[1]=TRUE
ld[0]=not_a=TRUE
ld[1]=not_b=FALSE
ld[2]=a_and_b=FALSE
ld[3]=a_or_b=TRUE
ld[4]=a_nand_b=TRUE



a=sw[0]=TRUE, b=sw[1]=TRUE
ld[0]=not_a=FALSE
ld[1]=not_b=FALSE
ld[2]=a_and_b=TRUE
ld[3]=a_or_b=TRUE
ld[4]=a_nand_b=FALSE

Небольшое видео с процессом синтеза и программирования платы ПЛИС, чтобы тем, у кого платы ПЛИС под рукой пока нет, было видно как все происходит действительно просто, но немного долго:



5. Знакомство с симуляцией (simulation)

Перед тем, как запускать дизайн на ПЛИС или если под рукой нет платы ПЛИС, работоспособность модулей Verilog хорошо бы проверить сразу на компьютере - специально для этой задачи созданы симуляторы.

В самом простом случае симулятор позволяет программно задать значения (1=TRUE=HIGH/0=FALSE=LOW) на входы модуля и показывает на специальном графике, какие при этом значения (опять же 1=TRUE=HIGH/0=FALSE=LOW) генерируются на выходах модуля.
Collapse )



продолжение см Лабораторная работа2 (2)