Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Сраный верилог

.pdf
Скачиваний:
52
Добавлен:
01.04.2022
Размер:
4.18 Mб
Скачать

- 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, потому что состоит из двух экранных строк"

28

Verilog-HDL для моделирования и синтеза цифровых электронных схем

2.5. Идентификаторы и ключевые слова

Идентификаторы, как и в любом другом языке программирования, позволяют обозначать объекты уникальными именами и ссылаться на них в других частях программы. Идентификаторы могут состоять из латинских букв верхнего и нижнего регистра, цифр, а также знаков подчеркивания «_» и знака доллара «$». Любой идентификатор обязательно должен начинаться с буквы или знака подчеркивания, так как идентификаторы, начинающиеся с цифры, рассматриваются компилятором как числовые константы, а идентификаторы, начинающиеся со знака $, зарезервированы для системных целей.

Учебное§ 2. Элементыпособиеязыка Verilog

29

Язык Verilog, в отличие от многих других языков, чувствителен к регистру литералов, поэтому, например, идентификаторы Data и DATA являются различными.

Ряд идентификаторов, использующихся для построения языковых конструкций, зарезервирован компилятором. Такие идентификаторы называются ключевыми словами. Их полный список приведен ниже:

always

highz1

rtran

and

if

rtranif0

assign

initial

rtranif1

begin

inout

scalared

buf

input

small

bufif0

integer

specify

bufif1

join

specparam

case

large

strong0

casex

macromodule

strong1

casez

mediummodule

supply0

cmos

nand

supply1

deassign

negedge

table

default

nmos

task

defparam

nor

time

disable

not

tran

edge

notif0

tranif0

else

notif1

tranif1

end

or

tri

endcase

output

tri0

endfunction

pmos

tri1

endmodule

posedge

triand

endprimitive

primitive

trior

endspecify

pull0

vectored

endtable

pull1

wait

endtask

pulldown

wand

event

pullup

weak0

for

rcmos

weak1

force

reg

while

forever

release

wire

fork

repeat

wor

function

rnmos

xnor

highz0

rpmos

xor