Divizor cu 16: Diferență între versiuni

De la YO3ITI
Sari la navigare Sari la căutare
Fără descriere a modificării
Fără descriere a modificării
Linia 11: Linia 11:
   output reg clk_div8,
   output reg clk_div8,
   output reg clk_div16
   output reg clk_div16
);
);
   always @(posedge clk).  // la fiecare front pozitiv de tact...
 
     clk_div2 <= ~clk_div2; // semnalul clk_div2 trece în low la fiecare al doilea tact = divizare cu 2
  // Initialize on reset
   always @(posedge clk or posedge reset) begin
    if (reset)
      clk_div2 <= 1'b0;
     else
      clk_div2 <= ~clk_div2;
  end


   always @(posedge clk_div2) // etc, pe baza logicii de mai sus
   always @(posedge clk_div2 or posedge reset) begin
     clk_div4 <= ~clk_div4;
     if (reset)
      clk_div4 <= 1'b0;
    else
      clk_div4 <= ~clk_div4;
  end


   always @(posedge clk_div4)
   always @(posedge clk_div4 or posedge reset) begin
     clk_div8 <= ~clk_div8;
     if (reset)
      clk_div8 <= 1'b0;
    else
      clk_div8 <= ~clk_div8;
  end


   always @(posedge clk_div8)
   always @(posedge clk_div8 or posedge reset) begin
     clk_div16 <= ~clk_div16;
     if (reset)
      clk_div16 <= 1'b0;
    else
      clk_div16 <= ~clk_div16;
  end


endmodule
endmodule

Versiunea de la data 9 februarie 2026 22:32

/*
Un exemplu de divizor cu 16 care folosește metoda flip-flop-urilor în cascadă
*/

module clock_divider(
  input clk,
  input reset,
  output reg clk_div2,
  output reg clk_div4,
  output reg clk_div8,
  output reg clk_div16
);
  
  // Initialize on reset
  always @(posedge clk or posedge reset) begin
    if (reset)
      clk_div2 <= 1'b0;
    else
      clk_div2 <= ~clk_div2;
  end

  always @(posedge clk_div2 or posedge reset) begin
    if (reset)
      clk_div4 <= 1'b0;
    else
      clk_div4 <= ~clk_div4;
  end

  always @(posedge clk_div4 or posedge reset) begin
    if (reset)
      clk_div8 <= 1'b0;
    else
      clk_div8 <= ~clk_div8;
  end

  always @(posedge clk_div8 or posedge reset) begin
    if (reset)
      clk_div16 <= 1'b0;
    else
      clk_div16 <= ~clk_div16;
  end

endmodule
Divizor cu 16, verilog
Divizor cu 16, verilog

Cărți