|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Taio 于 2019-4-10 11:05 编辑 2 A! U& l$ I; d
. H# g- C) _6 Y8 ?* k
转——【FPGA代码学习】实践一下FPGA时钟分频
/ { Z' K2 s# V; g! j3 C0 _以前小伙伴一起讨论过关于 关于 FPGA 时钟分频? 这些奇葩的分频,可能也只在IC内部用的到吧,由于好奇,我也来尝试一下。
) }# p5 P4 O4 n& P4 J3 A6 g2 T4 h/ W) P一、 具有50% 占空比的奇数的整数分频
+ |1 ]) y5 O& c$ }6 g/ |对时钟进行N分频,创建由时钟沿触发的计数器,计数到N-1
( O3 S" }3 q9 F& x7 E C9 h' @9 U- h对于3分频,从0计数到2 即是 N=3
. {/ ~1 `! w3 C+ K/ p4 ~/ s对于3分频,从0计数到3 即是 N=4
$ V- y, K2 [$ a7 S3 I. z' `……
* O. ?& B3 |( D) M2 Q, X1 Y, q2 q
3 p! f, P: R! }- F3 b9 n( p0 t, ?3 m( x- W* Y/ D i
图:3分频
& L4 l5 Y) v" m! e, u' o. l6 ~3 ^, q/ u
' ]" e- l" q, N1 c6 Q" Q8 {* H+ y5 `, G# ?7 i
代码如下:
% T# s4 k0 Z( d2 c9 k0 }( E( B: ~/ Z% g
- module half_clk_dai(
- clk_in,
- rst,
- clk_out,
- cnt
- );
- input clk_in;
- input rst;
- output clk_out;
- output [0:1] cnt;
- reg clk_out;
- reg [0:1] count= 2'b00;
- assign cnt = count;
- always@(posedge clk_in or negedge rst or negedge clk_in)
- begin
- if(!rst)
- clk_out<=0;
- else
- begin
- if(count==2)
- begin
- count=0;
- clk_out<=~clk_out;
- end
- else
- count=count+1;
- end
- end
- endmodule
$ y$ E8 i( ^ u1 t/ g0 M' f * V p4 q( e6 P! b$ `; }5 e. i
[color=rgb(51, 102, 153) !important]复制代码6 H8 A5 V: {9 A7 ~& L2 x
- G1 P0 O; g" \/ @* l5 W: w
) \( U: W/ g) s8 x) q
' v- E( F$ d# K8 E6 Y" K( Z7 ~二、非50%占空比的非整数分频
; L- c+ ^& ~! U$ t7 N9 Y7 L1 d" Z! |; T
实现一个 4.5 倍分频,占空比为40%,不含毛刺。& h9 G% F8 ^ B0 p( y. ~
/ L6 T6 D7 c3 F8 q2 u' Z图:4.5倍分频 40% 占空比
* [5 I0 w6 p5 e: c7 O6 p) m$ j% L0 C3 ?' h' }6 A
代码如下:2 [' \$ F1 g+ b+ S2 N9 B% }; e
- module half_clk_dai(
- clk_in,
- rst,
- clk_out,
- cnt
- );
- input clk_in;
- input rst;
- output clk_out;
- output [0:1] cnt;
- reg clk_out;
- reg [0:2] count= 3'b00;
- reg [0:1] flag=2'b00;
- reg [0:3]temp =4'b0011;
- assign cnt = count;
- always@(posedge clk_in or negedge rst or negedge clk_in)
- begin
- if(!rst)
- clk_out<=0;
- else
- begin
- if(count == temp )
- begin
- count=0;
- clk_out<=~clk_out;
- if(flag==2)
- begin
- if(temp==3)temp=4;
- else temp=3;
- flag = 0;
- end
- flag=flag+1;
- end
- else
- count=count+1;
- end
- end
- endmodule
- 3 |% `0 L2 H' P! ? O4 G
& D1 p- q3 g2 f) u% f
7 W5 r/ G" ?3 T7 m+ y+ C
, N' T' X* u# p, d3 l# V% @+ C" g s
" H! p+ C- ]. o6 O) \7 N' q三、小结1 s5 u" f8 q5 k$ J- s
* m7 ~. _- B5 A- u# e5 q, Q
0 L7 k+ U$ ? m$ P1 v* o# R. P分频主要是对时钟的操作,以及计数器的实现。3 |2 c5 M# u0 x+ Z/ d6 h
! c/ D# L3 i0 o; u& U4 K参考: 群聊天3 Z' ?7 [, [: T; C H/ J
网络
' _1 X4 D) z3 |7 [# T《硬件架构的艺术》8 ]! G6 R4 P! f% }( Q {- W. F
|
|