Advertisement
Bobita

verilog_pr1

Oct 25th, 2023
1,064
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VeriLog 1.13 KB | Source Code | 0 0
  1. `timescale 1ns/1ns
  2.  
  3. module counter#(parameter width = 4,
  4.                 parameter MAX = 10)
  5. (input clk,input rst,input en, output div_clk);
  6.   localparam HALD_COUNT = (MAX-1)/2;
  7.   reg [width-1:0] count_ff,count_next;
  8.   reg drive_ff, drive_next;
  9.  
  10.   assign div_clk = drive_ff;
  11.  
  12.   always @* begin
  13.     drive_next = drive_ff;
  14.     count_next = count_ff;
  15.     if(en) begin
  16.       if(count_ff == (MAX-1)) begin
  17.         drive_next = 1'b0;
  18.         count_next = 'b0;
  19.       end else begin
  20.         count_next = count_ff+1'b1;
  21.         if(count_ff < HALD_COUNT) begin
  22.           drive_next = 1'b0;
  23.         end else begin
  24.           drive_next = 1'b1;
  25.         end
  26.       end
  27.     end
  28.   end
  29.  
  30.   always @(posedge clk or posedge rst) begin
  31.     if(rst) begin
  32.     end else begin
  33.     end
  34.   end
  35. endmodule
  36.  
  37. module counter_tb;
  38.    reg clk;
  39.    reg rst;
  40.    reg en;
  41.    wire div_clk;
  42.  
  43.    counter uut(.clk(clk), .rst(rst), .en(en), .div_clk(div_clk));
  44.  
  45.    integer i;
  46.    initial begin
  47.       for(i = 0; i <= 1; i = i + 1)
  48.       begin
  49.          clk = i;
  50.          $display("clk = %d, div_clk = %d", clk, div_clk);
  51.       end  
  52.    end
  53. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement