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

基于Xilinx FPGA的数字跑表实现

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于Xilinx FPGA的数字跑表实现
) 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. ?/ [; @

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-2 20:17 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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