Verilog Asynchrone Ripple Teller: Ontwerp & Implementatie
Een ripple teller is een asynchrone teller waarbij alle flip-flops behalve de eerste geclockt worden door de output van de voorgaande flip-flop.
Ripple teller blokdiagram
Ontwerp
module dff (
input d,
input clk,
input rstn,
output reg q,
output qn
);
always @ (posedge clk or negedge rstn)
if (!rstn) q <= 0;
else q <= d;
assign qn = ~q;
endmodule
module ripple (
input clk,
input rstn,
output [3:0] out
);
wire q0, qn0, q1, qn1, q2, qn2, q3, qn3;
dff dff0 ( .d (qn0), .clk (clk), .rstn (rstn), .q (q0), .qn (qn0) );
dff dff1 ( .d (qn1), .clk (q0), .rstn (rstn), .q (q1), .qn (qn1) );
dff dff2 ( .d (qn2), .clk (q1), .rstn (rstn), .q (q2), .qn (qn2) );
dff dff3 ( .d (qn3), .clk (q2), .rstn (rstn), .q (q3), .qn (qn3) );
assign out = {qn3, qn2, qn1, qn0};
endmodule
Hardware Schema
Gesynthetiseerd schema van de ripple teller
Testbench
module tb_ripple;
reg clk;
reg rstn;
wire [3:0] out;
ripple r0 ( .clk (clk), .rstn (rstn), .out (out) );
always #5 clk = ~clk;
initial begin
rstn <= 0; clk <= 0;
repeat (4) @ (posedge clk);
rstn <= 1;
repeat (25) @ (posedge clk);
$finish;
end
endmodule
Verilog
- Verilog beheersen: Complete tutorial voor digitale schakelingontwerp
- Verilog concatenatie beheersen: Een praktische gids
- Verilog-toewijzingen begrijpen: types, syntax en best practices
- Verilog Blocking vs. Non-Blocking: belangrijkste verschillen uitgelegd
- Verilog-functies beheersen voor efficiënt RTL-ontwerp
- Verilog Tasks begrijpen: Functions vs Tasks, Syntax en Gebruik
- Verilog Clock Generator: Ontwerp & Implementatie Gids
- Verilog Math Functions beheersen voor efficiënt Hardware-ontwerp
- Verilog $timeformat beheersen: Precisie en Weergave-controle
- Verilog Mod-N Teller Ontwerp: Geparametriseerde Module & Testbench
- Verilog Gray-code Teller Module – 4-bit Gray Code Generator