Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial Internet of Things >> Встроенный

Verilog 101: создание первых модулей описания аппаратуры

В этой статье мы изучим базовую структуру модуля Verilог, рассмотрим примеры использования типа данных «wire» и его векторной формы, и кратко затронем отличия между VHDL и Verilog.

В этой статье мы изучим базовую структуру модуля Verilog, рассмотрим примеры использования типа данных «wire» и его векторной формы, и кратко затронем отличия между VHDL и Verilog.

Verilog и VHDL — два языка, обычно используемые для описания цифровых схем. AAC имеет серию технических статей, обсуждающих базовые концепции VHDL. Эта статья служит точкой входа для нашей серии по Verilog.

Нужны ли мне и Verilog, и VHDL?

Прежде чем начать, ответим на очевидный вопрос: действительно ли нам нужно знать оба языка?

И Verilog, и VHDL — мощные инструменты для проектирования сложных цифровых схем. Хотя между этими HDL есть различия, вы можете выбрать любой для освоения и использования. Однако я считаю, что в какой-то момент вы выиграете от базового понимания обоих языков. Иногда дизайнерам нужен фрагмент кода-примера, чтобы понять, как кодировать проект. Мы часами серфим сеть и наконец находим то, что нужно, но оно непонятно — написано на совершенно незнакомом HDL. Без базового понимания языка мы можем не полностью понять техники.

Эволюция Verilog

Verilog был спроектирован в начале 1984 года компанией Gateway Design Automation (примерно за три года до того, как VHDL был инициирован Министерством обороны США). При поддержке DoD VHDL стал стандартом IEEE в 1987 году. Verilog не появился на сцене до 1995 года. Сегодня оба VHDL и Verilog — популярные HDL, и инструменты FPGA обычно поддерживают оба языка.

Слово «Verilog» — портманто из слов «verification» и «logic», потому что язык изначально предлагался как инструмент симуляции и верификации. Давайте начнем с концепций и синтаксиса Verilog.

Пример 1

В качестве первого примера напишем Verilog-код для схемы, изображенной на Рисунке 1.

 

Verilog 101: создание первых модулей описания аппаратуры

Рисунок 1. Circuit_1
 

Есть два входа и один выход. Все порты однобитные. Функциональность схемы — выполнить AND двух входов и выдать результат на порт out1.

Один из возможных Verilog-описаний модуля Circuit_1:

Verilog 101: создание первых модулей описания аппаратуры

Строки 1 и 8

Эти строки используют ключевые слова «module» и «endmodule», чтобы указать, что строки между ними (2–7) описывают схему с именем «Circuit_1». Это имя произвольно и позволяет ссылаться на схему позже.

 

Строки 2–6

Эти строки задают интерфейс «Circuit_1» с окружающей средой. Входные и выходные порты описываются ключевыми словами «input» и «output». За ними следует ключевое слово «wire» и имя порта (см. Рисунок 1). Что обозначает «wire»? «Wire» — тип данных Verilog, представляющий физический провод в дизайне. Мы обсудим типы данных Verilog подробнее в будущей статье, но пока знаем, что в нашем модуле будет три провода: a, b, out1, и так как они указаны в объявлении портов, они соответствуют интерфейсу модуля.

 

Строка 7

Эта строка использует побитовый оператор AND, то есть &, для описания функциональности схемы. Ключевое слово «assign» помещает a&b на выходной порт out1. Это называется непрерывным присваиванием. Оно так называется, потому что присваивание всегда активно: когда любой операнд справа меняется, a&b пересчитывается и присваивается out1. Мы можем представить непрерывное присваивание как комбинационную схему, выход которой непременно обновляется в зависимости от входов. В нашем примере эта комбинационная схема — простой элемент AND. В Verilog HDL также есть процедурные присваивания, которые будут обсуждены в будущих статьях.

Теперь мы можем использовать программный пакет вроде Xilinx ISE для проверки кода выше. Verilog-ориентированный туториал этого ПО можно найти здесь (PDF).

Сравнение примера 1 с кодом VHDL

Рисунок 2 ниже показывает Verilog и VHDL описания для модуля Circuit_1.

 

Verilog 101: создание первых модулей описания аппаратуры

Рисунок 2. Сравнение Verilog и VHDL описаний для Circuit_1.

 

