|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
//偶数分频器,外部带入两个参数决定分频系数。默认是2分频
& @) q: @8 i9 k+ K! x5 t* b& W0 i& p, o//divdFACTOR--分频系数,实际分频数为divdFACTOR*2
3 `' j9 }. m; r2 K' d% y1 T1 v//divdWIDTH--分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR
3 K' I# o: c$ ^! H7 `6 gmodule gen_divd(reset,clkin,clkout);. p9 n+ b5 p0 H0 x0 n. D
input reset,clkin;
1 U) r1 I7 J! W: ]7 o4 t; W output clkout;
) n5 v/ `( I8 ^1 ^ parameter divdWIDTH=1;//分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR
* I! r- h- \1 I/ k parameter divdFACTOR=1;//分频系数是divdFACTOR*2
! I9 ~+ y7 A6 ]1 B& Z reg clkout;* E" m( j( t7 G+ o# m
reg [divdWIDTH:0] cnt;/ \- u, k. b. ]: C; n
+ V1 o4 h g. {6 b
7 ~ B, [7 y& P" ^) X0 { always @ (negedge reset or posedge clkin)
% E: f( ~! U) Y* H0 U* Y: I1 F if(reset==1'b0)
- i7 {/ n% M- }' n begin8 ]( ^! {( i4 W7 t; s, ~
cnt=0;
% {) H* i6 _/ h4 }$ o clkout=0;
+ g- W: g1 c' K end
$ s# v# g2 o% t! h0 \ else
9 @5 l- i' H& H begin
* w; n( S' R: g X. V+ p cnt=cnt+1'b1;//常数1要指定位数,否则默认是32位的& E2 G- p$ `3 X! G& [. n
if(cnt>=divdFACTOR)
o9 Z' u/ g( y. @& U' N6 H begin
0 r, `3 ]# T0 T1 k cnt=0;* n. k7 I0 ^2 `3 ]; |8 c
clkout=~clkout;3 k& d- a( f, U5 C( L
end
1 d+ t* U: Q# g' A( D) x end& N, r% X- A9 u, i' i4 S7 g5 ]& b
! k5 C' l8 L& l5 u4 ]3 xendmodule' { X2 b C$ C1 Q( l# b
/ l- D* t) R2 l7 q( O" s/ L`include "gen_divd.v"! y( T: C9 g6 }
: b4 i- s- A6 J! q, I3 Y8 P& w& L
module led_w_dir- p0 b& v) ^, S8 g; |- a* Z4 w
(2 q2 n0 H! X' }/ V% \' l/ L
ClkIn,4 O M" {2 a- S" p! S; z
KeyIn,; a& t4 S! U# W3 ~, \. Q5 N
Resetb,
* ^3 Y8 }6 e* v3 u* B! m LedOut" K' }( `9 p2 C: `3 @$ R. u* L
);
) ~5 \5 C$ e8 g input ClkIn,Resetb;
3 z: A7 E5 N; w5 M- ? input [2:0] KeyIn;
( ~7 u+ F: D8 z2 s output [2:0] LedOut;
% J3 ?# T/ {+ E. h( M5 @' A3 C8 E0 M
* e# E5 Z! v% a$ z N reg [2:0] LedOut;
6 I6 I" x; b1 A: O( t" G" w wire ClkLed;4 H; F9 d. v; \$ q2 d
reg [2:0] Cnt;
1 [1 g* ^+ B* s! y T: Z
1 \+ M' y9 N5 T/ } defparam Gen_ClkLed.divdWIDTH=23,Gen_ClkLed.divdFACTOR=10000000;//10_000_000分频
6 H$ {1 h$ n& r gen_divd Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed)); //帮忙解释一下是什么意思啊。
1 C1 {" r7 X7 v8 t# i+ d2 T
m9 B; F% s4 K, n# S7 h9 A4 q always @ (posedge ClkLed or negedge Resetb)
: Z M4 Z' p `! K' ~ if(Resetb==1'b0)+ R, ~% j0 }1 r1 r/ F4 T; D
begin
* d& G0 V! j- _% M* J LedOut<=3'b111;0 P m: S' j2 N+ z+ X1 l5 d
Cnt<=3'd0;2 B1 ?9 ]' @8 J% r9 F8 `+ r6 I
end
: C6 J7 U4 P! y7 Q1 a' I else( {( u! a6 N0 a7 b4 s% F
begin
E0 ?# L' e0 K if(KeyIn==3'b000)# \: t3 Y* u. f8 {2 O. n3 ?
begin
7 A. F% d5 x! [ if(Cnt<=3'd2): ]3 ~. n# c7 y4 Q/ j8 w0 n
begin, @/ r% s! j$ f" J% `- f0 J
Cnt<=Cnt+1'b1;/ W F' D7 V; H5 ~; I) ?
LedOut<={LedOut[1:0],1'b0};//拼接# x" r& J* s8 N$ P$ F
end
7 d, V7 v% C8 W0 V* H else
3 l0 E: k7 v% X begin
0 t& c1 X/ |! p8 j# S" K Cnt<=3'd0;3 p9 z9 h/ B! W
LedOut<=3'b001;
, B" O7 s7 a. C0 m* | end$ E8 b, X. ~2 q. b4 m
end2 E( @# [6 c& U
else if(KeyIn==3'b111)2 \5 e, `3 X! `+ L i
begin
# y# b; _. j& I if(Cnt<=3'd2)
0 G) p7 m3 h, i" k begin
, w9 D8 {$ D3 J' P! s Cnt<=Cnt+1'b1;1 v9 n# Y2 a5 r [1 q7 _2 |
LedOut<={1'b0,LedOut[2:1]};
. E' z% G# C$ `% v8 U( `! O end
8 W0 f1 O0 s! L& g+ ] else ! [( B9 v4 E: x0 Z, Q) w7 a' [
begin
6 Z8 e' E2 K$ e* w Cnt<=3'd0;" p. n8 R } v4 m( b
LedOut<=3'b100;; R: y8 d, t' t* i% x @
end
% r7 o F8 v- _ end6 H0 R( N" s9 I
end: k+ M9 f+ w5 {* u6 h6 A& d
endmodule |
|