Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Verilog

Een Verilog T Flip-Flop Ontwerpen: RTL Implementatie & Testbench

De T flip-flop is een fundamenteel bouwsteen in digitale ontwerpen, die zijn uitgang omkeert wanneer de T-ingang hoog is en de huidige staat behoudt wanneer T laag is. Dit artikel presenteert een schone, synthetiseerbare RTL-implementatie en een uitgebreide testbench voor verificatie.

Ontwerp

module tff (
    input  wire       clk,
    input  wire       rstn,
    input  wire       t,
    output reg        q
);

always @(posedge clk) begin
    if (!rstn)
        q <= 1'b0;
    else if (t)
        q <= ~q;
    else
        q <= q;
end

endmodule

Belangrijke ontwerpkeuzes:

  • Actief-lage asynchrone reset (rstn): Zorgt voor deterministische initialisatie.
  • Enkel positieve klokflank: Standaard voor synthetiseerbare sequentiële logica.
  • Non-blocking toewijzingen (<=): Voorkomt race conditions in simulatie.
  • Impliciete staatbehoud: De else q <= q; regel is optioneel maar verbetert leesbaarheid.

Testbench

module tb;
    reg         clk;
    reg         rstn;
    reg         t;
    wire        q;

    tff u0 (
        .clk  (clk),
        .rstn (rstn),
        .t    (t),
        .q    (q)
    );

    always #5 clk = ~clk;

    initial begin
        {rstn, clk, t} = 3'b000;
        $monitor("T=%0t rstn=%0b t=%0d q=%0d", $time, rstn, t, q);
        repeat(2) @(posedge clk);
        rstn = 1'b1;
        for (integer i = 0; i < 20; i = i + 1) begin
            reg [4:0] dly;
            dly = $random;
            #(dly) t = $random;
        end
        #20 $finish;
    end
endmodule

Simulatie Resultaten

ncsim> run
T=0  rstn=0 t=0 q=x
T=5  rstn=0 t=0 q=0
T=15 rstn=1 t=0 q=0
T=19 rstn=1 t=1 q=0
T=25 rstn=1 t=1 q=1
T=35 rstn=1 t=1 q=0
T=43 rstn=1 t=0 q=0
T=47 rstn=1 t=1 q=0
T=55 rstn=1 t=0 q=1
T=59 rstn=1 t=1 q=1
T=65 rstn=1 t=1 q=0
T=67 rstn=1 t=0 q=0
T=71 rstn=1 t=1 q=0
T=75 rstn=1 t=0 q=1
T=79 rstn=1 t=1 q=1
T=83 rstn=1 t=0 q=1
T=87 rstn=1 t=1 q=1
T=95 rstn=1 t=0 q=0
Simulation complete via $finish(1) at time 115 NS + 0

Analyse

De simulatie bevestigt correct gedrag:

  1. Reset fase (0-15ns): Uitgang q initialiseert op 0 tijdens actieve lage reset.
  2. T=0 (15-19ns): Uitgang blijft 0 – staat behouden.
  3. T=1 (19ns+): Elke positieve klokflank met T=1 keert de uitgang om, zoals verwacht voor een T flip-flop.
  4. Willekeurige stimulus: De testbench oefent zowel toggle- als hold-modus uit met variabele timing, wat robuustheid verifieert.

Uitbreidingstips

  • Voeg een enable signaal toe voor klok-gating scenario's.
  • Implementeer synchrone reset voor FPGA-doelarchitecturen die asynchrone reset niet native ondersteunen.
  • Parameteriseer voor multi-bit toggle registers.

Deze implementatie fungeert als betrouwbare referentie voor ASIC/FPGA ontwerpen waar state-toggling functionaliteit vereist is.

Verilog

  1. Verilog beheersen: Complete tutorial voor digitale schakelingontwerp
  2. Verilog concatenatie beheersen: Een praktische gids
  3. Verilog-toewijzingen begrijpen: types, syntax en best practices
  4. Verilog Blocking vs. Non-Blocking: belangrijkste verschillen uitgelegd
  5. Verilog-functies beheersen voor efficiënt RTL-ontwerp
  6. Verilog Tasks begrijpen: Functions vs Tasks, Syntax en Gebruik
  7. Verilog Clock Generator: Ontwerp & Implementatie Gids
  8. Verilog Math Functions beheersen voor efficiënt Hardware-ontwerp
  9. Verilog $timeformat beheersen: Precisie en Weergave-controle
  10. Verilog Timescales begrijpen en printen in elke Scope
  11. Verilog File I/O onder de knie: Openen, Lezen, Schrijven en Sluiten