- •Глава 5. Язык описания аппаратуры Verilog hdl
- •5.1.Общие сведения
- •5.2. Операторы
- •5.3. Числа в Verilog.
- •5.3.1. Целые числа (Integers)
- •5.3.2. Неопределенное и высокоимпедансное состояния (X and z values)
- •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 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.23. Правила соединения (Connection Rules)
- •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.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.33. Задание векторов входных сигналов для моделирования (Verilog Input Vectors)
Для задания входных векторов для моделирования системы требуется весьма ограниченное подмножество языка Verilog. Рассмотрим простой пример
initial
begin
clk = 1'b0;
globalReset = 1'b1;
in = 1'b1;
end
Выражение 1'b0 предсавляет собой двоичное представление 0.
Существуют две основных части :
initial
begin
-----
end
always
begin
-----
end
Блок initial начинает выполняться с началом моделирования (simulation), поэтому в нем инициализируются сигналы и определяется последовательность их изменений
Тактовый сигнал существует в течении всего времени моделирования. Задержка между моментами смены сигналов (событиями, events) определяется с помощюь знака # . Например
#160 globalReset = 0;
#160 in = 0;
#160 in = 1;
#320 in = 0;
В приведенном примере после 160 единиц времени ожидания сигнал globalReset устанавливается в 0, затем 160 единиц ожидания и установка сигнала in в 0 и т.д.
Наиболее часто конструкция always используется для задания тактового сигнала. Например:
always
begin
#10 clk = ~clk;
end
Здесь сигнал clk должен быть проинвертирован каждые 10 единиц измерения времени, что по сути означает, что период тактового сигнала - 20 единиц измерения времени (time units).
Кроме того, в процессе моделирования неплохо использовать цикл repeat для задания заданного числа повторений
repeat(10)
begin
#40 in = 0;
#20 in = 1;
end
Для генерации случайных чисел в диапазоне [0, n-1] используется следующая команда
{$random} % n
Комбинируя эти команды создадим генератор пачек из 14 случайных чисел каждые 20 единиц времени (time units)
repeat(14)
begin
#20 in = {$random} / 16 % 2;
end
5.34. Список операторов Verilog
Дабы обобщить рассмотренные ранее ключевые моменты работы с языком, приведем список его операторов.
-
Тип оператора
Символ
Операция
Число операндов
Арифметические
(Arithmetic)
*
/
+
-
%
умножение
деление
сумма
разнось
остаток
2
2
2
2
2
Логические (Logical)
!
&&
||
не
и
или
1
2
2
Отношения (Relational)
>
<
>=
<=
greater than
less than
greater or equal
less or equal
2
2
2
2
Эквивалентности (Equality)
=
!
=
!
=
=
equality
inequality
case equality
case inequality
2
2
2
2
Поразрядные
(Bitwise)
~
&
|
^
^~or~^
bitwise negation
bitwise and
bitwise or
bitwise xor
bitwise xnor
1
2
2
2
2
Приведение
(Reduction)
&
~&
|
~|
^
^~or^~
reduction and
reduction nand
reduction or
reduction nor
reduction xor
reduction xnor
1
1
1
1
1
1
Сдвиг (Shift)
>>
<<
Правый сдвиг
Левый сдвиг
2
2
Конкатенация (Concatenation)
объединение
любое
Репликация (Replication)
повторение
любое
Условный (Conditional)
?:
условный
3