首页 > 其他 > 详细

一个简单的奇数分频Verilog

时间:2020-07-15 17:52:32      阅读:45      评论:0      收藏:0      [点我收藏+]
module divide_3 (
    input clk,
    input rst_n,

    output clk_out
);

parameter N = 3 ;//分频系数

reg div_1,div_2;
reg [1:0] cnt_1,cnt_2;

assign clk_out = div_1 | div_2 ;

always@(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        div_1 <= 0;
        cnt_1 <= 0;
    end    
    else if (cnt_1 == N-1) begin
        cnt_1 <= 0;
    end
    else begin
        if(cnt_1 == 0) 
            div_1 <= ~div_1;
        else if(cnt_1 == (N-1)/2) begin
            div_1 <= ~div_1;
        end       
        cnt_1 <= cnt_1 + 1;       
    end
end

always@(negedge clk or negedge rst_n) begin
    if(!rst_n) begin
        div_2 <= 0;
        cnt_2 <= 0;
    end    
    else if (cnt_2 == N-1) begin
        cnt_2 <= 0;
    end
    else begin
        if(cnt_2 == 0) 
            div_2 <= ~div_2;
        else if(cnt_1 == (N-1)/2 )
            div_2 <= ~div_2;       
        cnt_2 <= cnt_2 + 1;       
    end
end

endmodule

 

`timescale 1ns/1ns

module tb_divide_3();
reg clk;
reg rst_n;
wire clk_out;

initial begin
    clk = 0;
    rst_n = 0;
    #100
    rst_n = 1;
    #1000
    $finish;
end

always #10 clk = ~clk;

divide_3 u_divide_3(
.clk(clk),
.rst_n(rst_n),
.clk_out(clk_out)
);


endmodule

技术分享图片

一个简单的奇数分频Verilog

原文:https://www.cnblogs.com/pure-z/p/13306190.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!