Генерация тактового сигнала
Часть раздела Основы путешествия по Verilog на Coddy. Урок 71 из 90.
Тактовый сигнал — это сигнал, который регулярно переключается между 0 и 1. Тактовые сигналы необходимы для последовательной логики, например для триггеров и счётчиков.
Зачем генерировать тактовый сигнал
В тестовых стендах для проверки последовательностных схем нужен тактовый сигнал. Он управляет работой триггеров, регистров и конечных автоматов.
Способы создания тактового сигнала
| Способ | Описание |
|---|---|
always с задержкой # | Самый распространённый способ |
Цикл forever | Альтернативный способ |
Цикл repeat | Для фиксированного числа циклов |
Способ 1: Блок always с задержкой
reg clk;
initial begin
clk = 0;
end
always #5 clk = ~clk;clk = 0в момент времени 0- Каждые 5 единиц времени
clkпереключается
- Период = 10 единиц времени
- Частота = 1/10 = 0.1 на единицу времени
Способ 2: бесконечный цикл
reg clk;
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
endТот же результат, что и при использовании метода always.
Метод 3: Повторение в течение заданного числа циклов
reg clk;
initial begin
clk = 0;
repeat (10) begin
#5 clk = ~clk;
end
endГенерирует ровно 10 фронтов тактового сигнала (5 полных циклов), затем останавливается.
Задание
Добавьте недостающий код, чтобы создать тактовый сигнал, который переключается каждые 4 единицы времени (период = 8 единиц времени).
Что нужно сделать:
- Инициализируйте
clkзначением 0 в момент времени 0 с помощью блокаinitial - Используйте блок
alwaysс задержкой, чтобы переключатьclkкаждые 4 единицы времени
Попробуйте сами
module clock_challenge;
reg clk;
// TODO: Шаг 1 — добавьте блок initial, чтобы установить clk = 0
// TODO: Шаг 2 — добавьте блок always, чтобы переключать clk каждые 4 единицы времени
initial begin
$monitor("Time %0t: clk = %b", $time, clk);
#20;
$display("Clock generated for 20 time units");
$finish;
end
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogАппаратное и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Операторы. Часть 1
Арифметические операторыОператор взятия остаткаОператоры сравненияПовторение — простая математикаПобитовые операторы7Присваивание и логические элементы
Непрерывное присваиваниеПрисваивание с операторамиВстроенные примитивы логических элементовЭлементы И, ИЛИ и НЕЭлементы XOR и XNORПовторение — схема на логических элементах10Принятие решений
Оператор ifif—elseПовторение — простой компараторОператор casecaseх и casezПовторение — проектирование ALU13Синхронизация и задержки
Что такое задержкиЗадержки вентилейЗадержки присваиванияДиректива timescaleГенерация тактового сигналаПовторение — управление временем5Операторы, часть 2
Логические операторыОператоры свёрткиОператоры сдвигаОператор конкатенацииУсловный операторПовторение — задание на операторы11Циклы
Цикл forЦикл whileЦикл повторенияБесконечный циклОператор отключенияПовторение — шаблоны циклов3Система счисления
Двоичное представлениеЧисла заданной разрядностиЧисла без указания разрядностиОтрицательные числаСпециальные значения X и ZПовторение — форматы чисел6Модули
Структура модуляВходные и выходные портыДвунаправленные портыСоздание экземпляра модуляПодключение портов по имениПодключение портов по порядкуПовторение — создание модуля9Процедурные блоки
Блок AlwaysБлок InitialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеПовторение: Always и InitialПотренируйтесь самостоятельно: Онлайн-компилятор Verilog