- •Глава 5. Язык описания аппаратуры Verilog hdl
- •5.1.Общие сведения
- •5.2. Операторы
- •5.3. Числа в Verilog.
- •5.3.1. Целые числа (Integers)
- •5.3.2. Неопределенное и высокоимпедансное состояния (X and z values)
- •5.8. Регистровые файлы (Memories)
- •5.5. Регистры (Registers)
- •5.6. Векторы (Vectors)
- •5.7. Массивы (Arrays)
- •5.9. Элементы с третьим состоянием (Tri-state)
- •5.10. Арифметические операторы (Arithmetic operators)
- •5.11. Логические операторы (Logical Operators)
- •5.12. Операторы отношения (Relational Operators)
- •5.13. Операторы эквивалентности (Equality )
- •5.14. Поразрядные Операторы (Bitwise Operators)
- •5.15. Операторы приведения (Reduction Operator)
- •5.16. Операторы сдвига (Shift Operator).
- •5.17. Конкатенация (объединение,Concatenation )
- •5.18. Повторение (Replication)
- •5.19. Системные директивы (System Tasks)
- •5.19.1. Директивы вывода результатов моделирования (Writing to Standard Output)
- •5.19.2. Контроль процесса моделирования (Monitoring a Simulation).
- •5.19.3. Окончание моделирования (Ending a simulation)
- •5.20. Проектирование комбинационных схем: пример проектирования мультиплексора 4 в 1.
- •5.20.1. Реализация на уровне логических вентилей (Gate Level Implementation)
- •5.20.2. Реализация мультиплексора с помощью логических операторов (Logic Statement Implementation)
- •5.20.3. Реализация с помощью оператора выбора (Case Statement Implementation)
- •5.20.4. Реализация с использованием условного оператора (Conditional Operator Implementation)
- •5.20.5. Тестовый модуль (The Stimulus Module)
- •5.21. Модули проекта (Design Blocks Modules)
- •5.21.1. Тестирование
- •5.22. Порты (Ports)
- •5.24.Базовые блоки (Basic Blocks)
- •5.24.1. Инициализация (Initial Block)
- •5.24.2. Конструкция always (Always Block)
- •5.25. Пример проектирования последовательностного устройства: двоичный счетчик
- •5.25.1. Поведенческая модель счетчика(Behavioural Model)
- •5.26. Временной контроль (Timing Control)
- •5.26.1. Задержки (Delay)
- •5.26.2. Событийный контроль (Event-Based control)
- •5.27. Защелкивание (Triggers)
- •5.28. Список сигналов возбуждения (Sensitivity List)
- •5.29. Задержка распространения в вентиле (Gate Delays)
- •5.30. Операторы ветвления (Branch Statements)
- •5.30.1. Оператор if (if statement)
- •5.30.2. Оператор выбора (case statement)
- •5.30.3. Оператор ветвления (conditional operator)
- •5.31. Циклы (Looping Constructs)
- •5.31.1. Цикл While (While Loop )
- •5.31.2. Цикл For (For Loop)
- •5.31.3. Цикл Repeat (Repeat Loop)
- •5.31.4. Вечный цикл (Forever Loop)
- •5.32.Файлы в Verilog
- •5.32.1. Открытие файла (Opening a file)
- •5.32.2. Запись в файл (Writing to a file)
- •5.32.3. Закрытие файла (Closing a file)
- •5.32.4. Инициализация регистровых файлов (памяти) (Initialising Memories )
- •5.33. Задание векторов входных сигналов для моделирования (Verilog Input Vectors)
- •5.34. Список операторов Verilog
- •5.35. Приоритет операторов
- •5.36. Ключевые слова (Keywords )
- •5.37. Директивы компилятора
- •5.38. Типы цепей (Net Types)
5.19.1. Директивы вывода результатов моделирования (Writing to Standard Output)
Ключевые слова: $display, $displayb, $displayh, $displayo, $write, $writeb, $writeh, $writeo.
Наиболее часто применяется директива $display. Она может быть использована для вывода на экран строк, выражений или переменных. Ниже приведен пример использования директивы $display
$display("Hello Dr Blair");
--- output: Hello Dr Blair
$display($time) // current simulation time.
--- output: 460
counter = 4'b10;
$display(" The count is %b", counter);
--- output: The count is 0010
Синтакс определения формата вывода аналогичен синтаксису printf в языке программирования C. Ниже приведено его описание для директивы $display
-
Формат
Описание
%d or %D
%b or %B
%h or %H
%o or %O
%m or %M
%t or %T
%e or %E
%f or %F
%g or %G
Decimal
Binary
Hexadecimal
Octal
Hierarchical name
Time format
Real in scientific format
Real in decimal formal
Real in shorter of above two
Для специальных символов используются следующие эскейп-последовательности (escape sequence)
-
\n
\t
\\
\"
%%
Новая строка
табуляция
\
"
%
Директива $write идентична директиве $display, за исключением того, что она не осуществляет автоматический переход на новую строку в конце вывода информации
Если спецификация вывода не определена, то по умолчанию используются следующие форматы
-
Директива
Формат по умолчанию
$display
$displayb
$displayh
$displayo
$write
$writeb
$writeh
$writeo
decimal
binary
hexadecimal
octal
decimal
binary
hexadecimal
octal
Так, например, следующий фрагмент кода …
$write(5'b01101);
$writeb(" ", 5'b01101);
$writeh(" ", 5'b01101);
$writeo(" ", 5'b01101,"\n");
… И результат его работы
01101 0d 15
5.19.2. Контроль процесса моделирования (Monitoring a Simulation).
Ключевые слова: $monitor, $monitoron, $monitoroff
Формат директивы $monitor практически аналогичен формату $display. Разница заключается в том, что выход формируется при любом изменении переменных, которое произойдет в оперделенное время. Наблюдение может быть включено или отключено с помощью директив $monitoron или $monitoroff соответственно. По умолчанию в начале моделирования наблюдение за его ходом включено. Ниже приведен пример наюлюдения за моделированием.
module myTest;
integer a,b;
initial begin
a = 2;
b = 4;
forever begin
#5 a = a + b;
#5 b = a - 1;
end // forever begin
end // initial begin
initial #40 $finish;
initial begin
$monitor($time, " a = %d, b = %d", a, b);
end // initial begin
endmodule // myTest
Результат прогона
0 a = 2, b = 4
5 a = 6, b = 4
10 a = 6, b = 5
15 a = 11, b = 5
20 a = 11, b = 10
25 a = 21, b = 10
30 a = 21, b = 20
35 a = 41, b = 20
