|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
//偶数分频器,外部带入两个参数决定分频系数。默认是2分频
6 t' _: U5 j3 K% Z" j) X/ n//divdFACTOR--分频系数,实际分频数为divdFACTOR*24 ?9 h5 h/ e2 Z3 B- q- e5 Q
//divdWIDTH--分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR# [/ J {% U; a) V
module gen_divd(reset,clkin,clkout);
$ X- ?8 L. k; F: c6 w/ h input reset,clkin;
7 [: k, {0 [; K$ Z# A# E" ^ output clkout;2 u$ q; s& G. k9 i- Z
parameter divdWIDTH=1;//分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR9 X- M0 `% h4 v, l& S/ i& z$ }- P
parameter divdFACTOR=1;//分频系数是divdFACTOR*26 o$ H8 W. [8 c( N
reg clkout;4 M* Z# _( J- V+ O- H! P. b3 r0 i
reg [divdWIDTH:0] cnt;
6 d- u x: b" a
1 _! ?& u+ g3 Z; e6 Z
: U1 o1 D8 a8 J a* [ always @ (negedge reset or posedge clkin)! E+ Y/ N7 s) F( U: F" P1 U
if(reset==1'b0)0 X, C- ?9 j! I" e+ z
begin T4 j1 P/ Y+ b+ V& |/ Z
cnt=0;
7 H9 |# U0 ]* @. e clkout=0;
/ G- X' M; M, N5 m/ s2 _4 \ end
; ~7 G* L! t6 p. V else
% ~. x9 c. G* J' w/ {( I3 @( [ begin2 e0 N. k# N2 K) D
cnt=cnt+1'b1;//常数1要指定位数,否则默认是32位的8 A3 B1 M/ B4 s! w5 k1 \: m
if(cnt>=divdFACTOR)
, x* L! o9 w% M3 `" k! v, {5 X& s begin( a' H! z+ S3 J0 ?1 P
cnt=0;1 R7 W2 ^% X- O
clkout=~clkout;
f- @# I& @9 X( d, `& _8 S end " U, M8 e+ ~% Y9 F0 M& m
end( X& P3 b6 n. F8 i3 r( ~
# _ W+ \+ E: c- i! i+ a* l, w
endmodule" {3 ?! J- g1 [6 u0 I
% E( _5 X( u/ T" Z6 v, G) S: A
`include "gen_divd.v"1 t$ O) \! i5 b/ I
! I" _, g3 s, e- C/ R
module led_w_dir
8 @3 W! Z( g7 P8 M( c# T (* O$ j8 J A3 w& z9 Z. m1 @4 P( @
ClkIn,+ @/ w8 l7 d/ h- G0 ?. g4 i
KeyIn,, e+ f& _- O9 [
Resetb,# B: G1 v4 H+ f4 J
LedOut* A7 i3 m* ? P4 v, H3 B; f
);
: d! o# y* l6 X! R input ClkIn,Resetb;
- I0 G" K& z% i4 `; o m input [2:0] KeyIn;
5 G) d6 o5 ]+ Y. H' ?. h* E* h! | output [2:0] LedOut;
7 y7 A2 r! @7 n$ b ' V1 B2 p* p+ O! B3 U f5 B
reg [2:0] LedOut;
+ \$ G$ u& }3 T" \ wire ClkLed;
( s# E: y* p2 o% S# d+ m. ^ reg [2:0] Cnt;" e3 l8 Z6 R3 |6 w( J( W
6 E8 r2 o" _0 b7 c; K$ i# a" p y
defparam Gen_ClkLed.divdWIDTH=23,Gen_ClkLed.divdFACTOR=10000000;//10_000_000分频4 P) f4 t9 Q. X' u0 T+ M
gen_divd Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed)); //帮忙解释一下是什么意思啊。. _% t/ ~0 \* t m2 O
. i/ z3 O; \7 J; V always @ (posedge ClkLed or negedge Resetb)
. s" _2 H* C7 f2 ~ if(Resetb==1'b0)
( l# V% f3 y9 F4 l8 x' K4 D begin
6 `& Y, H" {8 j( B& R. t1 z LedOut<=3'b111;
* |; m0 T) [7 s9 l Cnt<=3'd0;
8 y% T5 B/ B4 O) l: L* {3 a' @ end1 j8 _0 H3 O! Y+ U
else, C3 o% l# t$ I% L# l+ v3 \" }
begin
* S' Y, ?& j! z$ I if(KeyIn==3'b000)1 r2 b9 X% X0 ~. E6 S7 S& i6 I
begin
9 M" [6 R! \' S& y+ s1 O if(Cnt<=3'd2)
9 b$ u4 |$ e; _3 { begin/ _- D/ z3 w7 z/ j6 u- J% s
Cnt<=Cnt+1'b1;
! c# ?: h6 R0 L7 I" } LedOut<={LedOut[1:0],1'b0};//拼接
- p: A! w2 \; e2 h3 _6 `; b. K end9 X2 |0 [: `1 l) w" M; k
else
8 V* c) w6 F5 Z7 l& A( S0 f3 |5 l7 ~ begin
4 `4 P" W; I ^) }( y6 P) Q& d Cnt<=3'd0;
, ?3 L, O/ y; F" K2 j' p LedOut<=3'b001;, g2 o% S2 Y* R- }
end% q# T1 X: S3 Y9 r, u# I
end2 q# f# W3 s5 l& |8 A
else if(KeyIn==3'b111)% l. l& i9 s1 D, s
begin2 ?1 o8 Y' f% u* f) q+ V7 V
if(Cnt<=3'd2)$ b6 l3 |) E9 [$ O$ o, B+ J
begin8 ~; a4 B, F* H7 {$ d9 g4 B. F2 k
Cnt<=Cnt+1'b1;
/ I- I6 ], W, d0 p1 d LedOut<={1'b0,LedOut[2:1]};# i7 n" Y: L2 _. e8 `/ t, |
end
5 G2 f, ]/ ]+ ?: t else
$ M4 H) C5 o/ N/ K3 L0 L6 P# j( w begin
: V# k2 n: b4 I( f+ @' k* a Cnt<=3'd0;1 P \6 B* |1 ]) o
LedOut<=3'b100;$ v( K4 I: b. g3 Q$ f7 M. X, M/ H
end; D6 d0 n7 U n$ z n j
end
" w: Z7 Z- Q5 T# ~$ G, s end
. }3 r9 x1 M! @endmodule |
|