在数字电路中,分频器是一种基本电路。分频器通常用来对某个给定频率进行分频,得到所需的频率。整数分频器的实现非常简单,可采用标准的计数器,也可采用可编程逻辑器件设计实现。在某些场合下,时钟源与所需的频率不成整数倍关系,此时可采用小数分频器进行分频。
6Aa[6Ma(I2BS{+\zh0
例如:要实现分频系数为2.5的分频器,可采用以下方法:设计一个模为3的计数器,再设计一个脉冲扣除电路,加在模3计数器输出之后,每来两个脉冲就扣除一个脉冲,就可以得到分频系数为2.5的小数分频器。采用类似方法,可以设计分频系数为任意半整数的分频器。
EDA中国门户网站H1j |"T^k*AY
小数分频的基本原理是:采用脉冲吞吐计数,设计两个不同分频比的整数分频器,通过控制单位时间内两种分频比出现的次数,从而获得所需的小数分频值。例如,设计一个分频系数为10.1的分频器,可以将分频器设计成9次10分频,1次11分频,这样总的分频值为:
EDA中国门户网站_+nM&m#}-\T2k_
(9×10+1×11)/(9+1)=10.1
x r1{!G0\r-R0
从这种实现方法的特点可以看出,由于分频器的分频值在不断改变,因此分频后得到的信号抖动大。
EDA中国门户网站
gKD;m5h
当分频系数为N-0.5(N为整数)时,可控制扣除脉冲的时间,使输出为一个稳定的脉冲频率,而不是一次N分频,一次N-1分频。
EDA中国门户网站b~/L(XCS-m
设需要设计一个分频系数为N-0.5的分频器,其电路可由一个模N计数器、二分频器和一个异或门组成,如图1所示:
EDA中国门户网站/X*C&i}U+[#Z^"vR

)~HY'en8~\q0
图1:小数分频原理图
9F
_D.j:x-}e0
(f5tw)`;d$HUt)d0
在实现时,模N计数器可设计成带预置的计数器,这样就可以实现任意分频系数为N-0.5的分频器。
s!L~7GRDv0
VHDL程序:
uvZjP/o
L0
library ieee;
&Xz*Co*Df6s0
use ieee.std_logic_1164.all;
EDA中国门户网站0LGKSsoo
use ieee.std_logic_unsigned.all;
$^ofp/gy"l0
use ieee.std_logic_arith.all;
:c;p3P@x0
entity fen25 is
T$]/O5]c#C G!qa0
port
EDA中国门户网站fZ6Y}fNMQ-?d%h
(clk:in std_logic;
$Q3[E_(]@G?0
qout1:buffer std_logic;
EDA中国门户网站 cc0Z1l5~'i|-ix];h
qout2:buffer std_logic;
EDA中国门户网站jUJr h
L_e,B+uu
clkout:out std_logic
^.uh#Sg(wyp0R0
);
,m$S9B
u ]:Z0
end fen25;
0lEujhn,D0
architecture behave of fen25 is
d T2v%pr4b0
constant counter_len:integer:=3; --模参数设置
EDA中国门户网站/~$|l~7G~rp\
signal clk_tem:std_logic;
EDA中国门户网站rB;IV%o&V4j\#p
begin
\~5l3Jso.~Ax*d0
qout1<=clk xor qout2; --异或
EDA中国门户网站"w
ogDM8z
process(qout1) --模为3的计数器
EDA中国门户网站n.]p @#b9N9h
variable cnt:integer range 0 to counter_len-1;
EDA中国门户网站ek9GF4x
begin
EDA中国门户网站 \J9DR"@
Np
if qout1'event and qout1='1' then
EDA中国门户网站0C.{hh7Fs
if cnt=counter_len-1 then
?9R W$wOT
r$`2soI:M0
cnt:=0;
EDA中国门户网站&H'HJ*g7U+c4k5M'J
clk_tem<='1';
EDA中国门户网站&J7~l^SI
clkout<='1';
EDA中国门户网站H
u!t"|m2j4o
else
qo-VsY;i:G#d)h(~0
cnt:=cnt+1;
EDA中国门户网站9@Imq5R
clk_tem<='0';
EDA中国门户网站7L$\;B1G8Q"}Hl
clkout<='0';
EDA中国门户网站!F.f
?7o%cTt%o
B$o5D0?hp
end if;
%dfKv~1T8GGV3SR0
end if;
-]^B+P-r+U)l~DP0
end process;
EDA中国门户网站a-i9C^:t0^2gK;dz
process(clk_tem) --二分频器
2Z+F+Q+fX#[9uq0
variable tem:std_logic;
L"r!QlF
l0
begin
}Dgy
|@7tN,I^F-s0
if clk_tem'event and clk_tem='1' then
EDA中国门户网站
s[t!Weoio
tem:=not tem;
EDA中国门户网站l~T
tVo
end if;
kAAJAG8X0
qout2<=tem;
EDA中国门户网站}
j6G]S a
G
end process;
EDA中国门户网站#l\N bC d+MM
end behave;
(qWhlv#U nky0

EDA中国门户网站7W{h"_S W{
图2:生成的图形文件
a"g0N9Zb;XH E4N)\0

EDA中国门户网站2Pt9LZ0D-V^5J6CC
图3:仿真波形