Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lek_Kratkie_svedenia_yazyka_Verilog.docx
Скачиваний:
47
Добавлен:
11.06.2015
Размер:
1.22 Mб
Скачать

34

Лекция: Краткие сведения о языке описания цифровых схем на языке Verilog

Примечание: Обратите внимание – не язык программирования Verilog,

а описание цифровых схем на языке Verilog.

Введение

Язык VERILOG был разработан в 1985 г. одной из корпораций США и позд­нее утвержден институтом электроинженеров США (IEEE) — стандарт IEEE 1364 в 1994 г. В отличие от VHDL, который строго типизирован и синтаксически напоминает языки ADA и PASCAL, VERILOG базируется на Си, имеет меньше встроенных возможностей саморасширения, но зато более прост в реализации (более простой и быстрый компилятор). VERILOG имеет более развитый интерфейс с языком Си и лаконичен, что по­зволяет уменьшить объем описаний схем примерно в полтора раза по сравнению с VHDL. В настоящее время принят вариант нового стандарта IEEE 1364—2001 (VERILOG-2001), который, в частности, включил в себя ряд стилистических средств, сближающих его с VHDL.

Лекция

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

Идентификаторы, ключевые слова записываются по одним и тем же правилам, поэтому они и объединены в данный параграф. Общие правила записи следующие:

  • идентификаторы не должны совпадать с ключевыми словами;

  • идентификаторы не могут начинаться с символов ($) или ( ‘- ап остроф);

  • идентификатор не может начинаться с цифры;

  • длина идентификатора по стандарту не ограничена, но может ограничиваться в конкретном компиляторе;

  • ключевые слова всегда пишутся строчными буквами !!!;

  • директивы компилятора начинаются с символа (‘ - апостроф);

  • компилятор различает строчные и прописные буквы.

X, z, Z и. щ

Идентификаторы

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

Идентификатор представляет собой последовательность из букв, цифр, символов доллара ($) и символов подчеркивания (_) с учётом изложенных выше правил.

из букв, цифр, символов

Числа

Числа или иначе константы могут определяться в следующих форматах:

- десятичном (d):

- шестнадцатеричном (h) :

- восьмеричном (o):

- двоичном (b).

Допускается вводить эти буквы (d, h, o, b) как прописными, так и строчными.

В языке Verilog предусмотрены две формы для записи чисел.

Первая форма представляет собой простое десятичное число, как последовательность цифр от 0 до 9 и может включать символы плюс или минус. Вторая форма представления чисел имеет следующий формат:

<size> _<base format> _<number> ,

где “_” пробел или символ табуляции.

Первое поле size содержит десятичные цифр и указывает разрядность константы в битах, это поле может опускаться, если разрядность константы заранее определена. Например, производится присвоение константного значения переменной, разрядность которой задана при ее объявлении. Если разрядность не определена, то разрядность принимается по умолчанию 32 (32 в большинстве систем синтеза, в некоторых разрядность по умолчанию может отличаться).

