Основы Verilog: краткий обзор
Весь поведенческий код пишется внутри module и endmodule. Любой цифровой дизайн, который вы хотите создать, пойдёт внутрь блока module. Порты могут быть определены или нет — позволяют сигналам входить как input или выходить как output.
Модуль
Пустой модуль в примере называется testbench. Имя может быть любым (алфавитно-цифровое, может содержать _).
module testbench; endmodule
Другой модуль с сигналами d, clk, rstb как входы и q как выход.
module dff (input d, clk, rstb, output q); endmodule
Типы данных
В Verilog два основных типа данных:
- reg
- wire
reg удерживает значения как переменная, wire — аналог электрического провода, требующий непрерывного управления. Обычно wire соединяет модули и другие сигналы.
module testbench; reg d; reg rst_b; reg clk; wire q; endmodule
Присваивания
Три базовых блока Verilog:
always @ (condition) | всегда выполняется, когда условие удовлетворено |
initial | выполняется один раз в начале симуляции |
assign LHS = RHS | LHS обновляется при изменении RHS |
Правила:
regприсваивается только вinitialиalwaysблокахwireприсваивается только черезassign- Множественные операторы в
initial/alwaysоборачиваются вbegin .. end
module testbench;
reg d; reg rst_b; reg clk; wire q;
initial begin d = 0; rst_b = 0; clk = 0; #100 $finish; end
always begin #10 clk = ~clk; end
endmodule
Обратите внимание:
- Множественные строки в
initial— нужныbegin/end - Сигналы
d, rst_b, clkприсваиваются вinitial, так как ониreg - Код в
initialвыполняется в 0ns (старт симуляции) - Без условия
alwaysработает как бесконечный цикл в C - # — задержка времени.
#10продвигает симуляцию на 10 единиц clk = ~clk;инвертирует такт, с#10— каждые 10 единиц$finishзавершает симуляцию (здесь через 100 единиц)
Verilog
- Освоение Verilog: полное руководство по проектированию цифровых схем
- Освоение конкатенации в Verilog: практическое руководство
- Понимание назначений в Verilog: типы, синтаксис и лучшие практики
- Блокирующие и неблокирующие назначения в Verilog: ключевые различия
- Мастерство функций в Verilog для эффективного RTL дизайна
- Понимание задач (Tasks) в Verilog: отличия от функций, синтаксис и применение
- Иерархические ссылки в Verilog: область видимости и избежание коллизий имен
- Генератор тактового сигнала в Verilog: проектирование и реализация
- Мастерство математических функций Verilog для эффективного аппаратного дизайна
- Мастерство $timeformat в Verilog: точность и контроль отображения времени