EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
" \( l8 M5 ~4 G. {- w
9 `$ W' q& X1 {! e" W; e. I1 V这个项目的主要目的是通过设基于Xilinx FPGA计数字跑表,掌握于Xilinx FPGA的工作原理,掌握动态LED的显示原理,数字跑表的工作原理。 原理: 该跑表有3个输入端,分别为时钟输入(clk)、复位(clr)和启动/暂停(pause)。其结构示意图如下图所示: ![]() # e4 X g6 c* r$ K
复位信号高电平有效,可对整个系统异步清0;当启动/暂停键为低电平时跑表开始计时,为高电平时暂停,变低后在原来的数值基础上再计数。 跑表的计数可以分为以下三个模块: a.对百分秒进行计数,每计满100,产生一个进位cn1。 b.对秒进行计数,每计满60,产生一个进位cn2。 c.对分钟进行计数,每计满60,系统自动清0。 对所计时间的显示也是本实验的重要组成部分。在此处,我们用了6个LED数码显示管,采用动态扫描的方式进行数字的显示。采用直接位驱动,对应接口:SEL0~SEL3,每一位控制一个LED,悬空为高电平。 * U8 K4 b) I7 Y$ A
" j* c: U4 O3 H( _源代码
7 y, Q |2 [' Y) `1.Verilog源代码,StopWatch.v. t$ T, R% U/ |* n J4 r
module stopwatch(led_clk, led_rst, led_sel, led_seg, pause);
! E2 N2 \9 h6 I/ i input led_clk, led_rst, pause;
/ k d% k G- P% ]% t output reg[3:0] led_sel;
) \" K5 ~$ f" h. @: \ output reg[7:0] led_seg;
/ l8 E) t- ~( z: x) X/ |5 w' a7 H6 F3 A3 F( s; m# _
integer countsel, countscan;) P( P- Y( {/ e3 Z- W
reg [3:0] led_num1, led_num2, led_num3, led_num4;9 T6 H% m* v. I1 O, z( q9 S# L( B
reg divclk;5 A- `3 [0 u+ }
reg run;
: r" I; d% V% Q! w o& I& F) f7 a }4 P8 b. i" C8 q/ u
parameter ZERO = 8'b11111100,ONE = 8'b01100000, TWO = 8'b11011010;/ j: S M G) a+ M8 p$ A
parameter THREE = 8'b11110010, FOUR =8'b01100110;
' r$ @- `# u* \9 W+ b1 o$ z/ S parameter FIVE = 8'b10110110, SIX = 8'b10111110, SEVEN =8'b11100000;
8 b) f' B1 q9 p1 l9 Y parameter EIGHT = 8'b11111110, NINE = 8'b11110110, BLANK = 8'b00000000;
8 l1 D" M* v: ?. o! z8 i# C# z4 S8 k$ w" p1 r5 F
always @(posedge led_clk or negedge led_rst)( c6 L+ [# k p5 u# v; N* a
begin
7 B' p/ ^' H. S& w* y) I if (!led_rst)
" ]8 H* X9 {5 \& c( A p8 v7 t ]% _ begin
/ n, R3 Q; Y3 J. h, p countscan = 0;$ @4 Q4 [5 g: J4 T! A+ \1 X, x
divclk = 0;3 K8 |( e1 f# c0 X
end
3 K1 x9 Q" o1 E V0 L9 E else1 A' l" U2 d C! A' h. i2 Z# F
begin4 @2 H0 q: h$ H3 F
if (countscan == 99)
7 @$ v$ t; P* C+ \/ G* }- [ begin
9 j. x; a4 {+ w- u9 W) e countscan = 0;
$ r( Q8 N O w( a7 W5 V- d5 E divclk = ~divclk;0 \" t8 {% d# ]. r. R- W
end
1 P. h9 F# D* G' |3 \& Q( G else
2 I9 I. V6 a" `2 E countscan = countscan + 1;8 O0 ?6 L6 x3 J1 K# i
end" O# w" j v5 m1 C. G! q( ~- i7 P" ^
end. c* } [# `; Q% r8 E, I J' F0 z
y0 j" Y9 ~, h- j& ]& F+ ? always @(posedge divclk or negedge led_rst)
' ] M; T" @# [) [* H, f4 P begin
H+ \- y w) d* L2 R- k0 G- n if (!led_rst)
2 l! g/ ?$ V3 r M7 | z/ J) U begin
( k- E# ~) V, h: O/ H6 | led_num1 = 0;
* w W/ e6 Y: m4 D# a led_num2 = 0;6 F6 L q) u9 |5 D' Q' C) e
led_num3 = 0;
5 N/ M1 x. W" m& n4 W" ] led_num4 = 0;5 |# [- x# y3 S$ R6 u8 V/ M
run = 0; \# }7 v" l, C _/ |* q
end
1 r' A! Y: q& n. E; P else if (!pause) I* ^9 s! f3 Z4 n) {
run = ~run;
7 i* j0 c& C' ?0 [4 y6 j# U else if(run)
8 J9 V1 W; x# G4 x5 N+ B begin$ F" z3 g! f$ t. N: W; b8 A
if (led_num1 >= 9)
2 y% E/ r$ ?3 R begin
8 Z- t A) n% c2 Z9 L led_num1 = 0;. h; A+ j% J& m* X$ o
if (led_num2 >= 9)/ `1 c; t! v4 L- \2 V" k2 l1 j( v
begin5 E( V) g$ A- U
led_num2 = 0;
5 p G3 `& V( i- P4 l7 v if (led_num3 >= 9)1 o# T- G9 d2 k( @$ f1 C
begin
m0 s3 M4 y* ]8 j( B8 d. B led_num3 = 0;
3 Y3 U J. [7 _: K/ V8 Y if (led_num4 >= 5)8 h4 [) N2 {4 y% p
led_num4 = 0;
- a2 V+ Z. ?* \ B: R; M% Z else
]! O% e ~, |8 R7 G8 l9 w led_num4 = led_num4 + 1;
& T, @0 X4 \0 C O( w# A/ Z end7 H! R; Y/ i2 y% l% g( G3 {1 K
else
5 T3 i# H' E6 E' E: M8 P& X led_num3 = led_num3 + 1; O1 p8 O" R7 o# m7 `( c, D( n
end `: h. D( \& Y1 v' y& e& n, a
else
+ d2 q: _0 B; n( ]; w6 x3 N9 ^5 T7 z led_num2 = led_num2 + 1;
; Z) U8 _" u. b' ~) i, t& \ end
4 P5 Q2 B1 i0 V! L5 _, ]5 ` else5 I2 n; p0 y8 E
led_num1 = led_num1 + 1;
# M: P4 Y+ A# }# p$ \, U end
$ d/ a7 z) f% | else2 e3 |$ V/ ?$ A3 O: m7 e, x2 t
begin
/ n, h9 B$ k% t9 u9 z- m2 k4 h led_num1 = led_num1;, l6 z% M4 m, d4 o
led_num2 = led_num2;) [3 X1 c" L1 Y8 y9 }2 o" S3 |
led_num3 = led_num3;
& u% ] I4 l9 b- n5 g m led_num4 = led_num4;
- P( m6 |- `- U- O' Q( x9 s. H end6 M, _# B/ z3 g5 Q; V0 ~) y$ r" y0 w
end
' E4 Y! q' _+ U, x' Z4 V$ j6 Q8 X9 Q# o: e2 B; Z- B6 _
always @(posedge led_clk or negedge led_rst)
1 n8 J: ^4 i+ N9 `* W6 B1 K begin7 s9 y- q2 t7 ^
if (!led_rst)
5 a5 y/ l4 z5 a3 z- s3 _' A4 S( w( E begin# x( R1 I2 c a2 Q- Y, p
countsel = 0;$ Y" `" z: o6 ^( @+ o7 [
led_sel = 4'b0001; ' [( e6 N3 `0 T0 ^$ a( P' g# Q; O
end
- |0 b5 |; ~9 R3 R4 y else' I: i" P- a7 T6 e: h
begin
: e0 ~2 O0 }% s& W7 g if (countsel == 4)% f; v: r) y' U9 o+ \0 x
begin4 k* Z( x \" T' M: u
countsel =0;: O, C0 c6 j6 T3 o) I- V
if (led_sel == 4'b1000)# l6 o0 z' J- l) x# ~5 i4 p
led_sel = 4'b0001;
5 T% H& w; u- a0 w ^ else
( l* ]( D4 g; {: Y. p% Z led_sel = led_sel << 1;$ z! k9 l6 x) R6 G8 V
end
1 F) h( l* K' I1 Y/ Y; t+ {8 K countsel = countsel + 1;
$ f( w. X$ P3 X) W) L3 O3 [1 G end
0 ~' I% A3 b8 J end
$ b4 u" H' t5 T' `. i6 ]' ~) g5 F2 K2 h
always @(led_sel)
$ F3 t C t8 A x0 I: s Y% M begin( X' l& ?* m; ?
case (led_sel)% X, O* E. J# k1 a% ~$ m8 z
4'b0001 :
$ ^9 R' h3 I9 ^ begin, |3 D- N! G0 |6 G+ s8 J7 E
case (led_num1)! t/ q+ v9 {" }
0 : led_seg = ZERO;) P3 d K% V1 O) a7 f
1 : led_seg = ONE;
5 \# A* A+ M4 e* v1 o$ F8 g 2 : led_seg = TWO;% X& n, H; {! z7 a- I
3 : led_seg = THREE;. n* v! X( O' E; |2 h; J
4 : led_seg = FOUR;
2 L4 e) W( D& x6 v. f' k" a" @7 P 5 : led_seg = FIVE;
$ v! I* |/ r6 w/ j, L/ I0 E 6 : led_seg = SIX;( [; o" S( w) v* k& T
7 : led_seg = SEVEN;$ J2 A3 ?( U# N
8 : led_seg = EIGHT;
- O+ q: M/ X/ ?4 z% N 9 : led_seg = NINE;# N: e h2 M; x/ \) B: K
default : led_seg = BLANK;
7 O: x2 o e$ k# r endcase
5 @5 E; ^: i, b end
, I) h$ O- J: J0 v# J 4'b0010 :% d% g) f- {" o
begin
2 O( I! d! I( Y- Z% T case (led_num2)
! t% R/ ?$ j2 ~3 c) }! y 0 : led_seg = ZERO;0 c, S4 }' e- c
1 : led_seg = ONE;
! F9 x- X" J2 H1 {0 D 2 : led_seg = TWO;
( U( e% w8 q3 @ W: q 3 : led_seg = THREE;
; B! g0 `6 e8 ?3 U2 b 4 : led_seg = FOUR;
' @7 W% \6 F8 v4 { 5 : led_seg = FIVE;
; `! w1 L3 l* r0 {$ L; z9 i 6 : led_seg = SIX;( {: `3 {, D/ p
7 : led_seg = SEVEN;
. J0 s9 u9 ~5 e8 F! l% i N 8 : led_seg = EIGHT;
1 H3 u' t5 i( S" l" f9 H! H 9 : led_seg = NINE;! S- Q7 @+ a, v* e7 w1 {1 M. D
default : led_seg = BLANK;8 e' Q3 n1 C% l6 q, B2 ? z1 C
endcase
; g1 ]4 F- W& j% [ end7 M% x e2 }1 D) M# q8 X2 A
4'b0100 :
6 E5 O/ Y; |' O begin; x; E* g7 |0 }! c1 ~6 ~- L
case (led_num3): M, @( a9 ?; @0 J% Q9 F
0 : led_seg = ZERO+1;. s) A/ `+ s w6 a$ {, g
1 : led_seg = ONE+1;! o* y$ Y7 u- z- a# E3 O D
2 : led_seg = TWO+1;0 X2 }9 x" L% T$ v6 e
3 : led_seg = THREE+1;
9 r! J4 I- N: j% O 4 : led_seg = FOUR+1;
6 v1 s5 C# O# s v8 \7 ?1 m3 W 5 : led_seg = FIVE+1;
5 h6 d, D. ? B# d 6 : led_seg = SIX+1;# h3 B9 s6 U5 I" `
7 : led_seg = SEVEN+1;# w A8 O; |7 ?: t7 `! C
8 : led_seg = EIGHT+1;
1 X6 t) x& g; \/ A- Q' m: | 9 : led_seg = NINE+1;3 f; Y* V& D- Y4 J7 @- g% h
default : led_seg = BLANK;
8 d, c* h) f# M( Q endcase
# E* l! L5 J; }/ U2 @9 j" O1 g end
; t$ o& ` l0 F+ ?6 C 4'b1000 :5 I* e# _6 @8 V7 }2 F; X+ U
begin
7 v5 [# F5 j1 G4 G% K. D case (led_num4)( q1 c8 J$ i; y7 m" P' Z% z* G5 i
0 : led_seg = ZERO;
6 Y2 H3 e3 z( B ?1 l5 U" K9 @ 1 : led_seg = ONE;
8 N0 X, F& b# h9 l( h 2 : led_seg = TWO;
P3 k: `- a! |! Q2 S9 |' n 3 : led_seg = THREE;
) U# d: x+ p0 r4 `5 y1 H 4 : led_seg = FOUR;5 ~/ ]& r8 v* N
5 : led_seg = FIVE;8 C: i' I3 e/ x
6 : led_seg = SIX;
" Y1 |' o" F4 o1 f0 u" J+ `& H 7 : led_seg = SEVEN;/ A- [% C9 E, J& b
8 : led_seg = EIGHT; Q4 Z& f( T( Q% g$ k4 K9 B, |
9 : led_seg = NINE;. g1 i! _, m0 x
default : led_seg = BLANK;4 V6 E6 m. t0 I8 E9 _
endcase; s3 \" u* a8 X" m2 Z3 K0 {) y
end, G, P( S0 t" |& ]) G7 A0 y
default
) B8 d8 n: {( l begin1 B5 z3 o3 i. J0 c; V" V: n
led_seg = 'hx;
. ]$ ]% \0 t6 Z end8 _5 q( x* L7 L) u
endcase
& O$ q+ x% f( H end) C$ E1 D/ p7 w. D
& a3 e* T8 L3 }' Pendmodule
$ v; N3 W; J9 S* A2.引脚分配源代码,StopWatch.ucf
( d7 H; ~- ~; d; ?net led_clk loc = p80; #1KHZ6 o9 c0 c [) X
net led_rst loc = p57;
; r! l$ x4 u1 _1 M5 U9 q+ pnet pause loc = p59;1 H9 w; v5 O& \% H
2 ?+ D# j5 {& unet led_sel<3> loc = p3;
* i$ s1 Z3 a0 bnet led_sel<2> loc = p5;( c5 n# B9 R* d! ^( a% p) @
net led_sel<1> loc = p7;
5 U0 f) A$ ^9 O }' C! [# Pnet led_sel<0> loc = p9;! V* h. V' V& Z9 a
4 d+ J$ d, [9 U, W
net led_seg<7> loc = p14;; x+ J @& s& h) f
net led_seg<6> loc = p16;
. l; t, Z2 J8 r5 X" W$ }net led_seg<5> loc = p18;2 @- L3 I) U& {) r2 t
net led_seg<4> loc = p21;
! `0 J! C' T- ?+ inet led_seg<3> loc = p23;
% ~7 f0 D% [- t" r3 anet led_seg<2> loc = p27;4 ^0 F. w G& c! K
net led_seg<1> loc = p30; _" o2 t. o7 o+ O% O% F/ f
net led_seg<0> loc = p33;8 t: B% |& T# @: B) m. d- k
4 S& \; y) T. F4 J# \) r9 M2 f设计比较简单,但是亮点不少,主要为:1.使用XilinxXC2S200型FPGA器件设计实现2.使用电子EDA实验开发系统的2位拨动开关作为A方向和B方向有车通过的传感器的输入,使用系统的6位发光二级管作为A方向的红绿黄灯和B方向红绿黄灯输出,使用系统的数字时钟作为系统运行的时钟。3.使用Xilinx ISE 6.3软件进行Verilog HDL开发。有感兴趣的朋友可以扩展一下,成功的感觉固然喜悦,但是追求成功的感觉,更让人觉得激情昂扬。
2 B$ M& s Z( Z |