Параметризованный Mod-N счётчик на Verilog: модуль и тестбенч
Проект
module modN_ctr #(
parameter N = 10,
parameter WIDTH = 4
)(
input clk, rstn,
output reg [WIDTH-1:0] out
);
always @(posedge clk) begin
if (!rstn) out <= 0;
else if (out == N-1) out <= 0;
else out <= out + 1;
end
endmodule
Тестбенч
module tb;
parameter N = 10, WIDTH = 4;
reg clk, rstn;
wire [WIDTH-1:0] out;
modN_ctr u0 (.clk(clk), .rstn(rstn), .out(out));
always #10 clk = ~clk;
initial begin
{clk, rstn} <= 0;
$monitor("T=%0t rstn=%0b out=0x%0h", $time, rstn, out);
repeat(2) @(posedge clk);
rstn <= 1;
repeat(20) @(posedge clk);
$finish;
end
endmodule
Результат симуляции
T=0 rstn=0 out=0xx T=10 rstn=0 out=0x0 T=30 rstn=1 out=0x0 T=50 rstn=1 out=0x1 T=70 rstn=1 out=0x2 T=90 rstn=1 out=0x3 T=110 rstn=1 out=0x4 T=130 rstn=1 out=0x5 T=150 rstn=1 out=0x6 T=170 rstn=1 out=0x7 T=190 rstn=1 out=0x8 T=210 rstn=1 out=0x9 T=230 rstn=1 out=0xa T=250 rstn=1 out=0x0 // переполнение при N=10 T=270 rstn=1 out=0x1 ... Simulation complete via $finish(1) at time 430 NS
Verilog
- Освоение Verilog: полное руководство по проектированию цифровых схем
- Освоение конкатенации в Verilog: практическое руководство
- Понимание назначений в Verilog: типы, синтаксис и лучшие практики
- Блокирующие и неблокирующие назначения в Verilog: ключевые различия
- Мастерство функций в Verilog для эффективного RTL дизайна
- Понимание задач (Tasks) в Verilog: отличия от функций, синтаксис и применение
- Генератор тактового сигнала в Verilog: проектирование и реализация
- Мастерство математических функций Verilog для эффективного аппаратного дизайна
- Мастерство $timeformat в Verilog: точность и контроль отображения времени
- T-триггер на Verilog: RTL-реализация и тестбенч