|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Taio 于 2019-4-10 11:05 编辑
, c; H. {, i8 T* g# Q) s' y* g( j& D( E0 Z- X% s' X
转——【FPGA代码学习】实践一下FPGA时钟分频 9 I+ X0 ~4 ^& q* p L
以前小伙伴一起讨论过关于 关于 FPGA 时钟分频? 这些奇葩的分频,可能也只在IC内部用的到吧,由于好奇,我也来尝试一下。/ } z$ H+ _, t/ J9 |! ^
一、 具有50% 占空比的奇数的整数分频1 E& \; L& t; a
对时钟进行N分频,创建由时钟沿触发的计数器,计数到N-17 W1 H' q F8 u* q
对于3分频,从0计数到2 即是 N=3
7 _8 q; n& h- g1 W对于3分频,从0计数到3 即是 N=4
: D, i' }" \! U5 U5 m" d/ T ^) [……
( F) L+ c' L7 @; p/ ?! E3 Y2 A' I
+ E2 W* B) G: N( U) S( {( u6 c
1 R( E( K& W0 m. l图:3分频 / [$ _5 n; `3 ?& O
& L9 ?* g( i' A, L, T* Y: ]' ^3 N/ a* k
v H) z9 w* Y$ o' N3 \& [代码如下:
$ l' R/ d5 I/ O) t8 p9 b/ i+ y: w/ U; h4 B1 }6 @( Z
- 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
; U' P) K, z7 A$ b1 @+ s& I
: l( w( I; v9 R9 e1 k+ L, H* {% I[color=rgb(51, 102, 153) !important]复制代码- F: s; X- P7 Y) B
9 B3 U; C! s0 [& T0 Z3 n4 {7 b4 I" D, t
9 Y% f0 a" z4 g3 N" u! N. t
. ?2 K' |( k- x& H; g二、非50%占空比的非整数分频
9 O8 n& a7 {6 q, v" Y4 r. L& V' b, s1 S5 E- j7 t/ Y
实现一个 4.5 倍分频,占空比为40%,不含毛刺。
# d2 c+ |1 ^* T( i; Z- y$ B, A5 O, a' W7 H- l. Q2 }
图:4.5倍分频 40% 占空比
' k1 T, M& ~- F1 S7 d) B& A( v/ n% _6 Z2 N
代码如下:. K8 z( ?! _: @# \- [; G5 ]
- 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
- ( u' w) j# d9 v+ j( \) k
3 n9 [' r( ^' k9 Z9 J2 g+ E
7 i7 I8 _" F8 q {
N; Y$ f( R( |5 b5 ~# J" y. U$ J3 Q8 P8 w4 p1 L
* T/ d( e, h# S e
三、小结0 f, A3 U1 J+ b, a( e( E+ h) R8 E3 V
4 Y+ B- ^: t" `
4 N: t$ S) G5 @( N. m
分频主要是对时钟的操作,以及计数器的实现。# k8 b. L1 }8 F6 e2 i5 ]
6 B8 F8 {9 A J0 x
参考: 群聊天
) I p( H! M9 G' Y" C# G3 a5 o 网络
" v1 a0 d2 ?+ ?《硬件架构的艺术》
" ^8 j% @, p9 w$ ~ |
|