|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
不用分频器的方式点亮六个数码管
: P! g& O3 ~9 C& ?0 f/ F
, x7 w: J+ }9 ] ^& b为了达到六个数码管同时被点亮的效果,则要使数码管位选信号变化频率在1000hz左右,也即sel的变化频率在1000hz左右" |( ]6 A$ o* S# y" s! U$ O
8 n3 m" C% o6 Z' u3 _为了使频率达到1000hz,好多同学选择了用分频器的方式,当然这种方法得到的是准确的1000hz。我用了另外一种方式,也可以点亮六个数码管,虽然频率不是准确的1000hz,但却很方便。1 e5 t$ \# Y* X1 i7 v9 V+ ~
% ?: q( z' \5 i: G9 G% @
设置一个计数器【31:0】count* }+ q" G( ` o: W( ?2 o
这个计数器的最低位count【0】它的计数累加频率就是时钟频率50mhz
- C5 P! Y8 M- U4 z& s5 T而第2位count【1】的累加频率为(50m/2^1)hz
9 X2 y2 v& a+ x W3 C# R它的第N+1位的计数频率为(50m/2^N)hz
' U+ s; X! T& E, a8 U+ v7 `由此可的
+ r* c' K5 ?! k2 E% U" C m第17位count【16】的频率约为760hz,也可以达到点亮数码管的效果
L# }. L# v: ~可以设置一个中间参数B,令计数器count以B为单位累加,达到更精确的频率值。f_out=(f_clk/2^n)*B。
6 C+ C; [: h K取f_out=1000hz,f_clk=50000000hz,n=288 P g }% {) ?% E/ i% c2 P
B=5369,所以程序为' |' U& }- ?, g% g
?2 X- l4 b" t* P9 c( nmodule smg(clk,rst_n,seg,sel);/ `8 }2 f# j2 h8 G- F
input clk;
8 W) D; x/ i% @5 s2 d input rst_n;. `- V+ H6 a2 S+ `$ C' x2 p
0 N* t$ f; ?- A9 R& X3 \, R+ L output reg[2:0]sel;
# i" J A% t+ Q4 X- K( {7 N output reg[7:0]seg;
( Q8 x9 B* i" C) n" E; V% B reg [31:0]count;
2 y% }$ u7 l9 V$ B0 p3 z E% ?" ~ ! C2 s" i. i u( ?
parameter B=5369;
% w4 P7 y" b9 Q( M 9 ]0 x) e' a/ N2 O8 U
( O* m) P6 y; b2 Q R# u
" V8 V8 x5 j' d" l) i1 w$ }
always@(posedge clk or negedge rst_n)- S8 R: p. S3 a: e( u1 k6 {+ ?
begin
$ s8 R8 h& x5 U3 p* D if(!rst_n)& p1 x0 U" l9 g9 L- j7 U2 m+ q
begin* F. q/ H* w9 F6 g+ x# `- U% l
seg<=8'b1111_1111;
0 ^& q: a0 z i1 {% S: s sel<=3'b111;" M" D+ J! v" K% P- d8 ]
count<=0;" b2 ]$ b6 F9 {! e; n7 f! ^4 h
end+ T/ ?; `; T o! r0 v
else
1 X7 S+ W4 c# v X$ x& ] begin; z, d, [( Z/ s# w% r: X' P
count<=count+B;
7 z9 U( N. Z4 k6 z6 W5 Q; R( O sel<=count[31:28];//计数频率约为1khz7 e4 r# a" r; n. M% @5 U% n8 v
case(sel)9 Y: C( e* Q+ T
0:begin seg<=8'b1111_1001;end
6 ?, D/ A- @1 T# b$ l" P# f7 p0 z8 l 1:begin seg<=8'b1010_0100;end+ ?3 n [# P& R
2:begin seg<=8'b1011_0000;end% J( F1 U" y: a3 ?( W7 N
3:begin seg<=8'b1001_1001;end
' h: q1 d) Z& P; @ 4:begin seg<=8'b1001_0010;end
: a; v Y" F' @" p6 s% j. [3 q1 U 5:begin seg<=8'b1000_0010;end
7 k$ o( v; y P* M2 l J0 f C default:begin sel<=0;end
5 U# q5 A# b% r endcase, o s. c9 A" }- v, o; B
end+ h) X5 y4 i% u1 w
end4 Z$ Q" L% L+ {
4 J+ T. h! M0 a9 H# x# P |
|