|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
//偶数分频器,外部带入两个参数决定分频系数。默认是2分频
) y1 q9 Q0 ]9 S( t5 l//divdFACTOR--分频系数,实际分频数为divdFACTOR*2
. v9 E+ `# G2 a7 B8 P: J6 z- p6 p//divdWIDTH--分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR4 D0 g! X4 }" K" |
module gen_divd(reset,clkin,clkout);
* a- }0 q( {( x+ P input reset,clkin;
4 x9 @3 n; O" P2 v& v, n output clkout;' t. B$ u& b2 N4 Y9 _- }/ p
parameter divdWIDTH=1;//分频计数器的位宽,实际位宽为divdWIDTH+1,该位宽所能表达的最大值>divdFACTOR
5 B' Z2 T( _0 S% `8 t parameter divdFACTOR=1;//分频系数是divdFACTOR*2# N" z; g5 u3 _! w% d
reg clkout;' [9 @) E1 i) G* y# z
reg [divdWIDTH:0] cnt;; W7 C. V) M* B' m& u; P+ ~9 y1 W5 _
3 R+ M& D+ L2 z - z) g+ b, z T% x$ T
always @ (negedge reset or posedge clkin)6 E) i# x+ Q6 c0 S; |
if(reset==1'b0): t2 q# ?6 E; E7 i; J
begin
/ p/ A) w' b" O k) g cnt=0;3 M5 a% M. z( N" S
clkout=0; R. p$ A( g! L% g1 u$ S
end4 k0 K5 z4 ?3 C8 `7 G) V- e: a
else& ]2 ]$ r4 o/ \. E/ b! @+ q: C
begin
# S" z2 z/ _3 M4 L9 v, t) x cnt=cnt+1'b1;//常数1要指定位数,否则默认是32位的
: U( F7 J1 m1 s4 A) @ if(cnt>=divdFACTOR)( ^0 {8 G% s6 m+ _2 c; j( g
begin; X( P! H! t0 P3 Y5 b
cnt=0;
& p3 L' e# d6 O. G6 D/ C! G clkout=~clkout;
* P `& h U; c$ f end
h" J# c) q5 }: R3 A end
+ r$ ?! t2 @! v# J; G! H) @; c4 H7 E3 B/ ~) e5 b" r
endmodule& {7 u# ~9 V1 Y N4 |& G
" c& [) V- y7 f# ]% }% k1 M: I6 }`include "gen_divd.v"
q: _( D3 A8 T- m8 E% ], C y1 G5 Z ?3 B. S
module led_w_dir
5 `4 {) ]5 U$ e2 d5 q5 D (; |7 U; R% f& _
ClkIn,( m. k. `/ P6 I |
KeyIn,8 P8 j3 g1 P: [7 r2 h4 G9 v
Resetb,
! h* \$ y3 F/ u3 f' t" s- ? LedOut
( U# v; T# m2 n1 Q S! X );: c! L) S0 j$ }( v4 W% l+ Q" U
input ClkIn,Resetb;1 c1 M& t7 {8 L1 @# m% o2 a
input [2:0] KeyIn;( j. @: {+ ]( o: x. r
output [2:0] LedOut;
3 r! s+ {! D- g( Z8 |( }
: U: Q! [$ e4 _* t/ H" p reg [2:0] LedOut; 0 J, B! [5 o6 r2 ? L. z6 t y
wire ClkLed;
) I7 G/ c4 W; {* k reg [2:0] Cnt;
$ B- B2 t$ f( o% I+ N$ b; t' z4 W: A" ~ 9 z, F0 P1 C2 x% Q3 w
defparam Gen_ClkLed.divdWIDTH=23,Gen_ClkLed.divdFACTOR=10000000;//10_000_000分频9 I0 z4 u2 x) x4 }9 I
gen_divd Gen_ClkLed(.reset(Resetb),.clkin(ClkIn),.clkout(ClkLed)); //帮忙解释一下是什么意思啊。# K. s' S# Z2 g' N' L
. h8 [( Y- w* G- o; Q4 o, U always @ (posedge ClkLed or negedge Resetb)
% F4 w2 B) g* w5 V9 t! Z1 }% M if(Resetb==1'b0)$ @2 T+ X4 K4 g) n3 }2 y1 s9 D# \
begin
& o' F8 N# ~* M# @) o LedOut<=3'b111;: f a5 c+ i2 r. ^
Cnt<=3'd0;
' ^7 T" w$ i& Y7 l end
" t, ~. E- K% h" E: U else% ~$ x# ~4 v/ T) l
begin. P" B* a8 @) O1 |
if(KeyIn==3'b000)
6 f6 m8 n3 x7 p. F9 l begin
+ m, I, G K, ~7 ] if(Cnt<=3'd2)
9 A& K4 I K* y$ B! t# O7 D$ { begin
1 d* q) p8 ~. u. Z _ Cnt<=Cnt+1'b1;, R, O9 q' [& q/ r* p2 K1 k
LedOut<={LedOut[1:0],1'b0};//拼接. b- Z& Y) Q0 H
end
. h) }) Y( i/ }( u8 k else $ W" |" l4 }( Q. R
begin
" o, A: ^0 @( O5 J Cnt<=3'd0;5 e8 T# H6 B' F6 o, W
LedOut<=3'b001;
" H M; C- ~1 s' U" X t/ [& K end
5 a& Q) q( e0 b. K5 Z# u: g/ f end* c' N! Q. X5 {5 ?: b. w4 Z
else if(KeyIn==3'b111)" x4 ~2 `2 ~( ]( {& L* |; w
begin% s% _% k% m% i% |
if(Cnt<=3'd2)$ M6 }- p) r; p& |$ U e) x
begin
4 h9 d& q0 C$ r- U3 h Cnt<=Cnt+1'b1;/ @% Z7 H" f" n2 E {6 u4 t2 e
LedOut<={1'b0,LedOut[2:1]};- h3 U- q8 _ }8 g$ Y; Y: L
end' T: i8 T2 o0 F( G x+ M6 Y
else / \4 |3 _7 _. b- E/ p8 A5 I
begin
$ R2 f+ h+ i J Cnt<=3'd0;, \8 Q/ I$ E. s# k
LedOut<=3'b100;
# J$ s* b( a: e C& w+ M' J end
; l: \% Z/ d# X8 F end F* m- \3 h- ~# b) ]
end
4 L( i; b* ?! C* cendmodule |
|