|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
//偶数分频器,外部带入两个参数决定分频系数。默认是2分频3 y1 ^% b, l7 k. j8 F
//divdFACTOR--分频系数,实际分频数为divdFACTOR*2
/ Z! M+ ~* p& Q8 m% c% H2 V//divdWIDTH--分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR7 D8 B% T. V% E& X, D2 M: F5 v
module gen_divd(reset,clkin,clkout);; N8 `: |4 S4 H6 C, i/ W
input reset,clkin;6 a7 X+ C- q& ?0 y N
output clkout;+ H! \! D) p% \. _8 [
parameter divdWIDTH=1;//分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR4 U* N# }* P+ n' O( y
parameter divdFACTOR=1;//分频系数是divdFACTOR*2( X2 A7 a8 ~6 c0 q' f
reg clkout;
+ A3 c) H, s" |9 H2 U reg [divdWIDTH:0] cnt;
' x5 L6 b& Q# ~5 a; Y: R
) ?; n2 q( m' R2 z. g
3 ?& Q" ?+ {. m7 r: M! [! V always @ (negedge reset or posedge clkin)' `1 n E7 y6 w7 J
if(reset==1'b0)- W! e; l8 W- H4 q
begin
: _9 f4 |7 H; l2 s: Z Z cnt=0;
+ o$ i7 E+ Q t$ U2 I clkout=0;6 X" ~7 K* V+ X) |
end' H; e4 h; b/ ~5 B" H3 Q2 S# W
else
0 W" l& C5 \$ y0 l begin0 K y8 V7 q# y+ a: M2 ?
cnt=cnt+1'b1;//常数1要指定位数,否则默认是32位的
/ ~9 s5 g) r' w: P if(cnt>=divdFACTOR)" r) Z6 |/ J5 F: C8 k
begin
, E' b; k: w/ |' @9 z' Y( u! j cnt=0;& H. n7 c3 {. }) l/ i2 A( z( W
clkout=~clkout;
" }0 D" h) @* H& M" B end
+ D, \' t' {* f end
$ P0 ?+ _8 \) t& j( O
. u8 [' k L; k/ }4 pendmodule
; E2 y. f% `# {$ A8 f* f4 g6 b7 j/ E. c' d1 ?
`include "gen_divd.v"% T( K3 O5 k6 ?8 k8 S
" [5 U1 R' o! G K6 s' {
module led_w_dir+ \3 i2 f t [! h
(
/ P& W4 ]' Z$ _( d, C! D ClkIn," `5 [3 ]/ ?6 m9 r* |: a- g
KeyIn,
9 r- N* d2 p$ | Resetb,
! R% h, _" K! j% n# \ LedOut9 t( u0 v6 ]# S- e0 u
);
& ]. |, d7 j: d input ClkIn,Resetb;: n( H6 X, h) m/ z
input [2:0] KeyIn;
2 M' M9 B8 j3 X( t/ j output [2:0] LedOut;% W- p/ g( }# D8 M9 W
7 ~% t. b/ o/ @2 C0 p
reg [2:0] LedOut;
8 ?; L, j$ h' Q& `8 s wire ClkLed;1 u+ p! V. v: y" c8 N. x
reg [2:0] Cnt; b* e: F; B4 `7 n
; g2 I) W4 A. T, _5 }& s
defparam Gen_ClkLed.divdWIDTH=23,Gen_ClkLed.divdFACTOR=10000000;//10_000_000分频% E3 R3 w3 ^9 j( }
gen_divd Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed)); //帮忙解释一下是什么意思啊。$ G4 h3 F' z$ V# j
4 y* v! {# l) G1 I% Z9 d! G0 P
always @ (posedge ClkLed or negedge Resetb)
# h/ F2 y, R7 b if(Resetb==1'b0)0 |9 X; |9 v: n) i5 o
begin1 B+ q8 I3 x) @2 x+ d7 t& v
LedOut<=3'b111;
; p& ?2 B/ W" `$ |& a) r4 u Cnt<=3'd0;
/ c q% u- d" V/ t5 s0 B2 l end. J. ^, X& P1 W9 s; D R
else/ U5 @8 E/ ^ x: I# g$ G6 z
begin
& A0 m2 A& \1 a" E! M7 ` m+ R3 b if(KeyIn==3'b000)
8 N" G; |, \: | begin
& u2 q4 D; B! F* s$ X if(Cnt<=3'd2)
4 r5 G' {$ F6 X! e, Y" h begin+ b5 p9 q2 X! K
Cnt<=Cnt+1'b1;
% D$ `" K2 x3 f3 H5 Z% k0 S LedOut<={LedOut[1:0],1'b0};//拼接
7 r4 }, S4 t: P' u- { end0 t) ^# d7 H3 Z/ l
else
* ~# I" X" J% W% [% F* w begin
9 T1 D$ J* y5 g# e Cnt<=3'd0;
8 c% U% I$ s# O LedOut<=3'b001;
$ X& x" M9 k: Y7 ~ end
+ `* p1 A: O8 d3 L4 { end
, S$ X; _3 K( ~5 f0 j7 v# Q else if(KeyIn==3'b111)* d# [7 i* g3 Q! [8 }
begin* m: ~) ~ z- s1 D$ G" u3 K
if(Cnt<=3'd2)
B, a1 g. \! T8 ?0 m begin. ]! O' w+ [0 v) @" d* o, f8 Y
Cnt<=Cnt+1'b1;/ w5 o0 r& T( J$ K% D: k8 S
LedOut<={1'b0,LedOut[2:1]};
& R2 r3 h" h* _$ d; E2 d5 q end+ X1 \& m+ @4 a+ }/ O
else $ J$ N* u3 w8 k6 X& g
begin: N' j0 u5 c! f' _: N
Cnt<=3'd0;& l/ Q; @9 g- \
LedOut<=3'b100;
2 m1 R$ J3 E; ^% n end
/ u" v. M1 Z9 ], M9 x; b end
I' |6 B, a' h end }- i/ ^2 B. C6 X
endmodule |
|