偶数倍分频和奇数倍分频

 N(偶数)数倍分频

module even_clkdiv
#(parameter N=4)
(
    input clk,
    input rst_n,
    output clk_div
);
reg clk_div;
reg [2:0] cnt;
//N(偶数)为几就是多少倍分频
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        cnt <= 3'b0;
    else if(cnt==N-1)
        cnt <= 3'b0;
    else
        cnt <= cnt+1;
end


always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        clk_div <= 1'b0;
    else if(cnt==N/2-1)
        clk_div <= ~clk_div;
end
endmodule

N(奇数)数倍分频

module odd_clkdiv
#(parameter N=5)
(
    input clk,
    input rst_n,
    output clk_div
);

    reg clk1;
    reg clk2;
    reg [2:0] cnt1;
    reg [2:0] cnt2;
//时钟上升沿计数
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        cnt1 <= 3'b0;
    else if(cnt1==N-1)
        cnt1 <= 3'b0
    else
        cnt1 <= cnt1+1;
end
//时钟下降沿计数
always@(negedge clk or negedge rst_n)
begin
    if(!rst_n)
        cnt2 <= 3'b0;
    else if(cnt2==N-1)
        cnt2 <= 3'b0;
    else
        cnt2 <= cnt2+1;
end

always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        clk1 <= 1'b0;
    else if(cnt1==N-1/2||cnt1==N-1)
        clk1 <= ~clk1;
    else
        clk1 <= clk1;
end

always@(negedge clk or negedge rst_n)
begin
if(!rst_n)
    clk2 <= 1'b0;
else if(cnt2==N-1/2||cnt2==N-1)
    clk2 <= ~clk2;
else
    clk2 <= clk2;
end

assign clk_div = clk1|clk2;
endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值