TA的每日心情 | 开心 2019-11-20 15:00 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Ferrya 于 2018-12-6 11:13 编辑
& i8 {8 _' e0 E
2 d, O1 k) X) n分频电路的verilog代码
7 p! s) p" a6 x% S1 s5 T( K0 w) _系统时钟为50MHz,分出的时钟为1KHz。6 w |$ e) e; s& m" _- [9 I: ~1 V# s* w
module freq (clk, rst_n, clk_1k);7 a3 V' V' u6 X4 k N3 D) @/ j
+ x, d5 W: c; F( J6 e; D3 f2 X% k& A d3 f
input clk;/ z' F* d8 c" ^* X. |
input rst_n;/ z6 b. k% g( Q7 b
9 K1 q2 E" V5 Y. Youtput reg clk_1k;
* E! Z' _% N* T0 v( J3 B9 Z3 j% ]' ^1 ]+ F) U6 H1 S% a4 @( O
: g# ?8 W: O" o/ t: ~7 s8 Yreg [14:0] cnt;/ H: U2 J, `( `( R$ B+ ^2 }' N6 t
4 P6 _3 ^/ H# c$ B+ f
always @ (posedge clk or negedge rst_n); u0 k# \# m2 d
begin# [7 ~+ P. h+ [3 U7 a" t- M
if (!rst_n)
/ H, }- S: D i/ xbegin6 p1 O; i& [: t
clk_1k <= 1;$ d: ?4 T# a" r( H: }
cnt <= 0;
; ^& [7 N" C" T f# s6 c2 cend
" S+ u6 w, Y" i. ^8 y" t2 `% Nelse7 t2 z: a, ~5 p6 c( Z- Y' S
begin
4 h1 O0 z' L7 o- `/ bif (cnt < 24_999)
. X! a, k v; w1 C) Sbegin
. t0 p. a' |$ ?6 A2 Rcnt <= cnt + 1;2 L+ d {4 F% e) y
end. {1 j% @1 i/ \3 m, ^
else* k- v$ W; I6 Q3 y% }
begin. n0 ]1 f) }0 @) d4 E8 s' z( k& x( k
cnt <= 0;3 U3 `3 l) u0 X& b
clk_1k <= ~clk_1k;. \- `5 l4 B- p) V6 X, l T
end$ m! i6 ?1 c' H
end
2 g5 O& K; `8 \: {% t" M( L; eend( c Q% k3 t- s: t
) d8 r+ ^+ M. B9 v4 J
endmodule ( o- I% A! Y) U
那么24999是怎么来的呢?这个是计算的关键,我是这么计算的:
8 G8 @" K3 f; |7 r5 G2 m2 y: e3 p6 N50MHz的周期是20ns,1KHz的周期是1ms。那么1KHz的半个周期就是500us,经过计算是20ns的25000倍,
( d( A! W, S% I" H所以计数要24999。
7 L# f2 L$ j, J3 e这么计算可以,但是我们如果把计算的过程化简一下的话,就应该是:
1 s, V. |5 Q+ t计数值=((系统时钟频率/想要分频得出的频率)/2)-1; | 7 P+ [$ o/ s% w Y: k1 ^7 i' ~% P8 [
3 O6 P. I; B# i8 e
! Y% O9 F; n$ @
; W) e) a# ?! K$ g/ g" ]$ e, x% n, l/ p1 q
| " ]8 e. S) Z' V6 E6 r3 @7 J
|
|