EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
大侠好,欢迎来到FPGA技术江湖。本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。
3 b. D* f2 T' F+ V
系统性的掌握技术开发以及相关要求,对个人就业以及职业发展都有着潜在的帮助,希望对大家有所帮助。本次带来Vivado系列,按键的使用教程。话不多说,上货。
/ b4 Z6 W! x. F9 P( m9 d
0 t% h) l2 ]7 P6 E5 h3 Z9 E
按键的使用教程
& T; y' M" j/ `( |, V1 T8 i
按键是我们使用比较多的器件之一,其结构简单,使用方便。在玩具、家电等方面有广泛的应用。
& v( q6 Q3 V" N( t* I
按键是一种应用比较多的一种电子开关,在我们开发板上有两种按键开关:第一种是本章节需要讲解的轻触开关,第二种是自锁按键,按键按下后保持自锁状态,整个按键处于一直连通状态,再次按下,开关断开,同时开关按钮弹出。
" m) R. ?" E2 Y6 \/ Q8 `1 t
- B7 T; i: x# [0 I2 G% D+ p' B2 [
' e: N/ k, O( ~- ^" C7 Y7 D! Q
本次我们实验任务,将使用按键控制LED灯点亮,当按键按下时,LED灯亮,松开熄灭。
4 o/ m- d8 E0 |/ j: h
我们的按键是共阴极设计,电路图如下:
v; }4 ~* L6 r: L
2 [! f, c- y6 Q s2 \
) _5 Z8 z. }. ?1 g9 P
分析电路可知,当我们的按键没有按下时,FPGA管脚为高电平,按键按下,FPGA管脚被短路,电平为低电平。所以我们的按键按下为低松开为高。那么在我们设计实验逻辑时,可以用按键的低电平控制LED灯点亮。
; q* u- x7 N" F4 w1 f+ F0 m. ?+ B# [6 [) q% x; w" K
% L; J0 v6 o& r- t
! u7 B% r- }( b5 M0 i' e
8 f3 n! b+ l$ J) C, q$ v* b
( v* u4 E* c2 p+ N
0 h4 r3 D% n0 o, l3 _/ n . t2 k' `; m1 u$ V5 G, w8 C
对应的XDC约束语句如下:
0 O2 \- [8 Q1 F6 }; A4 M
# |( }7 Q) y5 t
) C; p: v" _, u0 M+ K) ~- o# G& k: w/ I: Q- B1 ^, s9 o
- C7 ^3 {( s, ~3 C/ s
% w+ `4 i) M8 x$ g I我们按键信号作为控制信号来使用,但是我们不能直接去使用,因为轻触按键在按下或者松开时,信号非常不稳定,会导致在按键没有完全按下或者松开时,信号出现很多的毛刺,这样的信号不能作为我们的控制信号,所以我们在写控制逻辑之前,我们首先需要对按键做一下消抖处理,实现信号稳定。我们处理的原理是,当信号一直处于低电平或者高电平一段时间后,我们默认信号处于稳定状态,这个时间我们暂定为10ms。 8 m; H3 l# l, i
接下来我们先进行新建工程,首先点击create project。 7 |; k% P U4 {2 |0 ^) z
; F$ L% w, P( Z# `& g" P9 D
6 ^1 `/ C. I2 I* i6 a
然后在打开的界面修改工程名字为key_led。
+ L1 P5 [: m/ k
8 _* r, |0 ?; D; O9 n N7 L" J: R3 j* j" A& L) m
保存位置确定后,点击next。
. [+ Q s$ ^' }* o0 T6 a# Y
! c( |: {; E7 u2 v% o
& i6 C9 n, k3 t7 E! ^* C( I
我们选择RTL Project,点击next。 9 q' j6 t# R" c2 ^( [0 ?( G
7 p7 `+ x* @0 k R: U% e y$ q; J* V# z1 J( ^" [
我们在搜索窗口搜索我们板子的芯片型号,确定好之后点击next。 ( h" G N; ? p. P: M. `
5 r- n' g* b d, u
2 O. {% w/ O) C. [# C1 a& r x/ w% [0 I4 [. i
2 {* J% [( j" v0 r
, c( C( x) V7 y/ c( D ?: I% a% X8 D, B2 B% c0 h a0 W* ~
+ i4 P" D3 A$ |: M9 v
点击Finish完成新建工程。新建完成之后,我们开始根据前面我们所讲的理论开始写代码。
/ j8 ^6 {+ y) u' q
0 r/ Q' s% C9 X {* q/ d - g# ~+ T9 a, T
3 u3 g4 ^# S& J, }
: R8 @) m6 D& H& V" K( F9 R/ X7 e k! b
( R; |6 Y$ j7 t( H% r* T) n
点击上图红色方框的加号开始新建代码文件。
6 _; M! q# }; f1 p# h) f
E9 } O& A" T5 @
& H! m0 D; n0 _. Z7 b$ J6 I' [8 ]. @$ e( `9 B7 r! L5 c- Y
: o( K0 z0 T0 w: h" X1 i3 f" g2 P; q
. G4 _6 x. Z+ G: _9 v
7 y# G. j2 Y5 k0 ]: o/ \
0 R! l3 S2 I, r1 O8 U0 c& q: R点击next。选择创建文件。 . S* Z: y1 w6 U$ |; R
4 ]0 e3 p" n e. e6 g9 i' ^
/ B) T3 }- L7 S5 T V
, d d/ ]- j8 U& n, O. d( j# A
/ d# \, {) x6 s1 W" Z
2 ?0 g6 u. h' m3 i' ]7 u! H( s5 v' Z. }2 [; B( ~( w& E1 u
( Z7 f, \9 I6 g' M( V比如我们新建顶层文件,名字为key_led。 ) f9 h1 M( k7 j3 D1 p1 M
$ ^0 M) x+ b4 M' \& U4 ?. n
( o- c) I' b" |" a0 N) z6 e* R7 ~' p. ^5 h( Y% O6 {% i
! D, N2 ~6 w$ w; \% @( I8 Q' j
7 O8 c3 D' x) c: l$ v" p! y. w7 v5 I) X- y0 o
' C9 U# V* z3 i- o
# q* J( S7 P6 ^. J4 e 7 Z( I) P$ Z- d' P3 y
点击OK之后开始写代码,代码内容如下:
5 W$ n/ v- y- ~! m0 [2 N
( C1 V+ n8 }6 l- m3 \
4 K; R/ d& b4 k( S, q, |& E) K: R* W' R( W! V! Y
: A& X V m: l( f" Q$ m1 ^1 I
c, K& G4 h3 F: t! L9 {7 i接下来是按键控制LED的逻辑,当按键为低电平时,LED灯点亮。代码如下: 6 c! L7 j3 r/ ]/ ` J* u
: Y+ \' [$ p; ?& `
; I* { m5 g7 Y4 \* g* E
* z' j* Y& N7 L
# u" C! ?9 z# A: V! \
# }& o2 V+ C; O; o: J6 U& E7 n# p两个模块做好之后,我们在顶层文件中例化子模块: 4 o7 Q: Q3 U+ g9 c
. _5 x. k; K* \3 `2 e
' j9 [: @; q! x. _; \& V& |1 c# o/ B0 z% N
8 P& @3 }1 C* k! W7 y8 N
/ ]0 T0 F% f' ]( H逻辑控制写好之后,我们做一下仿真,在仿真中,我们为了快速看到现象,我们将参数修改的小一些。代码如下: 2 ^" R& q- E, E) m' P. }
6 p$ r% Y6 b6 j$ ^1 ]0 n
5 a/ K8 C- o+ b/ W" m: A! p
) |. s* E; p& H! |
8 z' N, y9 [. G5 ?5 Y1 {
! \+ V. p1 z( q5 a. ~4 m( ~仿真波形:
* c$ ~% t5 k. C( A, f! ]' ~" b4 Z3 b
4 d) U( E8 ?% _- A I0 G
! O$ G( }- K1 j0 Y" `) b2 `1 g d2 N6 x) S* {. ^
1 p- O l, Q C: v4 n# m8 LFlag信号等效按键,flag拉低时,LED灯为高电平,此时灯亮。
6 }& M6 ^# J1 D" e f" q) [6 f% ^8 h1 N% |2 O+ |/ `
6 m& ~4 y4 |% z) {& c0 p: n* K( f- \ |