ПЛИС фирмы Altera: проектирование устройств обработки сигналов.
Стешенко В.Б.
Глава 5. Язык описания аппаратуры Verilog HDL
- 5.1: Общие сведения
- 5.2: Операторы
- 5.3: Числа в Verilog
- 5.4: Цепи в Verilog (Nets)
- 5.5: Регистры (Registers)
- 5.6: Векторы (Vectors)
- 5.7: Массивы (Arrays)
- 5.8: Регистровые файлы (Memories)
- 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 operators)
- 5.16: Операторы сдвига (Shift operators)
- 5.17: Конкатенация (объединение, Concatenation)
- 5.18: Повторение (Replication)
- 5.19: Системные директивы (System Tasks)
- 5.20: Проектирование комбинационных схем: пример проектирования мультиплексора 4 в 1
- 5.21: Модули проекта (Design Block Modules)
- 5.22: Порты (Ports)
- 5.23: Правила соединения (Connection Rules)
- 5.24: Базовые блоки (Basic Blocks)
- 5.25: Пример проектирования последовательностного устройства: двоичный счетчик
- 5.26: Временной контроль (Timing Control)
- 5.27: Защелкивание (Triggers)
- 5.28: Список сигналов возбуждения (Sensivity List)
- 5.29: Задержка распространения в вентиле (Gate Delays)
- 5.30: Операторы ветвления (Branch Statements)
- 5.31: Циклы (Looping Constructs)
- 5.32: Файлы в Verilog
- 5.33: Задание векторов входных сигналов для моделирования (Verilog Input Vectors)
- 5.34: Список операторов Verilog
- 5.35: Приоритет операторов
- 5.36: Ключевые слова (Keywords)
- 5.37: Директивы компилятора
- 5.38: Типы цепей (Net Types)
5.19. Системные директивы (System Tasks)
Наверное, этот раздел не будет интересен тем, кто пишет только синтезируемые описания на Verilog. Но поскольку язык является не только средством описания проекта, но и довольно мощным инструментом для поведенческого моделирования систем, то следует сказать несколько слов о встроенных директивах компилятора, позволяющих выполнить моделирование и произвести анализ его результатов.
5.19.1. Директивы вывода результатов моделирования (Writing to Standart 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
5.19.3. Окончание моделирования (Ending a simulation)
Ключевые слова: $stop, $finish.
Директива $finish завершает симуляцию и передает управление операционной системе. Директива. $stop приостанавливает моделирование и переводит систему с Verilog в интерактивный режим (см. пример ниже).
initial begin
clock = 1'b0;
#200 $stop
#500 $finish End