Найти тему
IT. Как это работает?

Verilog. Структурный и поведенческий стиль

Оглавление

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

Структурный стиль описания

Рассмотрим устройство мажоритарного голосования. Таблица истинности и уравнение булевой логики показаны на рисунке.

Логика модуля мажоритарного голосования
Логика модуля мажоритарного голосования

Представьте, что в целях защиты от ошибок работает три вычислителя одновременно и каждый дает свое решение "истина" или "ложь". Простым голосованием большинства представленный модуль выдает окончательное заключение. При малой вероятности ошибки, в вычислениях такой модуль способен повысить надежность. Кстати говоря, в космических челноках, как поговаривают, Space Shuttle параллельно работали аж 5 компьютеров.

Бортовой компьютер Space Shuttle
Бортовой компьютер Space Shuttle

Согласно минимизированному уравнению, схема устройства на вентильном уровне выглядит следующим образом.

Вентильная схема модуля
Вентильная схема модуля

Самый правый вентиль обеспечивает дизъюнкцию всех конъюнктов. Он содержит три входа и один выход. Остальные вентили с первого по третий это простые вентили конъюнкции двух булевых переменных. Согласно минимизированной функции таких конъюнктов как раз три.

Немного вспомним структурный стиль описания и за одно посмотрим какие еще ключевые слова есть в языке. После объявления входов и выхода модуля начинается описание внутреннего устройства.

Структурное описание модуля
Структурное описание модуля

С описанием проводов мы уже познакомились ранее. Тогда мы их использовали чтобы в модуле тестирования подключить тестируемое устройство. Сейчас эти три провода нам понадобятся чтобы соединить вентили между собой. Обычно общее число необходимых дополнительных проводов можно посчитать. Все те линии, которые не связаны со входами и выходами должны быть задекларированы в описании модуля.

Теперь про вентили. Дизъюнкция обозначается как or и конкретный ее экземпляр носит имя g4. Поскольку у нее три входа и один выход, то количество контактов в скобках равно четырем. Правило их описания простое. Сначала пишется выход, потому что он один. Количество входов может быть разным, поэтому все они идут следом. На вход вентиля поступают провода, описанные выше. Выход вентиля и есть выход схемы.

Далее описаны конъюнкции в количестве трех штук g1,g2,g3. Выходами у них являются провода w с первого по третий. Они также идут первым номером у каждой из конъюнкций. После описаны входы. Это входные линии модуля. В структурном стиле описания абсолютно ничего сложного.

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

Главное, чтоб их соединение друг с другом было корректным. К сожалению, структурное описание довольно тяжело воспринимается. Представить себе картинку по описанию довольно сложно. И с целью большей наглядности применяется поведенческое описание.

Поведенческий стиль описания

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

Поведенческий стиль описания
Поведенческий стиль описания

А вот дальше уже свои особенности. Средствами языка описывается уравнение булевой логики, где знаками & и | обозначены конъюнкции и дизъюнкции. Чтобы меньше стучать по клавиатуре, лучше всего использовать минимизированный вариант. Ключевое слово assign присваивает выходной линии y значение булевой функции. Все операции над булевыми переменными заданы в правой части равенства. Круглые скобки задают порядок действий. Сначала выполняются конъюнкции, затем результаты конъюнкций проходят через дизъюнкцию. Все строго в соответствии со схемой. Такое описание гораздо более наглядно и даже вполне себе более компактно, чем структурное описание той же схемы.

Программирование ПЛИС

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

Отладочный комплект, купленный на AliExpress
Отладочный комплект, купленный на AliExpress

Altera на настоящий момент уже куплена корпорацией Intel. В среде разработки Intel Quartus Prime создаем проект. Самый важный момент это указание модели ПЛИС. Внимательно разглядываем маркировку на чипе и ищем ее в списке. Чтобы меньше искать, указываем семейство в ниспадающем меню. Это Cyclone IV E. Листаем пока не находим нужное число, выбираем модель по остальному буквенному и числовому коду.

Внешний вид среды проектирования
Внешний вид среды проектирования

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

Моделируем

При помощи приложения Modelsim моделируем разработанное устройство.  Результаты моделирования показывают, что таблица истинности полностью повторяется и все работает без ошибок.

Результат моделирования модуля
Результат моделирования модуля

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

Загружаем прошивку

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

Фрагмент документации на отладочный комплект
Фрагмент документации на отладочный комплект

Нужно всего лишь указать среде разработки какие контакты ПЛИС связать со входами и выходами разработанного модуля.

Таким же образом нужно поступить и с индикацией. Из восьми светодиодов выбираем один, который связан с контактом J13 ПЛИС. Он покажет реакцию модуля на входные воздействия. В среде разработки в меню выбираем пункт Назначения и контакты, где указываем каким входам и выходам проекта соответствует какой контакт ПЛИС.

Возвращаемся в среду разработки и компилируем проект заново со всеми новыми назначениями.  Удостоверимся, что программатор подключен к плате и есть питание отладочного комплекта. После нажатия кнопки старт, прошивка оказывается внутри ПЛИС. После этого программатор можно отсоединить и попробовать как это все работает.

Эпилог

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

Продолжение следует...

Поддержите статью лайком если понравилось и подпишитесь чтобы ничего не пропускать.