EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
) L, |: v3 ~' F
6 w" L5 p0 Q0 R+ {( B$ }5 w4 d Z! N
这个项目的主要目的是通过设基于Xilinx FPGA计数字跑表,掌握于Xilinx FPGA的工作原理,掌握动态LED的显示原理,数字跑表的工作原理。 原理: 该跑表有3个输入端,分别为时钟输入(clk)、复位(clr)和启动/暂停(pause)。其结构示意图如下图所示: ![]() 5 g J: W! c- _$ @6 C3 T
复位信号高电平有效,可对整个系统异步清0;当启动/暂停键为低电平时跑表开始计时,为高电平时暂停,变低后在原来的数值基础上再计数。 跑表的计数可以分为以下三个模块: a.对百分秒进行计数,每计满100,产生一个进位cn1。 b.对秒进行计数,每计满60,产生一个进位cn2。 c.对分钟进行计数,每计满60,系统自动清0。 对所计时间的显示也是本实验的重要组成部分。在此处,我们用了6个LED数码显示管,采用动态扫描的方式进行数字的显示。采用直接位驱动,对应接口:SEL0~SEL3,每一位控制一个LED,悬空为高电平。
; u8 F: l" f5 ^+ e/ M9 M l
( S! r4 G8 [. ^/ B+ d' q T源代码4 b* C, j6 R9 o
1.Verilog源代码,StopWatch.v- Q$ v" c1 G- i
module stopwatch(led_clk, led_rst, led_sel, led_seg, pause);& o: W7 ^9 h- j
input led_clk, led_rst, pause;
' v' d* z* w% U8 P P6 c output reg[3:0] led_sel;
( t1 Q/ M! y9 D k0 E3 w' N2 S output reg[7:0] led_seg;
6 Z# o! B0 O1 K$ |5 t3 l8 v! z% X& W; L, i3 u' l
integer countsel, countscan;/ d, \3 m1 t% b8 w+ p# w
reg [3:0] led_num1, led_num2, led_num3, led_num4;2 N5 h( L5 X6 l; i8 \
reg divclk;
- M) P* V4 X6 S5 } reg run;
\7 O9 p/ l4 U+ w t/ l. }) A+ a2 Q' G, ^& {' i; g
parameter ZERO = 8'b11111100,ONE = 8'b01100000, TWO = 8'b11011010;! t. L) Y+ V; c8 Y8 g
parameter THREE = 8'b11110010, FOUR =8'b01100110;
$ V/ `% j3 y0 w" Z- K, U parameter FIVE = 8'b10110110, SIX = 8'b10111110, SEVEN =8'b11100000;. w4 J* o, y% b5 z: E S. u2 A
parameter EIGHT = 8'b11111110, NINE = 8'b11110110, BLANK = 8'b00000000;+ I& G4 b$ M. [; r, o
2 F# Y3 L7 C/ r% H6 U always @(posedge led_clk or negedge led_rst)
7 L% Z+ u% @( w( v5 p# | begin9 [2 t- d o6 X( B, O& z( p$ O! z
if (!led_rst)
' t0 m8 ^: |; s9 S, p; ]( m begin- G6 s3 E1 Q! M! ]. W: i, S: k
countscan = 0;' o& w# Q! O9 X6 I
divclk = 0;
. W+ F+ E& M% d2 @) {* o0 z end- `' L- k$ X7 h3 J1 L. _
else
! w" }" S" M/ c7 P begin
6 m. y! c4 F: u$ R3 j+ X if (countscan == 99)% ?4 ?* ^( i& I9 ^) n6 t( I- G
begin$ _0 u, [) ]* U6 y J
countscan = 0;
7 O1 e* x0 e% n u7 C& @ divclk = ~divclk;
& H0 A* |$ F- @# X$ g7 H+ e( _ end
* r2 F: j* X# l: b9 R; p& G" K else
; m4 \8 F9 A& `; n# K: c countscan = countscan + 1;
c+ z) H) m) ]0 B, N k2 T end
4 w9 I: f6 [' e+ A end
8 ]' A) n4 O. H- ^8 @6 K6 _9 u
3 c9 \. P# c! R- Q4 ? always @(posedge divclk or negedge led_rst)
5 g2 }: O$ x/ |9 M: g begin
4 x7 h3 K, R% o1 N if (!led_rst)
' U8 k. \/ C+ b7 D( U+ }7 {: o. e begin3 N) e X( L% h* x! m' D/ _
led_num1 = 0;
6 D7 {) Z0 z! O* @1 u. I led_num2 = 0;3 w# I/ x$ D( W" w: e( p2 [
led_num3 = 0;
* U' b! y& o7 ]! C" { led_num4 = 0;# r2 c% f Z, |7 H3 \9 ~. }9 R
run = 0;/ u. g9 c9 m5 k0 b& P
end
4 G' G* H4 x5 [+ D! U) E else if (!pause)
: T d2 S- E" @ run = ~run;' b, m" D) c2 H+ o* C8 t; T* q' @
else if(run)
# h& R& \, x' J1 j3 \ begin9 d/ z2 m; t- G" Q0 L
if (led_num1 >= 9)- ?8 u5 e( q; L# ~+ |" `" p
begin
0 C4 c \" N$ Q. R1 C7 K2 q4 C3 R led_num1 = 0;, E; _3 c, E( ]3 c4 o: ]
if (led_num2 >= 9)
; v1 |) e7 W# B4 B4 V, K+ } begin
( K5 {, N6 S/ ^( t3 u led_num2 = 0;
# }2 G1 W! w- E. L7 b if (led_num3 >= 9)! C: h) o$ j. O
begin; @* s8 ?" e. c* y; Q
led_num3 = 0;) S3 T5 `' A! t" E4 C3 e7 o- Z9 @$ Q
if (led_num4 >= 5)
: U5 z; [: A) w led_num4 = 0;. M4 |' X/ \1 {
else8 P8 Z% M4 |8 |1 }! Z' ~
led_num4 = led_num4 + 1;0 L+ ?1 k: n( \9 N
end
6 ?3 }' J: U, u, Q; l- I% k# E# ]- j else: s s9 u. z3 o6 t7 ]+ K
led_num3 = led_num3 + 1;2 A$ Z. C3 F& k
end. t; k5 |1 j9 b, W
else
& Z3 O4 E: W0 H' y1 X led_num2 = led_num2 + 1;
6 V/ h n7 m. j O) D: J end
2 @7 Q+ ?* H' F# z$ ?: ?% h. @ else/ Y2 x( l+ {' d& P3 E
led_num1 = led_num1 + 1;
; G1 G. K- ^5 ` _8 d. w7 I. H* L end# g# h0 U8 \# W0 x1 a u3 u
else
; P# o3 P" ~, B" Q+ i# o4 G begin
1 |7 d- n7 ?) B; K led_num1 = led_num1;9 f* d" `6 W2 D: y
led_num2 = led_num2;
7 I |+ J) ?; t+ q( ` R led_num3 = led_num3;, H( a1 e' r$ i
led_num4 = led_num4;
% \& ^4 P; w/ O" \ end
/ Q' w2 i# u, p, P9 Q end
9 V; d4 q s }# ?; d8 L+ J m# w+ Z0 P
always @(posedge led_clk or negedge led_rst)
1 A( ^. K1 r: c% r7 k6 T/ B+ n6 W begin$ I$ [6 x& Y1 x B8 v; e2 R
if (!led_rst)
$ O' e( T! Z/ R' W begin: u- d6 f& X; t
countsel = 0;- Q: }3 |" v) i; i7 l
led_sel = 4'b0001; 8 M. G. m* c0 M
end
$ e; F; D d* k3 E else$ }1 l# [. u+ K) U% J3 c4 K! s
begin
& ?! c5 p+ ?4 N) J$ }: m* A) \) A if (countsel == 4). o/ s# ]3 ?6 y4 G% C* b2 ]
begin" D6 o) b0 t+ `1 T
countsel =0;. V7 F/ Z/ ]5 T" n/ ]* c
if (led_sel == 4'b1000)
/ A: W5 o0 a$ i8 c" R, b led_sel = 4'b0001;
- G% l/ e( N/ ^ else6 G0 W! U8 r/ d: n% {. P* ]
led_sel = led_sel << 1;( q& r# R! G, A4 s% P& m
end1 J; }6 U% c" D) W5 X8 ?6 W& A
countsel = countsel + 1;5 C y N/ l# K9 k3 _
end - a' l- X ~/ V: }
end7 Y4 k- ]3 |& Q, ` W
2 ~0 p& N& n( A3 k5 m% Q1 l always @(led_sel)# s3 D% c/ i1 {: W0 y" b; z
begin/ t! q' u8 N) o# d( x+ e
case (led_sel)8 J. e9 p/ @5 N0 g3 f
4'b0001 :6 s8 i5 ? f& ~+ M5 D: {1 f
begin, y. J1 e, R: F4 @3 J. p
case (led_num1)! K, f3 s2 F9 ?! e" A- ]
0 : led_seg = ZERO;
, \4 E4 h6 |1 ^# r( j A 1 : led_seg = ONE;
. o7 s0 N$ A2 I8 G$ r8 l 2 : led_seg = TWO;
+ z$ K3 y2 K3 S' z& [* h 3 : led_seg = THREE;! e2 g6 {& F+ o$ _
4 : led_seg = FOUR;
( L6 ]6 N+ U+ g5 @6 F0 j 5 : led_seg = FIVE;/ M; e9 h% G; ^9 g7 C
6 : led_seg = SIX;& s# y* R% A' W! n
7 : led_seg = SEVEN;
+ R: p0 D+ N9 _- k 8 : led_seg = EIGHT;& a. p" V8 e2 _" r! v: l
9 : led_seg = NINE;
$ v9 I2 X7 v: ?6 Y/ |/ i default : led_seg = BLANK;- Z, m2 B6 M1 A% {# c3 }2 M
endcase
4 {; \1 y: v5 h" Y4 M: M end) Q" m# }/ U+ P
4'b0010 :- S- W/ n8 h1 U6 ~' [( D
begin
- K" O5 z" f$ \1 _' v1 j% } case (led_num2)
/ j4 ^) e! q5 d7 w' U 0 : led_seg = ZERO;+ e5 }9 s: y4 I% j( {/ `
1 : led_seg = ONE;
q- T% j# r% J. Z 2 : led_seg = TWO;
& U G1 N: z. I' g! a 3 : led_seg = THREE;
9 B2 y) g; a0 n+ u2 u1 ]# m 4 : led_seg = FOUR;
/ g4 v r$ W3 }& H; \0 n 5 : led_seg = FIVE;
- H5 p9 ~: W, X; [) h1 E8 L 6 : led_seg = SIX;2 R9 f7 g# @6 j% i) C
7 : led_seg = SEVEN;
6 v V' u' ^5 D/ m; m) _7 @) H 8 : led_seg = EIGHT;
( W* Z" u2 ~2 s& K 9 : led_seg = NINE;2 V7 f1 l: K0 c; S5 a
default : led_seg = BLANK;* v$ C: U! ~' Q& ?% x( Y
endcase8 p- Q4 r, [( `! ~
end$ V' w( S M+ H" E
4'b0100 :* n- _5 q+ K/ P. `1 `: g
begin& [, W1 t6 H* X' Y
case (led_num3)/ {* K2 S0 S. a7 o6 @ B$ X
0 : led_seg = ZERO+1;) Z# E( W$ i! A4 R
1 : led_seg = ONE+1;) |( ^9 o4 D- N# v
2 : led_seg = TWO+1;- y$ C$ G1 @# w4 L! x0 d
3 : led_seg = THREE+1;
7 r4 C; h: i( a0 W0 u$ m9 X 4 : led_seg = FOUR+1;- m- s E" \0 d1 `5 A @) o% }
5 : led_seg = FIVE+1;# y7 J( X2 W. M5 L* X
6 : led_seg = SIX+1;
. o. b) D4 f8 G9 h4 E 7 : led_seg = SEVEN+1;6 }" w) ?6 D6 Y& _% n2 \+ r
8 : led_seg = EIGHT+1;9 I$ J. A9 p% @5 S$ H# L
9 : led_seg = NINE+1;9 S$ m* X/ q6 N, J; C: h2 R
default : led_seg = BLANK;' q' F( l5 D5 y6 j0 e
endcase
% l; |6 q$ e2 h1 Z end
1 R% z( L5 ~, k9 q9 ^) w- u, ~$ m 4'b1000 :
3 z8 }* b+ Z3 k4 j5 i begin% N2 u5 W! T$ p: [
case (led_num4)
! V0 o7 J# O* `; \- n1 c3 d 0 : led_seg = ZERO;# \/ R8 ?3 e$ C: o0 _( m" k$ j0 L7 Z
1 : led_seg = ONE;
9 h1 S2 Y0 l) X 2 : led_seg = TWO;# F8 v* Z+ {4 J0 x6 M
3 : led_seg = THREE;
2 p6 x. N! a7 a) ?) v) c 4 : led_seg = FOUR;
. V3 a( N; r/ i a; _: M& o8 a 5 : led_seg = FIVE;
1 \7 _( f! T& M9 D4 Y" ^( R 6 : led_seg = SIX;" P% d) s* b$ I3 d. }5 @
7 : led_seg = SEVEN;
; w$ o" J# K6 U/ j7 _$ \ 8 : led_seg = EIGHT;4 X# x3 R% }" I7 ^+ R: \8 G. P- i3 V4 z
9 : led_seg = NINE;! |. _: ]4 V) a5 o4 R
default : led_seg = BLANK;1 J* q( Q% u, N3 {+ h/ n. p
endcase
, Q& A6 |' T+ a end Q1 ~% n; w; b
default7 {$ x9 n" p* m' d3 S/ j
begin1 D3 T( @ g' \0 F2 E
led_seg = 'hx; R' ~. q. v! Y J9 m
end
! U. N1 Q7 _# R6 G a$ | endcase
4 d- x. V! \+ I4 q end" J6 U- V2 A( c
5 q* ?" T/ M0 {5 qendmodule
. \6 o. ?" R3 X1 T3 n2.引脚分配源代码,StopWatch.ucf
$ _+ B3 \# D E$ d+ hnet led_clk loc = p80; #1KHZ6 L" o, [' M* G/ @" \1 W
net led_rst loc = p57;
. N, y k( \, B4 Znet pause loc = p59;
' A G3 i. ?$ B1 q' |) Y. g( e4 r- T A' g% b% J
net led_sel<3> loc = p3;4 @ [5 s0 x( h8 x7 G5 ~
net led_sel<2> loc = p5;7 `8 C9 u) F/ c% C
net led_sel<1> loc = p7;
8 z$ [1 S( R* L% w6 `net led_sel<0> loc = p9;
% M+ v: V- ~/ O% Q6 N1 L/ ~, x* J4 z5 e3 h& W
net led_seg<7> loc = p14;
8 x! h/ j! O- P: Q- u3 znet led_seg<6> loc = p16;- }; w0 z& e/ G+ P I6 \6 O
net led_seg<5> loc = p18;
: }6 H) M, ^9 o( Q4 ^3 nnet led_seg<4> loc = p21;0 X9 z+ v+ o2 \4 e- \2 n
net led_seg<3> loc = p23;
/ b M3 w! I' b; _net led_seg<2> loc = p27;0 t! g- H2 H3 R( d. ]5 Y
net led_seg<1> loc = p30;
4 i" Z1 I9 F9 B( ?! \7 @/ _' o+ O$ }net led_seg<0> loc = p33;: ?' }. G, Z! ~1 D( ~: T3 ]
2 [7 J! n& b$ R3 M设计比较简单,但是亮点不少,主要为:1.使用XilinxXC2S200型FPGA器件设计实现2.使用电子EDA实验开发系统的2位拨动开关作为A方向和B方向有车通过的传感器的输入,使用系统的6位发光二级管作为A方向的红绿黄灯和B方向红绿黄灯输出,使用系统的数字时钟作为系统运行的时钟。3.使用Xilinx ISE 6.3软件进行Verilog HDL开发。有感兴趣的朋友可以扩展一下,成功的感觉固然喜悦,但是追求成功的感觉,更让人觉得激情昂扬。 A( Y* w" q- g: g/ S. ?/ [; @
|