TA的每日心情 | 开心 2019-11-20 15:00 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Ferrya 于 2018-12-6 11:13 编辑
& x8 Z/ ]8 r, {% e6 [) ` M: L h$ y# n
分频电路的verilog代码
0 e8 a7 Q. d! q' v系统时钟为50MHz,分出的时钟为1KHz。
6 x% L/ |. }; k7 g' Rmodule freq (clk, rst_n, clk_1k);7 O7 U+ w8 s: l1 \; F
: z8 [+ |8 ]/ b0 f# s' U5 z ?+ Z: W( c% A
input clk;
' {, L6 a% J9 S! c/ ^8 m* n, ^input rst_n;
4 {6 b$ |6 v0 Y( ^6 n8 \! k
, s6 |/ J" K- ~! h: W4 routput reg clk_1k;, \2 j+ c( v0 o! S8 ]7 [
4 h5 { g$ f7 M0 C% y) Q$ l
y0 ? x3 c$ U. \# ?: w1 G" l
reg [14:0] cnt;6 }6 D6 a$ J# {* o0 k1 w
+ E! V2 I) O" L/ J6 R
always @ (posedge clk or negedge rst_n)
" B0 Y; b- o2 R3 P0 c% U0 Z8 E5 qbegin
3 g/ c- d" x3 F) w5 _1 u; z z! kif (!rst_n)1 S8 @) q2 h/ H- W4 n
begin5 m, i0 a% T, A% K# L9 H
clk_1k <= 1;
% ?( @: x; G1 D, J8 Q4 \# icnt <= 0;7 N" ?% ^8 f4 B* C G' e, K& N7 {
end
# ]* {3 W9 h' Pelse
. j0 q1 N0 N5 f' jbegin
4 P7 ?$ N) D1 n( j4 Gif (cnt < 24_999)
. y. k- I2 n* |) W" |9 abegin
0 v; `' d6 u, t8 Acnt <= cnt + 1;- `# ^# p' H9 `" q
end! G r& o3 o* ?. \3 o
else) _4 s, j5 W+ f
begin
T0 _9 T2 K3 Ncnt <= 0;, X/ c w0 T" m! Q# {2 ^. m
clk_1k <= ~clk_1k;, W0 y& V# v4 N/ e- k
end
; z+ C y0 [1 D- c$ t$ h4 Oend* a% c! u' s2 v
end# o- b- h @/ A: n
5 ^. r7 a1 U2 ]' @( q1 c
endmodule $ f& {; N0 P/ m) V8 u9 u; }
那么24999是怎么来的呢?这个是计算的关键,我是这么计算的:3 a3 M/ m5 C9 r w f$ H
50MHz的周期是20ns,1KHz的周期是1ms。那么1KHz的半个周期就是500us,经过计算是20ns的25000倍,
; R$ a; j' s' c9 C9 j7 S所以计数要24999。
0 G% o, L- ?, Y9 @) D这么计算可以,但是我们如果把计算的过程化简一下的话,就应该是: d3 Y" }1 ? `/ C6 Z0 j6 ^' L
计数值=((系统时钟频率/想要分频得出的频率)/2)-1; | . h- }5 g' ~! s% Z5 A; c
9 f1 Q" [* j4 \7 t5 C" C
! ?1 E: Z$ s1 ~- {2 K( o3 k9 n' Y# x' M# b& k
$ j" K! `! D4 T
| 0 T+ x" q9 [0 c$ z( p
|
|