找回密码
 注册
关于网站域名变更的通知
查看: 391|回复: 1
打印 上一主题 下一主题

基于Xilinx FPGA的数字跑表实现

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-3 19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
基于Xilinx FPGA的数字跑表实现

" \( 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

该用户从未签到

2#
发表于 2019-5-5 17:50 | 只看该作者
发帖是心得 回帖是美德
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 09:07 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表