- •Глава 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.22. Порты (Ports)
Порты обеспечивают связь модуля с другими модулями проекта. Ниже приведен порты для нашего примера
module d_ff(q, d, reset, clock);
module e_ff(q, d, enable, reset, clock);
module Stimulus;
Каждый порт может быть объявлен как вход (input), выход (output) или двунаправлекнный (inout). Все объявленные порты по умолчанию назначаются цепи (wire), для изменения типа сигнала необходимо выполнить назначение отдельно. Например
module d_ff(q, d, reset, clock);
output q; // обязательное объявление портов
input d, reset, clock; // как входы и выходы
reg q; // снова объявляем как регистр
Не забываем, что выходы модуля идут первыми в списке портов.
5.23. Правила соединения (Connection Rules)
Выше мы рассматривали два типа модулей - внешние и внутренние (outer and inner), в нашем примере внешним модулем был Е-триггер, внутренним – триггер типа D. Ниже рассмотрим основные правила соединения модулей.
5.23. 1. Входы (Inputs)
Входы внутреннего модуля всегда должны имет тип цепь, поскольку они управляются внешними сигналами. Входы внешнего модуля могут иметь тип как цепь, так и регистр.
5.23.2. Выходы (Outputs)
Во внутреннем модуле выходы могут иметь тип как цепь, так и регистр, в то время как выходы внешнего модуля дожны быть типа цепь, поскольку управляются внутренними модулями.
5.23.3. Двунаправленые выводы (Inouts)
Двунаправленный порт всегда имеет тип цепь.
5.23.4. Соответствие портов (Port Matching)
Очевидно, обращаясь к модулю, необходимо, чтобы совпадала разрядность портов.
5.23.5. Присоединение портов (Connecting Ports)
Присоединение портов осуществляется либо по порядку (ordered list) или по имени порта (or by name). Например
module d_ff( q, d, reset, clock);
...
endmodule
module e_ff(q, d , enable, reset, clock);
output q;
input d, enable, reset, clock;
wire inD;
...
d_ff dff0(q, inD, reset, clock);
...
endmodule
5.24.Базовые блоки (Basic Blocks)
В Verilog приняты два типа назначений – непрерывное и процедурное. Непрерывное назначение может быть выполнено для цепей nets или для их объединений (concatenation of nets). Операнды могут иметь произвольный тип данных.
Процедурное назначение может быть выполнено для данных типов reg, integer, real или time.
5.24.1. Инициализация (Initial Block)
Ключевые слова: initial
Блок инициализации состоит из группы операторов, заключенных в операторные скобки begin... end и которые будут выполняться с момента старта моделирования. Ниже приведен пример инициализации моделирования
initial
clock = 1'b0;
initial
begin
alpha = 0;
#10 alpha = 1; // генерация сигнала
#20 alpha = 0;
#5 alpha = 1;
#7 alpha = 0;
#10 alpha = 1;
#20 alpha = 0;
end;