Как видите, в VHDL нужно подключать библиотеки. Они дают определения типов данных и операторов. Учитывая эти библиотеки и общий формат VHDL, мы видим, что VHDL код более вербален. Однако эта вербальность не лишена преимуществ. Например, управление библиотеками в VHDL может помочь при моделировании систем более высокого уровня. В будущих статьях мы будем иногда обсуждать плюсы и минусы этих двух HDL.

У Verilog четырехзначная система

В большинстве типов данных Verilog используются четыре базовых значения. Провода, определенные в листинге 1, могут принимать одно из следующих значений:

Тип данных VHDL std_logic может принимать девять разных значений, но обычно используются '0', '1', 'Z', и '-' ('-' обозначает don't-care).

Пример 2

В качестве другого примера напишем Verilog-код для схемы (которую назовем Circuit_2), показанной на Рисунке 3.

 

Verilog 101: создание первых модулей описания аппаратуры

Рисунок 3. Circuit_2

 

Следующий Verilog-код описывает эту схему:

Verilog 101: создание первых модулей описания аппаратуры

Элементы в коде похожи на Пример 1, за исключением того, что во строке 10 определяется внутренний сигнал. Ключевое слово «wire» указывает тип данных этого соединения. Как обсуждалось, тип «wire» транслируется в физический провод в дизайне.

Код также использует новые побитовые операторы Verilog: ~ для NOT и | для OR. Еще один полезный оператор — ^ для XOR. Рисунок 4 показывает оба Verilog и VHDL описания для модуля Circuit_2. Такие сравнения помогают увидеть различия и сходства между языками.

Verilog 101: создание первых модулей описания аппаратуры

Рисунок 4. Сравнение Verilog и VHDL описаний для Circuit_2.

Пример 3

Для третьего и последнего примера дадим Verilog-код для схемы на Рисунке 5.

 

Verilog 101: создание первых модулей описания аппаратуры

Рисунок 5. Схема для примера 3.

 

Как видите, есть определенная связь между синими входными портами и красными: соответствующие входы комбинируются оператором AND. Результат присваивается выходному порту. В таких случаях можно группировать сигналы и рассматривать их как вектор. Это делает код компактным и читаемым.

Используя концепцию векторов в Verilog, мы можем легко расширить код Листинга 1 для описания вышеуказанной схемы (см. код в Листинге 3 ниже).  

Verilog 101: создание первых модулей описания аппаратуры

Обратите внимание, что диапазон индексов векторов может быть либо возрастающим ([0:2] как выше), либо убывающим ([2:0]). Хотя выше использован возрастающий формат, обычно менее ошибочно использовать убывающий. Это связано с тем, что убывающий стиль соответствует нашему восприятию, что крайняя левая позиция бинарного числа имеет наивысший индекс. Векторы также используются в VHDL.

Рисунок 6 ниже показывает симуляцию ISE кода Листинга 3.

Verilog 101: создание первых модулей описания аппаратуры

Рисунок 6. ISE симуляция кода примера 3.

 

В этой статье мы обсудили, что хорошо бы знать и VHDL, и Verilog, изучили базовую структуру модуля Verilog, ознакомились с типом данных «wire» и его векторной формой. Также кратко коснулись отличий между VHDL и Verilog. Следующая статья нашей серии по Verilog будет обсуждать проектирование комбинационных схем в Verilog.


Встроенный

  1. Code-Ready Containers: практическое руководство по облачно-ориентированной автоматизации процессов с Red Hat OpenShift
  2. Практическое руководство по керамической 3D-печати: техники, материалы и советы по дизайну
  3. Начало работы с TJBot: сборка, настройка и голосовое управление ИИ-роботом
  4. Пошаговое руководство по развертыванию LoRa-шлюза RAK 831 на Raspberry Pi 3
  5. Сборка LoRa-шлюза на модуле RAK831 и Raspberry Pi 3 — пошаговое руководство
  6. Мастерство Edge AI-инференса: практическое руководство к действительным инсайтам
  7. Откройте для себя Eagle Group: ваш партнер по качественному металлообработке
  8. Оптимизация техники Cat®: полное руководство по My.Cat.com
  9. Развертывание Node-RED на PLCnext с Docker: пошаговое руководство
  10. Создание первого Go-приложения на PLCnext: руководство для начинающих