Видео в конце...
С этого выпуска начинается изучение языка описания аппаратуры Verilog. При помощи него мы сможем разобраться со всем спектром вопросов, встающих перед разработчиками аппаратной части систем обработки информации. Вход в эту область разработки для нас будет сильно затруднен, если мы не овладеем базовыми знаниями.
Среди двух наиболее популярных языков описания аппаратуры выбор языка Verilog нельзя обосновать железобетонно, вместе с языком VHDL, они используются в равной степени. Они настолько похожи и повторяют друг друга, что очень даже хорошо совместимы между собой в одном проекте. Verilog выглядит более предпочтительным только ввиду чуть большей компактности исходного кода, а также возможности попробовать свои силы на одном из самых низких уровней описания цифровой аппаратуры. В нем есть возможность описывать схемы на транзисторном уровне.
В составе среды разработки проектов для ПЛИС есть средство моделирования, которое необходимо при отладке, покупка отладочного комплекта желательна, но не является необходимостью.
Что такое модуль?
И так, приступим. Язык Verilog обладает некоторым списком ключевых слов, которые употребляются строго из-за какой-то необходимости. Вот на этих примерах употребления мы и начнем разбираться с особенностями языка. Первое, с чем мы сталкиваемся это понятие модуля.
Рассмотрим пример описания МОП транзистора pmos типа при помощи языка Verilog. Каждое проектируемое устройство должно быть оформлено средствами языка в виде функционального модуля с конечным числом входов и выходов. Между ключевыми словами module и endmodule содержится описание модуля.
После указания имени модуля, в круглых скобках описываются входы и выходы модуля. Ключевым словом pmos обозначен экземпляр транзистора pmos типа с именем p1. В круглых скобках описываются соединения транзистора с входами и выходами функционального модуля. Порядок следования соединений соответствует строгой схеме. Первым в списке находится исток, потом сток и последним будет затвор. Положение затвора на схеме определить совсем не сложно. Конкретное нахождение истока и стока на схеме можно запомнить простым правилом. Направление условного потока электронов идет от выходов ко входам. Все что у транзисторов подключается к выходам прямо или косвенно, будет истоком. Все что прямо или косвенно подключается к земле или питанию, будет стоком.
Проверим работоспособность
Средство моделирования поддерживает проверку работоспособности устройства, описанного на транзисторном уровне при помощи языка Verilog. При моделировании разработанного модуля создается файл с описанием модуля тестирования, который не имеет ни входов ни выходов.
Внутри модуля тестирования объявляется один или более экземпляров тестируемого модуля, проводники для передачи тестовых сигналов на модуль, а также проводники для считывания выходных сигналов тестируемого модуля. Рассмотрим пример теста транзистора pmos типа.
В модуле тестирования создается экземпляр модуля u1 , вспомогательные регистры x1, g1 для передачи тестового воздействия на экземпляр модуля u1, проводник y1 для считывания выходного сигнала модуля при воздействии тестовых сигналов. В приведенном языковом описании тестового модуля ключевое слово timescale служит для указания симулятору шага времени и точности. Шаг времени одна наносекунда задает единицу измерения времени, последующие директивы вроде числа 100 — количество единиц времени для временной задержки между изменениями тестовых воздействий. Точность служит для округления времени задержки в большую сторону до дискретного значения, число, указанное в качестве точности задает дискретность.
Идентификатор pmos_tb определяет имя тестового модуля. Ключевое слово wire указывает симулятору на необходимость задания проводника для считывания реакции модуля на тестовые воздействия. Ключевое слово reg служит для обозначения несуществующих в действительности регистров, связанных со входами тестируемого модуля.
Эта строка объявляет экземпляр u1 модуля и связывает входы и выходы тестируемого модуля с внутренними проводниками и регистрами тестового модуля. После ключевого слова initial задаются действия, выполняемые 1 раз при запуске теста, в указанном случае такие действия содержатся ниже между ключевыми словами begin и end. Тестовые воздействия описываются в нужном пользователю порядке и необходимыми паузами между ними. В случае отсутствия паузы между различными воздействиями симулятор принимает их строго одновременными во времени. Например, в этой строке одновременное возникновение уровня логического нуля на проводниках x1 и g1. После паузы в 100 наносекунд будет одновременная смена состояния сигналов на линиях.
Для моделирования цифровых устройств в комплект среды разработки входит приложение Modelsim. В использовании довольно просто. Главное это уже иметь готовые описания модуля и теста для него. Результат моделирования представлен на рисунке.
При подаче уровня логического нуля на затвор транзистора происходит передача сигнала через транзистор со стока на исток. При подаче уровня логической единицы, транзистор принимает состояние высокого сопротивления, что при моделировании отмечается высокоомным состоянием Z на истоке. Это показано синим цветом. В случае nmos транзистора временные диаграммы будут выглядеть иначе.
Входной сигнал окажется на выходе только тогда, когда на затворе логическая единица. При подаче уровня логического нуля на затвор транзистора nmos типа, происходит его запирание, что выражается появлением Z-состояния на истоке. То есть состояния высокого сопротивления. Отсутствие проводимости.
Немного усложним
На этом шаге мы слегка познакомились со средой моделирования и выяснили что означают некоторые ключевые слова языка. Давайте двинемся дальше. Опишем инвертор на транзисторном уровне. Он состоит из комплементарной пары транзисторов. Они имеют вот такое подключение и в этой схеме есть линии питания и земли.
В языке описания аппаратуры по большому счету два стиля описания. Это структурный и поведенческий. Поведенческий описывает поведение модуля. Структурный описывает то, из чего модуль состоит. Вот сейчас и познакомимся со структурным стилем описания модуля.
В нашем модуле кроме привычных уже ключевых слов описания входов и выходов появился список из составных частей устройства. Supply0 это проводник связанный с землей схемы. Supply1 это проводник питания схемы, она же логическая единица. Ниже два транзистора и с ними мы уже знакомы. Посмотрите внимательно порядок подключения. Исток, сток, затвор. Исток у обоих это выход схемы. У одного сток на питании, у другого на земле. Затворы обоих транзисторов подключены ко входу схемы.
В написании теста для инвертора теперь нет сложностей. Одна входная линия, одна выходная. Сам инвертор структурно входит в модуль теста и подключен к линиям тестирующего модуля. В секции задания уровней сигнала все тоже довольно предсказуемо. Начальное состояние ноль на входе продержится 200 наносекунд, потом сменится на единицу и продержится тысячу наносекунд.
Результат моделирования в случае отсутствия ошибок в описании модуля будет такой. Если на входе ноль, на выходе единица и если единица на входе, то ноль на выходе.
Давайте еще кое-что рассмотрим один раз чтобы потом не возвращаться. Слева на рисунке изображена схема вентиля ИЛИ-НЕ с тремя входами.
С целью упрощения конструкции, иногда применяют подтягивание к питанию, что избавляет схему от множества транзисторов. Один резистор, вставленный перед питанием позволяет схеме как и прежде выполнять свои функции. Выставленные нули на всех входах закроют все транзисторы, при этом на выход пойдет напряжение питания, она же логическая единица. Любая единица на входе откроет транзистор и по закону Ома напряжение земли пойдет на выход. Резистор избавляет схему от короткого замыкания.
Подтяжка резистором к питанию описывается ключевым словом pullup.
В скобках записано, что выход схемы подтянут к питанию. Остальные элементы нам уже знакомы. Это по прежнему структурный стиль описания. Напишем модуль тестирования. Для этого нам потребуется три входных линии, одна выходная.
Вписываем разработанный вентиль в структуру теста и соединяем его контакты с линиями тестирующего модуля. Ниже каждые 100 наносекунд перебираем все возможные комбинации входных сигналов. Все работает согласно таблице истинности. В случае трех нулей на входе, будет единица на выходе.
Эта единица особенно отображается пунктиром, чтобы не забывать что она получена с питания через резистор. Пожалуй, про транзисторы хватит. Главное в этом то, что рассмотрен структурный стиль описания и несколько языковых оборотов.
К сожалению, устройство ПЛИС не такое, чтобы пробовать прошить ее схемами на транзисторном уровне. Сейчас мы только учимся моделировать результаты своего творчества. Со следующего видео мы начнем разрабатывать проекты для ПЛИС и осваивать все необходимое для понимания сути параллельных вычислений.
Продолжение следует...
Поддержите статью лайком если понравилось и подпишитесь чтобы ничего не пропускать.