【数字逻辑】Verilog N分频器

分频器是非常重要且经常用到的。

简写一个分频器的module。原理就是计上升和下降沿的个数做翻转。

 

module fre_div(
    input clk,
    input rst_p,
    output reg clk_out
    );

// 参数 :位宽和分频系数
parameter width = 2;
parameter N = 4;
reg [width-1:0] cnt;

// count edge
always @(posedge clk or negedge clk or posedge rst_p) 
begin
    if(rst_p)
    begin
        cnt<=0;
        clk_out<=1'b0;
    end
       
    else if(cnt==N-1)
    begin
        clk_out<=~clk_out;
        cnt<=0;
    end
    else   
        cnt<=cnt+1;
end

endmodule

 

然后写一个verilog的Testbench 仿真一下 看波形

这里设置了4分频,5分频和8分频

module frediv_tb;
reg clk;
reg rst_p;
wire clk_div4;
wire clk_div5;
wire clk_div8;

fre_div #(2,4) div4(
    .clk(clk),
    .rst_p(rst_p),
    .clk_out(clk_div4)
    );

fre_div #(3,5) div5(
    .clk(clk),
    .rst_p(rst_p),
    .clk_out(clk_div5)
    );

fre_div #(3,8) div8(
    .clk(clk),
    .rst_p(rst_p),
    .clk_out(clk_div8)
    );

initial 
begin
    clk=0;
    rst_p=1;
    #100 rst_p=0;
end
always #10 clk=~clk;// 50Mhz
endmodule

 

仿真:

采用的是vivado的仿真工具。

【数字逻辑】Verilog N分频器_第1张图片

你可能感兴趣的:(verilog)