
- •Verilog Глава 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. Операторы отношения (RelationalOperators)
- •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. Временной контроль (TimingControl)
- •5.26.1. Задержки (Delay)
- •5.26.2. Событийный контроль (Event-Based control)
- •5.27. Защелкивание (Triggers)
- •5.30.2. Оператор выбора (case statement)
- •5.30.3. Оператор ветвления (conditionaloperator)
- •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.25.1. Поведенческая модель счетчика(Behavioural Model)
Предшествующее описание счетчика было осуществленно на уровне вентилей и триггеров, т.е. на структурном уровне. С другой стороны, при наличии достаточно мощных средств синтеза, поведенческое описание позволяют получить более наглядное описание проекта. Ниже приводится пример поведенческого описания (behavioural description) счетчика
// 4-bit binary up-counter - of period 13
module counter4_bit(q,d,increment,load_data,global_reset, clock);
output [3:0] q;
input [3:0] d;
input load_data, global_reset, clock, increment;
reg [3:0] q;
always @(posedge clock)
if (global_reset)
q = 4'b0000;
else if (load_data)
q = d;
else if (increment) begin
if (q == 12)
q = 0;
else
q = q + 1;
end
endmodule // counter4_bit
В отличие от описания на регистровом уровне различие в первых строках только одно – выход q объявлен как регистр
Данная модель позволяет путем проведения небольших модификаций получить описание другого типа счетчика - счетчика в обратном направлении (down counter), Ниже приведен пример такого описания
// 4-bit binary down-counter - of period 13
module counter4_bit(q,d,decrement,load_data,global_reset, clock);
always @(posedge clock)
if (global_reset)
q = 12;
else if (load_data)
q = d;
else if (decrement)
begin
if (q == 0)
q = 12;
else
q = q - 1;
end
endmodule
Далее рассмотрим реверсивный счетчик (счетчик с переменным направлением счета, Up-Down counter) с периодом 16.
// 4-bit binary up-down-counter - of period 16
module counter4_bit(q,d,updown,count,load_data,global_reset,clock);
always @(posedge clock)
if (reset)
q = 0;
else if (load_data)
q = d;
else if (count)
begin
if (updown)
q = q + 1;
else
q = q - 1;
end
endmodule
5.26. Временной контроль (TimingControl)
В языке Verilog существуют три варианта осуществления временного контроля (timing control) - использование задержек (delay), событий (event) и уровни чувствительности (level sensitive) Рассмотрим их подробнее.
5.26.1. Задержки (Delay)
Синтаксис:
timing_control_statement::== delay_based statement*
delay_based::== # delay_value
В данном методе вводится задержка между поступлением переменной на вход блока и результатом.
initial begin
a = 0; // выполняется в момент t= 0
#10 b = 2; // выполняется в момент t= 10
#15 c = a; // выполняется в момент t= 25
#b c = 4; // выполняется в момент t= 27
b=5; // выполняется в момент t= 27
end
Величина задержки может быть определена как постоянная или переменная. Следует помнить, что системное время измеряется в тех единицах, которые установлены в системе. Ниже приводится пример формирования тактового сигнала (creation of a clock signal).
initial begin
clock = 1'b0;
forever #5 clock = ~clock;
end
В данном примере каждые 5 единиц времени сигнал переходит из высокого уровня в низкий и наоборот.