TA的每日心情 | 开心 2019-11-20 15:00 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
分频电路的verilog代码 & o2 E2 v7 T. G* A
# E1 Y5 q; R: Y
系统时钟为50MHz,分出的时钟为1KHz。$ x0 W2 }# \/ r+ b, }, X& k q
module freq (clk, rst_n, clk_1k);: A& V4 B/ n) T( X# L. `# A
5 O1 Y$ }; L$ W, R' y4 {
9 P4 E7 ~/ [+ g& @" Einput clk;
" h2 l: F' p% T6 Linput rst_n;) r( P- p" i. d" k" u7 y
, Q' u" f! t$ Y+ b. k! S
output reg clk_1k;& K4 L4 @0 t9 y( I! V6 r) b9 B( `
R: C$ {) K# R8 F# S' ^3 z
3 |9 H) a1 ], p
reg [14:0] cnt;
9 y5 \& m/ A ?" M; N% u6 {" T, W0 ~1 q) x$ o1 Q3 p
always @ (posedge clk or negedge rst_n)
1 w- w. B! n* t3 W9 V, J$ R( qbegin* h) p/ @: T, W
if (!rst_n)
# y. d* ^3 n) _: F1 w5 Q- _! fbegin6 _( H; ?( ~5 Q- Q5 X
clk_1k <= 1;" W8 h) j, u( t. w. O+ t
cnt <= 0;
! r& t8 `6 z2 j' f; ?end
9 k' X. h% Y4 w4 U P ]/ [else
0 V2 O% M! M3 Y- {2 bbegin/ W' h5 M" f5 Q% N8 ^* u
if (cnt < 24_999)4 I0 A' t2 m: Z7 X. A: V( `
begin
# P( \' B; z3 d( u! y, o, qcnt <= cnt + 1;. r C& P. }( y* n% w1 P: C
end. K u+ I: g' A5 K/ Y
else0 l" u7 h: `. P8 Q) B
begin
& I; R6 T7 t8 d8 V1 H$ ]cnt <= 0;! i6 c. X; G% @" w" T' E- ^
clk_1k <= ~clk_1k;# `' ^# r' {6 n _8 D* o
end
! p- f8 N6 y5 k9 n# \0 m: K3 Iend( I+ }1 @3 n1 C1 r
end
/ r/ N+ v4 Q4 E2 |0 j8 n. t8 `
: B+ u0 r, g: K- x: a/ | _8 E$ K& l2 jendmodule ( ^2 C, r: O/ D! w$ M) o
那么24999是怎么来的呢?这个是计算的关键,我是这么计算的:
2 ]7 q& N2 N! w$ i$ C, R4 a50MHz的周期是20ns,1KHz的周期是1ms。那么1KHz的半个周期就是500us,经过计算是20ns的25000倍,! |+ w2 ^. C3 [2 @" A% {7 d. l
所以计数要24999。
/ `3 O$ R0 d9 m/ d [8 d1 j这么计算可以,但是我们如果把计算的过程化简一下的话,就应该是:' f, y' t; g3 | y
计数值=((系统时钟频率/想要分频得出的频率)/2)-1; | 6 s: O9 b" E$ J0 A
|
|