Второе поле base format содержит букву, определяющую формат представления числа (десятичный, двоичный, шестнадцатеричный ...). Эта буква предваряется символом одиночной кавычки (').

Последнее поле number содержит цифры допустимые для выбранного формата: от 0 до 9 для десятичного формата; от 0 до 7 для восьмеричного; 0 и 1 для двоичного; от 0 до 9 и буквы а, Ь, с, d, е, f для шестнадцатеричного. Буквенные обозначения могут вводиться как строчными, так и прописными буквами.

Числа со знаком записываются символами плюса (+) и минуса (-) перед полем size, Эти символы перед полем number недопустимы !!!. Например, запись -8’hC6 эквивалентна записи –(8’hC6), а запись 8’h-C6 вызовет синтаксическую ошибку.

Помимо указанных цифр в поле number могут присутствовать буквы x, X, z, Z и символ (?) (в поле size они недопустимы !!!). Буквы х и X обозначают неизвестное (неопределенное) состояние, т.е. состояние соответствующих битов неизвестно. Буквы z и Z обозначают состояние высокого импеданса – z-состояние или отсутствие источника (драйвера). Символ ? эквивалентен символу z и предназначен для лучшей читаемости кода в случае, когда это состояние безразлично (don't-care). Существует

возможность сокращать запись числа, например: 8’b1 будет эквивалентно записи 8’b11111111, но запись 8’b01 будет эквивалентна записи 8’b00000001. Поэтому такие сокращенные записи могут мешать читаемости кода и употреблять их без надобности

не следует.

Для улучшения читаемости допускается ещё два приёма: допускается вставлять пробелы и символы табуляции между полями записи, например, 8’hB6 можно записать как 8 ’h B6. Вставлять пробелы внутри поля number не допускается, но можно вставлять символ подчеркивания (_), для разбиения числа на некоторые группы. Примеры 83465 можно записать как 83_465; 8’b01100111 можно записать как 8’b0110_0111. Символ подчёркивания в поле size или перед полем number недопустим !!!.

  1. Краткие сведения о языке описания цифровых схем Verilog

Из вышесказанного следует, что Verilog - язык описания цифровых схем. Познакомимся с базовыми типами источников сигнала, используемыми в языке Verilog.

Начнем изучение языка Verilog с понятия сигнал (signal). Сигналы – это электрические импульсы, которые передаются по проводам (wire) между логическими элементами схемы. Провода переносят информацию, не производя над ней никаких вычислений. В цифровой схеме сигналы важны для передачи двоичных данных.

Базовый тип источника сигнала в языке Verilog – это провод - wire. Таким образом, если у вас есть арифметическое или логическое выражение, вы можете ассоциировать результат выражения с именованным проводом и позже использовать его в других выражениях. Например, декларации однобитного провода в Verilog:

wire a; //назначить проводу сигнал a

Можно назначить однобитному проводу a другой сигнал, например, сигнал b:

wire b; //назначить проводу сигнал b assign a = b; //подключение провода b к проводу a

Можно определить сигнал и сделать назначение ему одновременно в одном выражении:

wire a = b; //назначить сигналу a сигнал b

Могут быть провода, передающие несколько бит:

wire [3:0] c; //это четыре провода

Провода, передающие несколько бит информации называются “шина”, иногда “вектор”.  Назначения к шинам делаются так же:

wire [3:0] d; //назначить 4-х битной шине сигнал d assign c = d; //всегда подключение одной шины к другой –шины d к шине с

Количество проводов в шине определяется любыми двумя целыми числами, разделенными двоеточием внутри квадратных скобок.

wire [11:4] e; //восьмибитная шина e wire [0:255] f; //256-ти битная шина f

Из шины можно выбрать некоторые нужные биты и назначить другому проводу:

wire g; //назначить проводу сигнал g assign g = f[2];  //назначить сигналу g второй бит шины f

Кроме того, выбираемый из шины бит может определяться переменной:

wire [7:0] ; //восьми битная шина f wire i = f[k];  //назначить сигналу “i” бит номер “k” из шины “f”

Можно выбрать из сигнальной шины некоторый диапазон бит и назначить другой шине с тем же количеством бит:

wire [3:0] j = e[7:4];

Можно определить на языке Verilog массивы сигнальных шин:

wire [7:0] k [0:19];  //массив из двадцати 8-ми битных шин

Рассмотрим другой тип источника сигнала, называемый регистр: reg. Его используют при поведенческом (behavioral) описании схемы (поведенческое описание будет рассмотрено позже). Если регистру постоянно присваивается значение комбинаторной (логической) функции, то он ведет себя точно как провод (wire).  Если же регистру присваивается значение в синхронной логике, например, по фронту сигнала тактовой частоты, то ему будет соответствовать физический D-триггер или группа D-триггеров. Вспомним: D-триггер – это логический элемент способный запоминать один бит информации. В англоязычных статьях D-триггер называют flipflop. Регистры описывают на языке Verilog так же, как и провода:

reg [3:0] m; reg [0:100] n;

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

wire [1:0] p = m[2:1];

Помни: Ранее надо описать (задать) p и m как регистры

Можно определить массив регистров, которые обычно называют “память”  (RAM):

reg [7:0] q [0:15];  //память из 16 слов, каждое по 8 бит

Применяется еще один тип источника сигнала – это integer. Он похож на регистр reg, но всегда является 32х битным знаковым типом данных. Например, объявим:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]