
- •Введение в логическое проектирование аппаратуры Аннотация к курсу
- •Лекция 1 «Схемы без памяти» Введение
- •Схемы из функциональных элементов
- •Представление схем на языке Verilog Общая информация о языке
- •Модули, пример “Hello World”
- •Синтезируемое подмножество языка
- •Логические значения и операции над ними
- •Многоразрядные константы
- •Непрерывное присваивание
- •Операции над битовыми массивами
- •Инстанцирование модулей
- •Лекция 2 «Схемы с памятью» Введение
- •Абстрактный автомат
- •Структурный автомат
- •Триггеры
- •Описание схем с памятью на языке Verilog
- •Моделирование памяти
- •Процедурное присваивание
- •Always-блоки
- •Управляющие конструкции
- •Лекция 3 «Примеры проектирования на языке Verilog»
- •Лекция 4 «Дискретно-событийное моделирование» Введение
- •Дискретно-событийное моделирование аппаратуры Основные понятия
- •Цикл работы симулятора
- •Дельта-задержка
- •Занятие 5: Контрольная работа
Модули, пример “Hello World”
Основной сущностью языка Verilog является модуль. Модуль описывает часть схемы, решающую некоторую задачу. У модуля есть интерфейс (входные и выходные сигналы) и реализация (способ вычисления значений выходных сигналов по значениям входных сигналов). Ниже приведено описание интерфейса модуля mux4_1 (мультиплексора 4-в-1).
// начало определения модуля (имя и список интерфейсных сигналов)
module mux4_1(out, in0, in1, in2, in3, sel);
output out; // одноразрядный выход
input in0, in1, in2, in3; // одноразрядные входы
input [1:0] sel; // двухразрядный вход
...
// конец определения модуля
endmodule /* mux4_1 */
Как правило, каждый модуль определяется в отдельном файле, имя которого совпадает с именем модуля. В качестве расширения имени файла обычно используется *.v или *.vl. Приведенный выше модуль логично определить в файле mux4_1.v.
Рассмотрим пример простейшего модуля на языке Verilog, осуществляющего вывод на экран строки “Hello World”.
// модуль верхнего уровня не имеет интерфейсных сигналов
// (список в скобках можно опустить)
module hello_world;
initial begin // начало блока инициализации
$display(“Hello World”); // вывод строки на печать
end // конец блока инициализации
// блоков инициализации может быть несколько
// конец определения модуля
endmodule /* hello_world */
Синтезируемое подмножество языка
Подмножество языка Verilog, состоящее из конструкций, допускающих представление в форме элементарных логических вентилей и триггеров, называется синтезируемым подмножеством. Очевидно, что конструкция $display() не является синтезируемой.
Логические значения и операции над ними
В языке Verilog используется 4-значная логика. Возможны следующие логические значения:
0 – логический нуль;
1 – логическая единица;
X – неопределенное значение;
Z – высокий импеданс.
Логические значения {0,1,X} вместе с операциями над ними образуют сильную трехзначную логику Клини (0 & X = X & 0 = 0; 1 & X = X & 1 = X).
Использование логического значения Z в выражении приводит к такому же результату, что и при использовании значения X (например, 1 & Z = X). Другими словами, Z — это частный, но особо выделенный случай неопределенного значения.
Над логическими значениями определены следующие операции:
& — И;
| — ИЛИ;
^ — исключающее ИЛИ;
~ — НЕ;
~& — НЕ-И (только в редуцированной форме: ~&v, v — вектор);
~| — НЕ-ИЛИ (только в редуцированной форме: ~|v, v — вектор);
~^ — исключающее НЕ-ИЛИ.
Сравнение ==, != (X если хотя бы один из операндов X или Z), ===, !==.
Следует заметить, что данные операции можно применять и для многоразрядных сигналов (в этом случае операция осуществляется поразрядно).
При моделировании на уровне логических вентилей можно использовать соответствующие модули: buf(out, in), not (для buf и not можно задавать несколько выходов, вход должен быть один), and(out, in1, in2), or, xor, nor, nand, xnor (можно задавать более двух входов).
Многоразрядные константы
В языке Verilog используется следующий формат многоразрядных (числовых) констант: разрядность’система_счислениязначение. В значении для наглядности можно использовать незначащий символ _. Примеры констант приведены ниже.
4’b1001
64’h0
16’b1010_0101_1111_0000
16’hDEAD
Задание. Чему равно значение выражения:
2’bZX^2’bZX (2’bXX);
4’b01XZ&4’bXZX1 (4’b0XXX).