霡霂的个人空间 https://blog.eetop.cn/maimu [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

利用可编程器件实现小数分频

已有 1162 次阅读| 2006-8-22 08:08 |个人分类:备份

天气: 晴朗
心情: 高兴

   在数字电路中,分频器是一种基本电路。分频器通常用来对某个给定频率进行分频,得到所需的频率。整数分频器的实现非常简单,可采用标准的计数器,也可采用可编程逻辑器件设计实现。在某些场合下,时钟源与所需的频率不成整数倍关系,此时可采用小数分频器进行分频。


 

    例如:要实现分频系数为2.5的分频器,可采用以下方法:设计一个模为3的计数器,再设计一个脉冲扣除电路,加在模3计数器输出之后,每来两个脉冲就扣除一个脉冲,就可以得到分频系数为2.5的小数分频器。采用类似方法,可以设计分频系数为任意半整数的分频器。


 

    小数分频的基本原理是:采用脉冲吞吐计数,设计两个不同分频比的整数分频器,通过控制单位时间内两种分频比出现的次数,从而获得所需的小数分频值。例如,设计一个分频系数为10.1的分频器,可以将分频器设计成9次10分频,1次11分频,这样总的分频值为:


 

    (9×10+1×11)/(9+1)=10.1   


 

    从这种实现方法的特点可以看出,由于分频器的分频值在不断改变,因此分频后得到的信号抖动大。


 

    当分频系数为N-0.5(N为整数)时,可控制扣除脉冲的时间,使输出为一个稳定的脉冲频率,而不是一次N分频,一次N-1分频。


 

    设需要设计一个分频系数为N-0.5的分频器,其电路可由一个模N计数器、二分频器和一个异或门组成,如图1所示:


 

   


 

     图1:小数分频原理图


 

 


 

    在实现时,模N计数器可设计成带预置的计数器,这样就可以实现任意分频系数为N-0.5的分频器。  


 

    VHDL程序:


 

    library ieee;


 

    use ieee.std_logic_1164.all;


 

    use ieee.std_logic_unsigned.all;


 

    use ieee.std_logic_arith.all;


 

    entity fen25 is


 

    port


 

    (clk:in std_logic;


 

     qout1:buffer std_logic; 


 

     qout2:buffer std_logic; 


 

     clkout:out std_logic


 

    );


 

    end fen25;


 

    architecture behave of fen25 is


 

    constant counter_len:integer:=3;                 --模参数设置


 

    signal clk_tem:std_logic;


 

    begin


 

    qout1<=clk xor qout2;                          --异或  


 

    process(qout1)                                 --模为3的计数器


 

    variable cnt:integer range 0 to counter_len-1; 


 

    begin   


 

      if qout1'event and qout1='1' then      


 

         if cnt=counter_len-1 then         


 

            cnt:=0;         


 

            clk_tem<='1';         


 

            clkout<='1';      


 

         else         


 

            cnt:=cnt+1;         


 

            clk_tem<='0';         


 

            clkout<='0';      


 

         end if;   


 

      end if; 


 

    end process;   


 

    process(clk_tem)                               --二分频器 


 

    variable tem:std_logic; 


 

    begin   


 

      if clk_tem'event and clk_tem='1' then      


 

         tem:=not tem;   


 

      end if;   


 

      qout2<=tem; 


 

    end process;  


 

    end behave;


 

   


 

     图2:生成的图形文件


 

   


 

     图3:仿真波形


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 3

    粉丝
  • 1

    好友
  • 6

    获赞
  • 45

    评论
  • 3123

    访问数
关闭

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

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

GMT+8, 2024-4-19 18:45 , Processed in 0.027624 second(s), 15 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部