Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Introduction_to_Hardware_Design.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
423.94 Кб
Скачать

Модули, пример “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).

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