三分频电路

思路 占空比不为50%的分频器

目录

思路 占空比不为50%的分频器

方案1

方案2 

方案3 占空比为50%的三分频电路

思路


        00,01,10,在00,01的时候为低,10的时候为高,需要用到寄存器,加法器,比较器

其实计数器就是由这三部分组成

方案1

        RTL

微信图片_20210913101419.jpg

        code

        

module fenpin3(clk,rst,clk_3);
    input wire clk,rst;
    output wire clk_3;
    
    reg [1:0]count;
    always@(posedge clk, posedge rst)begin
        if(rst)
            count<=0;
        else
            if(count==2'b10)
                count<=0;
            else
                count<=count+1'b1;
    end
    
    assign clk_3=(count==2'b10)?1'b1:1'b0;
    
endmodule

这种方案的缺点就是输出和时钟沿有一级组合电路的延时

方案2 

        RTL

        

微信图片_20210913102214.jpg

code

module fenpin3(clk,rst,clk_3

    );
    input wire clk,rst;
    output reg clk_3;
    reg [1:0]count;
    
    always@(posedge clk,posedge rst)begin
        if(rst)
            count<=0;
        else
            if(clk_3)
                count<=0;
            else
                count<=count+1'b1;
    end
    
    always@(posedge clk, posedge rst)begin
        if(rst)
            clk_3<=0;
        else if(count==2'b01)
            clk_3<=1'b1;
        else
            clk_3<=1'b0;
    end
    
    
endmodule

RTL仿真

1631499965(1).png

方案3 占空比为50%的三分频电路

思路:

首先利用上升沿做一个占空比为1/3的三分频电路(占空比不为50%的分频器其实就是一个计数器,参考上面方案),

然后利用下降沿做一个占空比为1/3的三分频电路

然后将两个信号相或(或者两个占空比为2/3的三分频相与)

code

 

// 占空比为50%的三分频电路
// 想一下其他奇分频的电路应该如何设计
module div3(clk, rst_n, clk_3

    );
    input clk,rst_n;
    output clk_3;
    wire clk,rst_n;
    wire clk_3;

    reg [1:0]count_pos,count_neg;
    always @(posedge clk, negedge rst_n) begin
        if(!rst_n)
            count_pos<=2'b00;
        else
            if(count_pos==2'b10)
                count_pos<=2'b00;
            else
                count_pos<=count_pos+1'b1;
    end
    always @(negedge clk, negedge rst_n) begin
        if(!rst_n)
            count_neg<=2'b00;
        else
            if(count_neg==2'b10)
                count_neg<=2'b00;
            else
                count_neg<=count_neg+1'b1;        
    end
    assign clk_3 = count_neg[1] || count_pos[1];

endmodule

仿真结果

 

        

        

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值