clk_div.sv 692 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. //
  2. // Copied from http://referencedesigner.com/tutorials/verilogexamples/verilog_ex_04.php
  3. //
  4. module clk_div
  5. #(
  6. parameter WIDTH = 3, // Width of the register required
  7. parameter N = 6// We will divide by 12 for example in this case
  8. )
  9. (clk,reset, clk_out);
  10. input clk;
  11. input reset;
  12. output clk_out;
  13. reg [WIDTH-1:0] r_reg;
  14. wire [WIDTH-1:0] r_nxt;
  15. reg clk_track;
  16. always @(posedge clk or posedge reset)
  17. begin
  18. if (reset)
  19. begin
  20. r_reg <= 0;
  21. clk_track <= 1'b0;
  22. end
  23. else if (r_nxt == N)
  24. begin
  25. r_reg <= 0;
  26. clk_track <= ~clk_track;
  27. end
  28. else
  29. r_reg <= r_nxt;
  30. end
  31. assign r_nxt = r_reg+1;
  32. assign clk_out = clk_track;
  33. endmodule