TA的每日心情 | 开心 2019-11-20 15:00 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Ferrya 于 2018-12-6 11:13 编辑 % h( j# T& u. e3 Z- O+ I9 g
% Z% X0 H% c3 Z2 U- I: e
分频电路的verilog代码# v! h: n: C" K/ ^5 ?$ b C6 @
系统时钟为50MHz,分出的时钟为1KHz。! M4 q& ?+ s4 o
module freq (clk, rst_n, clk_1k);7 }+ f8 @8 l& b0 Q! v" n
# X8 l$ Y/ D3 B4 Z$ H, V* c! |
0 G3 v8 h" F" T8 N: J3 H. [input clk;* X" f+ z" ^! c Q$ X& e2 w1 f
input rst_n;
+ M; r/ f/ l7 s( h
$ J) ~5 Q- G; coutput reg clk_1k;3 o: ]. s: S. G( P$ G
/ G5 F$ \ ]/ ?! l" M) y3 d
5 g E8 w9 a6 i0 p2 J) v6 jreg [14:0] cnt;
+ Y* ~- l. a: H' T! u+ P9 T1 |' c5 Q y# O; g
always @ (posedge clk or negedge rst_n)) q' m: b9 p. k
begin5 {$ N* q# j8 t" ]
if (!rst_n)
1 O5 o* g7 B; Mbegin" M B9 T i! Q G
clk_1k <= 1;
( @5 W' S; W* Q5 U' f5 ~cnt <= 0;; G' H! u- b1 N) s: d; ~$ `( r( `
end" @) U/ H0 u0 t
else& u, A! j: I; K9 d: l I
begin9 H, q& r& x! e$ [% l
if (cnt < 24_999)) p; y4 E7 c& {( R
begin+ B* Q$ a1 z1 ~) U$ B8 l
cnt <= cnt + 1;
+ T& i; V7 ?6 E; R" jend% {, E$ @! m5 A, }
else2 _6 l: x7 r& s" F! z6 h
begin4 Z, f# O9 @4 M) ]3 q2 m
cnt <= 0;" B( h! p( Z# ^3 K' d Q/ O( y( {; i! `
clk_1k <= ~clk_1k;
' f w1 \& ^, n% ^" ]end
' @. ~2 |2 J) A- t# V6 L% ~end' \; N$ h3 P$ k5 k
end y% O8 d% [, S+ L
V9 V$ X( z( r# \
endmodule
3 g0 b+ Z8 W5 H3 D) `那么24999是怎么来的呢?这个是计算的关键,我是这么计算的: Y9 t9 L3 Y- W
50MHz的周期是20ns,1KHz的周期是1ms。那么1KHz的半个周期就是500us,经过计算是20ns的25000倍,: z0 D) \- b) @
所以计数要24999。
# n8 P$ f+ H! C9 I这么计算可以,但是我们如果把计算的过程化简一下的话,就应该是:
4 ` {. Y0 M Q( V: n4 s计数值=((系统时钟频率/想要分频得出的频率)/2)-1; | # P9 u9 j0 m8 `) p0 F
3 r' c8 m- b1 T9 h! R4 ~) B; E. u9 S/ P
. i1 L9 F$ P0 g) Q
( ]2 b) d& N7 {* j |
( q; c8 r/ A2 u& e: x: n |
|