|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
8 ~- W% R! I! Q7 r$ R3 }0 h7 G: y
频器是用的最广的一种FPGA电路了,我最初使用的是crazybingo的一个任意分频器,可以实现高精度任意分频的一个通用模块,他的思想在于首先指定计数器的位宽比如32位,那么这个计数器的最大值就是2^32=4294967296,
4 W7 q ?3 h+ I- j2 |- T. {4 T; v/ l# Z' Z* |0 W; A$ t
假设系统时钟为50MHz,那么假如要想实现输出频率为fout,那么可以使用的频率控制字为:' w1 W8 u) A) n( ~) `5 g
6 @4 s# r# N* Q+ r& ]K满足关系:
0 v3 M2 q$ M" ~; R7 A; o7 X0 A
$ D6 H4 c! o! H# t! o- ~那么设计计数器在每个时钟上升沿累加的值为K,当计数值为2^31时,clkout=1;否则clkout=0.最终即可以实现任意频率的输出,精度的计算方法为当K=1时,可以得到clkout=0.0116415321826934814453125Hz,也即是说可以输出的最小频率为0.011Hz
- r8 t7 F: k6 |& R- o
3 m( a# R2 S, h. N此外我们最为常见的分频器分为以下4种分析:
: P' V7 @; S: B( c2 B; {1 f. Y
) M8 ~" p! E4 b" _! T4 g4 h! P7 {1.偶数分频
5 q1 j9 q! m1 o% t" y% W0 i- z2 d6 S7 a' o* W! Y6 f% z
最简单,要想得到分频系数为N的频率输出,设定一个计数器,这个计数器从零开始加1,当加到N/2-1时计数器清零,或者clkout翻转,以此循环,即可实现偶数倍分频。
! l" g3 C% V8 T% W
4 t) S& c0 [9 Y+ ^3 ~- ^- v2.奇数分频(分占空比不确定以及占空比50%)
. P# |1 E/ h. m" z0 _0 Y' N9 x3 P! X
方法一:分频系数为N,占总比不确定:以三(N)分频为例,上升沿触发计数,计数器计数到1(N-1)/2时输出时钟翻转,计数到2(N-1)时再次翻转.代码为产生1/11占空比为十一分频时钟:在计数值为9和10时均反转时钟,是产生抽样脉冲的有效方法:7 g. Y4 H4 l. h7 C0 K
8 [4 B- F# K2 ^% ^- Ealways @(posedge clk or posedge rst) begin
% ] g: x: R2 U6 A5 b8 G M2 t: q if(rst)begin //复位
) z* }. R8 N v; V$ P" F0 J cnt<=0;+ _; x7 s' _4 j& \8 o
clk_div11<=0;8 l! h. a) c- b% |$ @: ` k2 x
end6 K4 p8 b7 g5 j2 A3 D, K$ L# }
elseif(cnt==9) begin
. ~' V# ^0 v" C6 k. I3 s9 S clk_div11<=~clk_div11; //时钟翻转
; d0 C+ Z5 Q- v2 C; `0 G cnt<=cnt+1; //继续计数' S; \* D- K1 g) i% h
end
s9 S, \/ z: @ g5 ?) E1 V( Y6 c5 T elseif(cnt==10) begin6 b7 R, u2 q) e a3 R' w. \1 c3 n
clk_div11<=~clk_div11; //时钟翻转# B6 E' L6 y8 c/ k$ V
cnt<=0; //计数清零
2 A; G+ L; f1 j end3 _* l: X( o/ V$ E# v
else
4 d. [& ~# V2 z+ L cnt<=cnt+1;
" i& X5 ~ W% X" ~! N( \7 [ end
' { l Q$ }5 T; E1 W5 t2 {& \$ k
- S2 Y) y9 Q. \9 n7 x占空比50% ,则可以在上面的基础上,加上一个下降沿触发计数,然后将上升沿和下降沿产生的时钟进行相或运算,即可得到奇数分频输出。
) s9 o5 ^ Z2 z* U8 p$ O y$ a8 S) j8 l1 S2 x4 H9 F9 V
reg clk1;
0 S: A; ?. P/ O4 r2 D+ ? reg[1:0]cnt1;
% W. i7 L9 f. u always@(posedge clk or posedge rst) begin T2 `+ p3 U" |7 d1 [: P+ p
if(rst)begin //复位
0 f; M d2 l5 i6 J- U2 D1 N cnt1<=0;
- o' p; c6 M! X% m( m8 M5 H clk1<=0;; }( f* `/ k# ^
end
2 f# T% c8 O1 X' P& s7 S) b+ r9 R elseif(cnt1==1) begin
0 I" e0 M$ D# C+ N. G: B clk1<=~clk1; //时钟翻转$ d: c( X! H. _1 C
cnt1<=cnt1+1; //继续计数
& y& ^) G$ R9 |1 H end
4 U. H# y8 P6 o( Q3 ? elseif(cnt1==2) begin$ N9 L I, H" c& g m% d) J6 U
clk1<=~clk1; //时钟翻转; x! f; b1 [8 D2 y# R+ S s A1 S
cnt1<=0; //计数清零
; l8 x5 l2 u# R& L5 b end
" h' ^+ p# U6 m: d [; B* ^+ | else
; U8 |4 T2 {1 U1 p. G, @& k cnt1<=cnt1+1;
4 ]" `0 h0 @" f( w2 o& ^ end( b, c" }8 _. J$ k
& H5 O6 B% q" I3 j) c9 W! G
reg clk2;5 S4 L* K& y% B* W! B
reg[1:0]cnt2;
$ q; h9 e8 H( H' R6 z# h2 n always@(negedge clk or posedge rst) begin
& K, I: x# ]8 @2 ~7 C if(rst)begin //复位6 H0 E) F# a1 Z$ F6 L7 {0 M
cnt2<=0;
8 e, A! p% y* r. X) W: W clk2<=0;: Q5 P0 P& I1 p, [
end" A& |5 F% e% }
elseif(cnt2==1) begin
0 R, n+ q4 Q, |# A. U& g clk2<=~clk2; //时钟翻转, y0 I1 _& T/ ^ o5 B
cnt2<=cnt2+1; //继续计数* m, \! f# ?! I; x0 q2 w
end
6 {* f0 ~& K8 Y: ] q: [ elseif(cnt2==2) begin# b. q; p% G0 Y+ z7 G; R
clk2<=~clk2; //时钟翻转
3 E7 k" b: u* Y1 H* R& c cnt2<=0; //计数清零
, ?- I! n5 M& g0 h& L P# b$ r end
5 {# I" \( i6 |* `& q else
. r& t ~( q/ a( n; u7 o. n) e cnt2<=cnt2+1;: G0 C* G9 ~3 Z, o* Z h4 i7 F$ \
end. _) z, j5 h+ E' ?
7 w' M1 V' n" i) h8 N" W' e
assign clk_div3=clk1 | clk2; //或运算
' D. j7 Z- a. k4 r2 i1 U
; j; }7 Y0 {7 `% o% h; }* a
2 s$ D) T1 r- R, g' W
图1 50%占空比的三分频电路原理图
4 ` r3 p4 T3 u% S. k
4 Z7 R5 M6 C3 W( L8 p
8 J9 ~+ G/ ]7 _, a: I4 F a6 ]$ q m* ^: u, m" e# `7 e
方法二:对进行奇数倍n分频时钟,先进行n/2分频,然后在二分频得到(这部分先讲半整数分频)
8 ~3 M1 T$ I2 n, w5 c$ P
3 v( r5 {) [& b' a7 ~+ i亲测有效代码:: ^8 U0 q, t3 K1 I
1 d/ {% i" c( T6 fmodule ModuloN_Cntr(input clk,rst,output clk_out);
& h# J9 M1 a& l3 b6 D" Sreg [1:0]cnt1;
0 q U( s. i6 ureg [1:0]cnt2;1 J/ ?% j0 Y; l% H
reg temp1,temp2;
Y. Y* r4 I2 r- h5 _* s0 i3 Zalways@(posedge clk or negedge rst)) b' A' v7 V; l/ R: I
begin
5 F/ W2 A% b3 f) V9 W+ c! s if(~rst)
% N3 ^7 P# C1 K$ @4 V, v9 E begin$ i5 u$ d; x1 ~" o6 `
cnt1<=0;: V" R/ s* {* `
temp1<=0;! g$ x/ E) K4 q5 d
end
0 [0 M' I7 m: Q, k else
4 J U5 U) [3 f5 b5 F- r begin
. j1 Z. i6 L! L) B) M- N d" ?6 n7 ~8 v if(cnt1==2)- W& I5 o/ u/ v: r/ a
begin
& \# s# ~) ~3 ^* O" z6 @5 k$ g1 b6 _ temp1<=1;/ H# u3 x/ A. L0 O# h
cnt1<=0;1 Q& |% K# d- F H1 j/ s
end
4 e, y% x2 [7 S, r; t else( o4 S [* T8 n
begin
' E, H; Y/ R/ q, q cnt1<=cnt1+1;
4 H% i0 @; T5 q temp1<=0;
4 S) V( E3 e% E4 z. G end 8 ]0 r( \- z/ W2 w
end ; ^+ ]9 N# U# |6 t# X, w3 c/ p L% u
end, z/ i$ q; b$ B) }
always@(negedge clk or negedge rst)
4 m) B Y7 A& R$ j) z/ k( ibegin
9 S* f& \! O k! d/ P if(~rst)
, ~; }3 h% Z& o# V# P8 O begin6 ^9 j2 P$ l7 p: p
cnt2<=0;
3 F+ V$ h% V3 r+ @, d5 `1 e9 d% p/ t, i temp2<=0;
9 c& I2 {$ B4 b5 z end
/ F' k" ?- _3 n9 c/ Q& C7 d else + N5 y% D9 {) T' B. n9 _3 @
begin) t7 ^0 z) I/ T$ U
if(cnt2==2), \3 L" t7 d7 J6 w7 ~' C
begin
$ I$ X+ U' y) f7 b temp2<=1;
9 Q4 \0 h4 z, p" ^0 X3 k cnt2<=0;
! K9 [' k/ ?4 M) T) o! S end, H8 R, k8 _! z4 o
else% e& T' [6 l g/ [
begin
" |/ t6 ?$ h* }+ S cnt2<=cnt2+1;' { u; |1 P' f+ {
temp2<=0; ^8 H1 s, Z8 K4 Z
end
5 ]. b* [7 Q) }& ?' `+ O end
8 r! ^3 F) x! Z9 o* R+ jend
* I c R/ E6 m! ]% kassign clk_out=temp1|temp2;
+ J' Y* v4 b" r, M3 e, Hendmodule; U1 R2 Z9 @6 g2 B* k4 n+ K& N
$ l) ~* h' U/ q+ V* x: V9 \0 g8 K, ^: ~
仿真波形:6 Z, e) D$ B, T8 C: u) X
3 e+ H: L# y; F/ {! H- t* d
( l& A2 E9 O- m( J
' b' Z5 q0 a! u5 _7 j7 t3.半整数分频" F8 E0 q9 @) v$ ~( ~
! @/ u2 T7 C4 {0 @半整数指的是N+0.5分频器设计:先进行模N+1计数,计数到N时输出时钟赋值为1,然后当计数到0时,输出时钟赋值为0,因此保持计数值为N的时间为半个时钟周期即为设计的关键,从中可以发现,计数器是在时钟的上升沿计数,那么我们可以让时钟在计数值为N时,将计数触发时钟翻转,时钟的下降沿变为上升沿,因此计数值为0,所以每产生一个N+0.5分频时钟周期,触发时钟都要翻转一次,以2.5分频为例程序如下:
' I3 T: h3 R% n+ [* W$ _% F: D" M0 X. S4 l, |& i# Q
//异或运算2 w5 ]" k0 \* m2 n
& `/ h" p" l$ P( D6 p0 M2 C! z assignclk_in=clk^clk_div2;
( U* ?1 I6 ^- R1 q
* ]' M7 _* ]% s. l) k& _" ]+ I //模3计数器, O: ]0 u6 [3 k a y5 i
O$ ]. @& q8 Z e6 |. j reg clk_out;5 }- ]$ y% h& S/ D
3 o7 }+ `0 T; u9 Q
reg [1:0]cnt;" Q& r8 Y0 _# W% }& Z0 {# f Z+ I" i
# a5 ]( H3 O! Y" D0 q
always@(posedge clk_in or posedge rst) begin
3 P$ X; Z: E# V+ s; s1 ]' F2 p+ z/ N" X; @$ y" u% J6 W) E3 G
if(rst)begin //复位
A, b9 O( s9 W$ ]# j2 ?1 Y
. j2 L+ F6 ^- @0 c' n9 M cnt<=0;
! e. V6 A, o! s- x |$ m, ?
2 d; N6 a8 H" T) s$ D* M [ clk_out<=0;# _6 E7 w' i/ L: H8 [' Q4 I
: \: H! q/ H' j h: v/ m7 R
end- Y, R( x1 t# z' d0 C& ^: W
; ]( Q# x7 s* X elseif(cnt==1) begin) ~- U; Q* t U4 |' {
4 ~( Y) I) `+ y4 p1 P) Y$ m8 a6 Z$ M
clk_out<=~clk_out; //时钟翻转7 z! U( y! Q9 |# O1 S
: c8 L3 Z6 q1 ^: Q# i8 _ cnt<=cnt+1; //继续计数7 x' z5 k* k$ ?+ D9 L" b
+ k- P) }- k+ d$ G0 y end
5 y) l- |' b0 L4 o+ \( Z7 r& C5 }% @* t5 h
elseif(cnt==2) begin7 P/ l2 j, }3 h* {3 N
7 {- f5 L5 h) R+ F) W
clk_out<=~clk_out; //时钟翻转: R( u' Y* D. d/ B- S
2 r$ T# k9 R0 I$ P; \ cnt<=0; //计数清零
4 e5 a A1 l9 h- U% ~+ d+ n* [2 D+ S2 [8 c
end: r/ p! A. n. @% i; ~! G% ? X1 B
. O4 S' p4 U5 S" x: Q! Y! d( W else
- J3 o6 ?7 ?; p" B1 w" X
/ N1 H" C+ t* B: L7 q5 m cnt<=cnt+1;
* N; \! w4 Y _2 ?1 C: B; F, T/ n
end; l8 }1 H5 z" V$ x9 M
: y$ s+ K4 I7 z* X9 F //2分频1 t# s6 a1 H% }2 J/ y
9 f' A s2 N' X
reg clk_div2;0 L9 A! i/ I6 T
# A# R$ ~) R# H& h- Y
always@(posedge clk_out or posedge rst) begin
( c$ G5 W9 H' y" O2 d' g: U# b4 s
1 @3 k- [. [" B! A$ _8 T if(rst) clk_div2<=0; //复位; }( h3 l6 Z* u2 z
/ J2 C0 p. b$ X
else clk_div2=~clk_div2;( x% q- K7 o8 A# F4 N _ W" o
* Q3 d$ _# }: _1 N% i end
4 z: p& _" F K2 V8 ]6 z8 e; ~; D8 S# d! p! ^$ W. i
, k$ u7 ]4 n! x: C图3 通用半整数分频器的电路原理图, o- G# F% ?$ ~( U- S& u
; k' d0 Z K' `% ^
& b5 i& ^: ?& h1 Q. i图4 2.5倍分频器时序仿真图! r" F7 u9 h. F4 P; K) r6 X+ `
% n5 A, n" ] j: `那么5.5分频呢:
9 p2 z$ k# T9 Q( ~( h2 M7 Q; k' p7 Q) ?6 }' M9 q" u7 _3 s
代码:通用的这里N=5;
: [: ~3 F4 n4 Y* \+ r8 o6 v# ?
$ ^; f, F n G9 omodule ModuloN_Cntr(clk,clk_div,temp1,temp2);//N+0.5
' y5 i# z, a5 y9 x& iinput clk;8 ?: ?: r8 K g, L) G) k
output clk_div;
* K( {5 r/ g2 w c. k' i qreg[31:0]cnt1=0;
+ s y- k1 v7 i4 \: c. [9 {reg[31:0]cnt2=0;! _3 E$ p8 z9 [" B) w
output reg temp1,temp2;/ v2 G u {9 C' m" g& e
initial begin temp1=0;temp2=1;end //首先进行初始化,temp1=0;temp2=1" [/ `& d1 L# w
parameter N=5; //设定分频系数为N+0.5 Z: F+ u- k) K+ t/ U, o# O
always @(posedge clk) //temp1上升沿跳变
, Y8 C! p* E6 N% s! bbegin' j! y+ u9 P. \, F8 p
if(cnt1==2*N) //2*N" P3 [# V8 c2 G( m* D/ ` @
begin cnt1[31:0]<=32'd0;end. N7 ^3 D/ ~; [; a$ t5 C
else begin cnt1[31:0]<=cnt1[31:0]+32'd1;end
+ Y8 b" n( R- }3 G1 E8 vif(cnt1==32'd0) begin temp1<=1;end //高电平时间为N+1;
' v7 @1 [+ R$ q( r1 N& |if(cnt1==N+1) begin temp1<=0;end //低电平时间为N;) X. v r3 M, @( U% ^; [9 E' R/ h' |
end
' H! ?. H, G( v9 f" Malways@(negedge clk) //temp2下降沿跳变. t4 `. S5 ]9 v3 `
begin5 P7 \+ d! _1 e1 Q) s) w
if(cnt2==2*N) //2*N
! I; F4 }, W. I7 T8 ~& a; b) x: Nbegin cnt2[31:0]<=32'd0;end
% J( ?: ^$ q( { v" ~9 i, O! Eelse begin cnt2[31:0]<=cnt2[31:0]+32'd1;end
: h w" b! {* |0 }1 u% f9 W; N& Qif(cnt2==32'd0) begin temp2<=0;end //低电平时间为N;
1 T0 d" ^2 K, i+ l( D8 hif(cnt2==N) begin temp2<=1;end //高电平时间为N+1;+ y0 H' W& Y9 k
end+ O. L2 V0 j1 O) }) d; c& t
assign clk_div=temp1&&temp2; //逻辑与+ T) t' O; S6 f
endmodule
$ c( o9 B6 @* }* ], r- ~//如果要进行N+0.5分频" a( s# E. t8 }* z
//思路:总的来说要进行N+1+N=2N+1次分频
" ~' i+ |" z3 y//在时钟的上升沿和下降沿都进行跳变; A, R' @# s; s, c
//上升沿进行占空比为N+1比N的时钟temp1;
1 ?, i7 s7 T9 ]1 y8 m/ g( C. ^+ S//下降沿进行占空比为N比N+1的时钟temp2;
: n( h" h7 l( |2 x* u//最后div=temp1&&temp2 即可得到所需要的半整数分频2 H3 Q; ^. g% q6 z# \( m2 T
% _$ K+ I2 j/ W! A# J% d) ? V
仿真波形:. O( N7 G7 [6 ]8 G- R) D$ J
8 g; V3 H+ c6 q! d4 W: V
1 `+ ?* S1 j6 c+ C6 R4 u$ v& B& G+ n& k% u7 x; {
4.任意小数分频( M0 H# b( }& W2 c) ?
% x7 k- P U+ r! l+ S: w0 y小数分频器的实现方法有很多中,但其基本原理都一样的,即在若干个分频周期中采取某种方法使某几个周期多计或少计一个数,从而在整个计数周期的总体平均意义上获得一个小数分频比。一般而言,这种分频由于分频输出的时钟脉冲抖动很大,故在设计中的使用已经非常少。但是,这也是可以实现的。以8.7倍分频为例,本文仅仅给出双模前置小数分频原理的verilog代码及其仿真图(如图6),具体原理可以参考刘亚海的《基于FPGA的小数分频器的实现》以及毛为勇的《基于FPGA的任意小数分频器的设计》。、
/ H& F* F4 g# ] U, S
" e+ @$ F' D1 A9 `( t# ]/ n( r& y还是放下代码吧:
4 ^. n2 o! E( y! p, }: L# ^" a$ z4 f" e. v5 U
//8分频 g+ i3 R8 K5 Z% N/ m3 G# g
reg clk_div8;
3 ~% i7 S z0 X reg[2:0]cnt_div8;
3 I* M% q& K# L% Q6 m' H always@(posedge clk or posedge rst) begin* l4 m9 d3 y) T) y/ _2 L
if(rst)begin //复位0 B9 C. [" {7 m }: T5 w
clk_div8<=0;
* x c3 f2 P' D7 N$ O0 g cnt_div8<=0;% ?. ~" d) Y$ F" a1 Q
end0 }* I+ T# i/ v+ W C( `7 w
elseif(cnt_div8==3'd7) begin
L+ ?. U: ^, g0 H clk_div8<=1; //置1( g8 l {: W/ m! \! J" \" q5 N
cnt_div8<=0;
8 M8 G6 v. p8 z; n end
! j6 r6 s8 M9 {) K elseif(cnt_div8==3'd0) begin4 D6 n/ }1 d5 M8 @, G% ~0 C4 Y3 L
clk_div8<=0; //置0) b! }$ b- [6 O5 ?$ G, z
cnt_div8<=cnt_div8+1;# r$ x5 f6 O8 s. Z: x9 }
end2 d9 R) J8 ?2 t& O
else
# [+ q" k5 P+ X7 H s* a cnt_div8<=cnt_div8+1;+ y( X9 W: k7 l' E
end6 S3 b: v7 m8 n, }) f3 O
( Z, d6 Q2 ^* _, X
//9分频 c1 q! Q4 E5 z. u& O! x
reg clk_div9;
: P* v& P4 o. f! R1 o% M* g reg[3:0]cnt_div9;5 t( F. ]' |- N5 C- d, C0 ~- F) d9 C, Z
always@(posedge clk or posedge rst) begin
3 c0 o2 B- a, Y! J if(rst)begin //复位, l c* x! m# j2 S) f, E
clk_div9<=0;& i9 r% h) H" B% M& _
cnt_div9<=0;
% D8 R! c1 v2 u! ] end L# Y, w. A6 t8 ]/ x
elseif(cnt_div9==3'd8) begin
3 ~. a2 m! g, R1 z8 V: Q9 u n clk_div9<=1; //置1* E1 v7 R0 R5 \" M$ x0 c
cnt_div9<=0;" ?4 W3 B: K3 N9 b
end# o# { F; K1 n( d
elseif(cnt_div9==3'd0) begin, D+ L8 ` g) L X S
clk_div9<=0; //置0; g! G: f, t) h7 U) x! g
cnt_div9<=cnt_div9+1;7 ^2 H& ]5 y' Z2 @* z+ g
end
) _# D) a5 j' C5 W5 G/ i: n* z else0 b$ {$ f/ K; B9 d! f
cnt_div9<=cnt_div9+1;. j+ C' C- {) D9 ?
end) Y! H- @, P' D4 @
//控制信号$ a/ G% y$ ^9 v, P
parameterDiv8Num=3;, v- w6 N; d/ J8 u0 ?. Y; Y/ j
reg ctrl;
$ L# z0 q B% @& W# ?1 m reg[3:0]AddValue;
; ]6 C) @0 P. P7 A always@(posedge clk or posedge rst) begin
/ N+ A0 q S, j9 a if(rst)begin //复位
: {# u0 T: w$ _: w6 F3 }" F ctrl<=0;* }5 Q5 V( K$ ~( Q# \0 ]% ?4 q
AddValue<=10-7;0 b% A$ z$ W* K7 w2 c
end
( V0 a; o- p5 s) q; R Z3 y: m% ~ elseif(AddValue<10) begin+ r, G$ k/ u/ _. E
ctrl<=0;0 w% _1 }+ g/ L* \6 I
AddValue<=AddValue+Div8Num;0 {' T8 q# b' P! t. J
end
. @# T' n4 G8 s/ R1 X. a$ c else begin
; S$ `8 X2 |+ t/ y& v$ t9 e3 V ctrl<=1;
( m: Y6 J4 h* r$ D* n0 L+ c. K AddValue<=AddValue-10;
. W5 a2 x5 k& r end
/ L" C+ M2 x/ q6 d5 d. Y' k4 A, I2 } end/ Y0 W: t' l& L. F" G
- r1 K- A8 t- A# {% j //选择输出6 Z3 Y) }) @$ G* P. s
reg clk_out;
# \4 U2 E# C' C# J always @(ctrlor posedge clk or posedge rst) begin# n4 P2 Z( l! W0 H0 ?
if(rst) clk_out<=0; //复位
$ a; z0 Z! r1 E2 { elseif(ctrl) clk_out<=clk_div8;: @/ ~ T0 U2 J# `' O( d
elseclk_out<=clk_div9;/ o& x$ V3 x% b) L4 h
end5 |5 A, a) Y: Q$ J8 U
+ A' P4 X C- }; |' {) G8 B3 Y6 [
& k& o9 D( ^5 w( V& c3 H" h5 m
图6 8.7分频器的时序仿真图) b' D8 E, f, L9 }, j% Q# x) B5 `
, _( b' }* U3 i# `* O
" p9 x: n- z( m0 |7 m7 Q
7 _% H ~! B H7 h3 ^; B4、总结分频器是FPGA的基础,而且在FPGA逻辑电路设计的时候是经常使用的,希望大家对以上的整数倍分频和半整数倍分频能熟练掌握' l" {+ ?& P9 m" U" ]4 Q; {) B
|
|