在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4490|回复: 13

[求助] 奇数分频器

[复制链接]
发表于 2017-5-22 16:06:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 hxy110 于 2017-5-22 16:12 编辑

always@(posedge clk or negedge clk or negedge rst)

if(~rst) //低电平有效

begin

cnt <= 2'b0 ;

clk_q <= 1'b0 ;

end

else if(cnt == 3)

begin

cnt <=2'b0 ;

clk_q <= ~clk_q ;

end

else

begin

cnt <= cnt + 1'b1 ;

clk_q <= clk_q ;

end
这样就可以设计3分频。为什么一般还要采用设计2个分频器的方法来设计奇数倍分频器
发表于 2017-5-23 09:32:47 | 显示全部楼层
因为没有这样的dff吧
 楼主| 发表于 2017-5-23 09:38:48 | 显示全部楼层
回复 2# haimo


   恩恩,多谢,
发表于 2017-5-23 16:26:42 | 显示全部楼层
这是6分频。。。。。。
发表于 2017-5-23 19:49:35 | 显示全部楼层
回复 4# gaurson


  他这是8分频,0-3,四个时钟周期
发表于 2017-5-23 19:50:53 | 显示全部楼层
建议你自己画一下波形,就知道你这是不是3分频了
发表于 2017-5-24 10:33:39 | 显示全部楼层
回复 1# hxy110

module freq_divider #( parameter        DIV_NUM        = 9 )
                (        reset_n,
                        clk_in,
                       
                        clk_o        );
                       
        input                        reset_n;
        input                        clk_in;
       
        output                        clk_o;

  function integer clogb2 ( input integer depth );
        integer        i, result;
        begin
        result = 1;
        for ( i = 0; 2 ** i < depth; i = i + 1 )
                result = i + 1;
        clogb2 = result;
        end
  endfunction
       
        reg        [ clogb2 ( DIV_NUM ) - 1 : 0 ]        cnt;
        always @( negedge reset_n or posedge clk_in )
        if ( ~ reset_n )
                cnt <= 0;
        else if ( cnt == DIV_NUM - 1 )
                cnt <= 0;
        else
                cnt <= cnt + 1;
       
        reg                                                                                                                                        clk_buff;               
        always @( negedge reset_n or posedge clk_in )
        if ( ~ reset_n )
                clk_buff <= 0;
        else if ( cnt == DIV_NUM - 1 )
                clk_buff <= 0;
        else if ( cnt < ( DIV_NUM - 1 ) / 2 )
                clk_buff <= 0;
        else
                clk_buff <= 1;
               
        generate
                if (( DIV_NUM % 2 ) == 1 )
                begin
                        reg        tmp;
                       
                        always @( negedge reset_n or negedge clk_in )
                        if ( ~ reset_n )
                                tmp <= 0;
                        else
                                tmp <= clk_buff;
                       
                        assign clk_o = clk_buff | tmp;
                end
                else
                        assign clk_o = clk_buff;
        endgenerate
endmodule
发表于 2017-5-24 13:55:37 | 显示全部楼层
回复 5# 星见


    嗯,你说得对。
发表于 2017-5-24 17:46:21 | 显示全部楼层
always@(posedge clki or negedge rst_n)
begin
    if (!rst_n)
        div_cnt <= 2'b00 ;
    else if (div_cnt==2'b10)
        div_cnt <= 2'b00 ;
    else
        div_cnt <= div_cnt + 1 ;
end

assign clko = div_cnt[1] ;

如果要做50%占空比的三分频,把div_cnt[1]用反沿时钟抓一拍,再或上去。
wire clki_n = ~clki ;
always@(posedge clki_n or negedge rst_n)
begin
    if (!rst_n)
        div_cnt1_n <= 1'b0 ;
    else
         div_cnt1_n <= div_cnt[1] ;
end

assign clko = div_cnt1_n|div_cnt[1] ;
 楼主| 发表于 2017-5-31 22:11:11 | 显示全部楼层
本帖最后由 hxy110 于 2017-5-31 22:14 编辑

回复 4# gaurson
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-16 17:58 , Processed in 0.028519 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表