литература / kondratenko_yu_p_mokhor_v_v_sidorenko_s_a_verilog_hdl_dlya_m
.pdfУчебное§ 1. Применениепособиеязыка Verilog и методология проектирования цифровых устройств |
21 |
Модель высокого уровня абстракции может использоваться также при управлении проектом в качестве частного технического задания для проектирования отдельных структурных компонентов разрабатываемого устройства.
Синтез модели высокого уровня – технического задания и декомпозиция ее на структурные компоненты поручается чаще всего наиболее опытному разработчику в составе группы проектантов [1]. В этом случае рядовой проектировщик (член группы разработки) получает модель высокого уровня абстракции для своего конкретного компонента, в которой определены необходимые требования по быстродействию и разрядности интерфейсных сигналов. Его задача состоит в построении адекватной модели более низкого уровня, которая полностью обеспечивает соблюдение всех вышеперечисленных требований. Это позволяет включать данное устройство (как структурный компонент) в сложный проект без дополнительной переработки и адаптации к структурным составляющим, разработанным другими членами рабочей группы.
ЯзыкVerilog поддерживаетчетыре уровняабстракциимоделей[28]:
•вентильный уровень;
•логический уровень;
•поведенческий, или алгоритмический, уровень;
•уровень потоков данных.
Более детальное описание уровней абстракции (в порядке снижения уровня) приведено ниже.
Поведенческий, или алгоритмический, уровень – это наивыс-
ший допустимый в Verilog уровень. На этом уровне модель описывается в виде алгоритма работы устройства, без детализации его аппаратной реализации. Разработка моделей на этом уровне подобна традиционному программированию на языке Си.
Уровень потоков данных – предполагает построение функциональной модели разрабатываемого устройства на основе предварительно формируемого графа потоков данных. Механизм задержек, включенный в языковый стандарт Verilog, позволяет устанавливать время передачи сигнала по ребрам графа и, таким образом, моделировать временные параметры устройства.
22 |
Verilog-HDL для моделирования и синтеза цифровых электронных схем |
Логический уровень – этот уровень, как видно из его названия, предполагает формирование функционально-структурной модели устройства в виде цепей из стандартных логических элементов (например, И, ИЛИ и Исключающее ИЛИ и т.п.). Такие элементы реализованы в виде стандартных модулей в языке Verilog и могут быть включены в любую пользовательскую программу.
Вентильный уровень – это наиболее низкий из возможных в языке Verilog уровней абстракции. При разработке моделей на этом уровне проектировщик оперирует такими понятиями, как МОП-транзистор, КМОП-транзистор и т.п. [7; 19; 22]. Средства синтеза, разработанные для интегральных микросхем FPGA-типа, не позволяют синтезировать логические цепи на базе моделей вентильного уровня. В то же время такие модели полезны для понимания и исследования физических процессов, протекающих в цифровых цепях.
Отдельно выделяют также уровень регистровых передач
(Register transfer level), представляющий собой комбинацию первых трех уровней абстракции. Verilog-модели, разработанные на уровне регистровых передач, включают только поддерживаемые средствами синтеза операторы языка.
- 2 -
Элементы языка Verilog
Данная глава посвящена описанию таких элементов языка Verilog, как идентификаторы, константы, директивы компилятора и пр.
В первую очередь, задача этой главы состоит в формировании представления о наборе средств языка Verilog, более подробное рассмотрение особенностей применения которых будет осуществлено в следующих главах.
Большинство синтаксических конструкций язык описания оборудования Verilog унаследовал от языка Си. Программа на языке Verilog представляет собой поток литералов (последовательностей символов ASCII-кода), интерпретирующихся как комментарии, разделители, числа, строки, идентификаторы и ключевые слова. В отличие от VHDL, язык Verilog чувствителен к регистру. Все ключевые слова Verilog набираются в нижнем регистре.
2.1. Комментарии в языке Verilog
Существенно повысить читаемость и понятность программного кода позволяет широкое использование комментариев, которые устанавливаются в произвольном месте программы и могут содержать любые возможные символы (в том числе и знаки кириллицы). Во время компиляции комментарии игнорируются, поэтому их можно также применять для временного отключения фрагментов программы (при отладке программы без удаления фрагментов). Во многих организациях приняты внутренние стандарты для сопровождения программ ком-
24 |
Verilog-HDL для моделирования и синтеза цифровых электронных схем |
ментариями. Например, среда Active-HDL в автоматически генерируемые модули добавляет комментарии, содержащие стандартный заголовок для программы следующего вида:
//-------------------------------------------------
//
//Title : Full_Adder
//Design : Verilog_book
//Author : serh_syd
//Company : NPK_SIGNAL
//-------------------------------------------------
//File : a.v
//Generated : Wed Jul 28 15:41:01 2002
//From : interface description file
//By : Itf2Vhdl ver. 1.20
//
//-------------------------------------------------
//
// Description :
//
//-------------------------------------------------
При этом информация о компании, авторе и т.п. берется средой Active-HDL автоматически из данных операционной системы.
Синтаксические правила по созданию комментариев состоят в следующем.
Пара символов « // » начинает комментарий, заканчивающийся вместе с окончанием текущей строки. Для получения многострочных комментариев возможно использование пар символов « /* » (открытие комментария) и « */ » (закрытие комментария). Ниже приведены примеры использования комментариев обоих типов:
// Комментарий от начала строки до конца assign a = z // Комментарий до конца строки
§Учебное2. Элементыпособиеязыка Verilog |
25 |
|
/* |
Комментарий Комментарий */ |
|
/* |
Многострочный комментарий, с помощью которого удобно времен- |
|
но отключать фрагменты программы module Reg01 (a, b, c)
assign a = 1; */
В языке Verilog не допускается наличие в программе конструкций, содержащих вложенные комментарии второго типа, подобно ниже приведенному фрагменту:
/* ++ /* неправильный вложенный комментарий */ ++ */
В то же время комбинация различных типов комментариев допустима:
/* Внешний
//и правильный вложенный комментарий */
//Еще один /* правильный вложенный комментарий */
Учебное пособие |
25 |
2.2. Операции
Операции в языке Verilog различаются по числу операндов – унарные, бинарные и тернарные. Унарные операции в выражениях предшествуют операнду, например:
A = ~B; // ~ это унарная логическая операция НЕ, // B – это операнд
Знаки бинарных операций помещаются между операндами:
A = B + С; // + это бинарная операция, B, С – это операнды
Полное описание операций и методов их использования представлено в разделе 4.1.
26 |
Verilog-HDL для моделирования и синтеза цифровых электронных схем |
.
2.3. Числовые константы
Язык Verilog позволяет задавать числовые константы двумя способами – с указанием разрядности и без указания разрядности.
В первом случае число представляется следующим образом:
<Разрядность>'<Основание><Число>
<Разрядность> – это записанная в десятичном представлении разрядность константы (число бит).
<Основание> – задает систему счисления, в которой записывается константа, при этом допускаются следующие варианты: десятичная система ('d или 'D), шестнадцатеричная ('h или 'H), двоичная ('b или 'B) и восьмеричная ('o или 'O).
<Число> – строковое представление числовой константы (последовательность цифр из набора 0, 1, 2,
3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f).
Символы верхнего регистра также разрешены для использования в шестнадцатеричных числах.
Ниже представлены примеры числовых констант с заданной разрядностью:
8'b01011100
12'hF00
8'd123
Числовые константы, в которых не задана система счисления, рассматриваются как десятичные. Если в числовой константе не указана разрядность, то принимается число бит, установленное в системе по умолчанию. В этом случае разрядность зависит от конкретной реализации Verilog-компилятора (обычно это число равно 32). Примеры таких числовых констант:
Учебное§ 2. Элементыпособиеязыка Verilog |
27 |
|
26781 |
// 32-битное десятичное (по умолчанию) число |
|
'hAE |
// 32-битное шестнадцатеричное число |
|
В связи со спецификой языка Verilog как языка описания оборудования в его состав введены специальные средства для представления реальных процессов передачи сигналов в электронных системах.
К таким средствам относятся специальные литералы x и z. Первый из них обозначает «неизвестное значение сигнала», кото-
рое возникает в ряде случаев, например, до первого присваивания сигналу значения, при наложении сигналов, при отключении источника на некоторых типах шин и т.п.
Константа z используется для обозначения высокого импеданса (также называемого третьим состоянием). Это значение используется при организации одновременной работы нескольких источников на одну и ту же шину. Более подробно применение данной константы описано в разделе 3.5.
Литералы x и z могут использоваться в двоичных, восьмеричных
ишестнадцатеричных числовых константах одновременно с другими допустимыми цифрами. При этом в зависимости от системы счисления литералы x и z занимают 1, 3 и 4 двоичных разряда, соответственно. Например, константа 8'h4x при переводе в двоичную форму примет вид 8'b0100xxxx, число 12'o4xz5 соответствует числу 12'b100xxxzzz101
ит.д. Если старший значащий разряд числа равен x или z, то все разряды, расположенные левее старшего, заполняются соответствующим литералом. Если старший значащий разряд равен 0 или 1, то число дополняется нулями, например:
16'bx010 = 16'bxxxxxxxxxxxxx010 12'hxF = 12'bxxxxxxxx1111 32'd136 = 32'b0000000010000100
Это позволяет довольно просто заполнить нулями, x или z целый вектор.
Отрицательные числа в языке Verilog образуются прибавлением унарного минуса перед числовой константой:
28 |
Verilog-HDL для моделирования и синтеза цифровых электронных схем |
-8'd15 -'hF000
Для двоичного представления отрицательные числа транслируются в дополнительный код [8, 14].
Кроме того, числовые константы могут содержать знак подчеркивания «_», который игнорируется при компиляции, однако позволяет облегчить читаемость программного кода:
32'b0010_1011_0000_1010_0100_1000_0000_0000
Для этой же цели служит вопросительный знак «?», который воспринимается компилятором как высокий импеданс (z).
28 |
Verilog-HDL для моделирования и синтеза цифровых электронных схем |
2.4. Строковые константы
Строки в Verilog представляют собой последовательности ASCIIсимволов, с двух сторон охваченные парными кавычками. Строки не могут включать знак переноса каретки (то есть занимать больше одной экранной строки). Например:
"Это корректная строковая константа"
"А это некорректная строковая константа в Verilog, потому что состоит из двух экранных строк"
