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.


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

Кондиционер

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

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

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. Этой работой мы проверим все, что было написано в предыдущей статье.

Уроки Verilog

Verilog HDL - это язык описания цифровых схем. Он используется для проектирования цифровых микросхем ASIC и загружаемой логики FPGA (Field Programmable Gate Array). В рускоязычных статьях часто вместо слова FPGA пишут ПЛИС - Программируемая Логическая Интегральная Схема. Мы научим вас программировать ПЛИС на  языке Verilog за 5 уроков (а эта статья это уже второй урок):

  • Часть 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. Блокирующее и не блокирующее присваивание.

Из первого урока мы уже знаем, что такое модуль.

В проекте, особенно сложном, бывает много модулей, соединенных между собой. Прежде всего, нужно заметить, что в проекте всегда есть один модуль самого верхнего уровня (top level). Он состоит из нескольких других модулей. Те в свою очередь могут содержать еще модули и так далее. Не обязательно, чтобы все модули были написаны на одном языке описания аппаратуры. Совсем наоборот. Довольно удобно и наглядно иметь модуль самого верхнего уровня выполненным в виде схемы, состоящей из модулей более низкого уровня. Эти модули могут быть написаны разными людьми, на разных языках (Verilog, VHDL, AHDL, и даже выполнены в виде схемы). На самом деле – это все дело вкуса и возможностей компилятора (синтезатора), а так же требований заказчика.