FPGA chips

Изучаем САПР Altera Quartus II / Intel Quartus Prime, язык описания аппаратуры Verilog HDL и кое-что про VHDL. Программируем FPGA Altera / Intel Cyclone III, Cyclone IV, MAX II, MAX10. Экспериментируем с платами разработчика  FPGA серии Марсоход, Марсоход2, Марсоход3. А еще разбираемся с FPGA Gowin.


Урок Verilog

Для программирования микросхем FPGA нам нужно разобраться со средствами проектирования, САПР и языками программирования.

Verilog HDL это один из самых популярных языков для программирования FPGA. Вот кратко, что нужно знать о языке Verilog HDL:

  • Часть 1. Базовые типы источников сигнала в языке Verilog HDL - это wire, reg, шины. Группирование логики в модули (module / endmodule). Входные и выходные сигналы модулей (input, output, inout).
  • Часть 2. Простейшие модули AND, NAND, OR, NOR, XOR, XNOR, NOT. Установка экземпляров модулей и соединение их проводами. Иерархия модулей в языке описания аппаратуры Verilog HDL.
  • Часть 3. Арифметические и логические действия в языке Verilog. Операторы сложения и вычитания (+ , -) , логический и арифметический сдвиг ( << , >> , >>> ), битовые операции ( & , | , ^, ~ ), булевые операции ( && , || , ! ), операторы редукции, условного выбора ( ? ) и сравнения.
  • Часть 4. Поведенческие блоки. Конструкции always, if-else, case-endcase, циклы for(...).
  • Часть 5. Синхронная логика и триггера в Verilog HDL. Блокирующее и не блокирующее присваивание.

Мы переходим к четвертой части наших уроков.

Раньше мы уже познакомились с постоянным назначением сигналов, оно выглядит, например, вот так:


wire a,b,c;
assign c = a & b;


Постоянные назначения весьма полезны, но и они имеют недостатки. Такой код, когда его много, не очень легко читать. Чтобы сделать язык Verilog более выразительным, он имеет так называемые "always" блоки. Они используются при описании системы с помощью поведенческих блоков (behavioral blocks). Использование поведенческих блоков очень похоже на программирование на языке С. Оно позволяет выразить алгоритм так, чтобы он выглядел как последовательность действий (даже если в конечном счете в аппаратуре это будет не так).

В холле нашего офиса установлен вот такой  кондиционер:

Кондиционер

Нужно сказать, он очень хорошо охлаждает и имеет массу всяких наворотов, один из которых - светодиодный индикатор температуры входящего воздуха.

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

verilog3.jpg

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

Вот список наших простых уроков Verilog (это статья - третий урок):

  • Часть 1. Базовые типы источников сигнала в языке Verilog HDL - это wire, reg, шины. Группирование логики в модули (module / endmodule). Входные и выходные сигналы модулей (input, output, inout).
  • Часть 2. Простейшие модули AND, NAND, OR, NOR, XOR, XNOR, NOT. Установка экземпляров модулей и соединение их проводами. Иерархия модулей в языке описания аппаратуры Verilog HDL.
  • Часть 3. Арифметические и логические действия в языке Verilog. Операторы сложения и вычитания (+ , -) , логический и арифметический сдвиг ( << , >> , >>> ), битовые операции ( & , | , ^, ~ ), булевые операции ( && , || , ! ), операторы редукции, условного выбора ( ? ) и сравнения.
  • Часть 4. Поведенческие блоки. Конструкции always, if-else, case-endcase, циклы for(...).
  • Часть 5. Синхронная логика и триггера в Verilog HDL. Блокирующее и не блокирующее присваивание.

Сейчас, мы уже знаем про модули, их входные и выходные сигналы и как они могут быть соединены друг с другом. На прошлом уроке  я рассказал, как можно сделать многобитный сумматор. Нужно ли каждый раз, когда складываем два числа, делать такие сложные модули, как на том уроке? Конечно нет! Давайте познакомимся с основными арифметическими и логическими операторами языка Verilog.

С помощью комбинаторной логики посчитаем некоторые арифметические и логические функции. Программисты C/C++ будут чувствовать себя просто как дома.

Нравятся мне телескопы, ну и все, что с ними связано. Я даже как-то писал, как с семьей ездили в Архыз искать большой телескоп. Ну у меня, конечно, есть и свой, маленький телескоп. Называется Celestron Powerseeker 127EQ. Мне его жена подарила на день рождения. Простой недорогой рефлектор Ньютона на экваториальной монтировке. Для начинающих любителей астрономии - пожалуй хороший выбор.

Телескоп Celestron Powerseeker 127EQ

Вообще с телескопами беда. Во-первых, какой бы у вас не был телескоп им нужно пользоваться ночью, а ночью обычно хочется спать. Во-вторых, лучше всего вести наблюдения зимой в морозные прозрачные ночи. Чтоб было где-то -20С или -15С хотя бы. Представляете? Обычно, когда я кого нибудь приглашаю присоединиться ко мне понаблюдать небо зимой - люди отказываются. Летом же все гораздо хуже. Раскаленная за день земля даже ночью греет воздух - он поднимается вверх неравномерными потоками и изображение в окуляре колышится. В-третьих, лучше всего вести наблюдения за городом. В городе звезд нет. Как это ни печально. Да вообще-то люди живущие в городе давно забыли, что такое звезды. Другое дело в деревне, подальше от города, от огней, от пыли и угарных газов, застилающих улицы. Вот там, глянешь на небо в россыпях звезд - вот это красота! Ну и в-четвертых, какой бы у вас не был телескоп, вам непременно хочется другой, лучший. Ну или хотя бы усовершенствовать тот что есть. Вот я хочу рассказать про попытку усовершенствовать мой телескоп.

Сделаем простой проект для платы Марсоход. Проект будет состоять всего из пары модулей, да и делать он будет не очень много - он будет складывать два двухбитных числа. На самом деле, на плате у нас есть 4 кнопочки. Две кнопки - одно двухбитное число, еще две кнопки - второе двухбитное число. Отображать результат сложения будем на светодиодах платы Марсоход. Конечно, не бог весть что. Зато мы научимся рисовать схемы пользуясь средой программирования Quartus II. Этой работой мы проверим все, что было написано в предыдущей статье.