EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Zedd 于 2019-4-1 13:42 编辑
' L* b* K1 O- {9 X7 ^( T
7 a6 ^& M6 E+ t2 I实验目的: 1.复习按键的设计 2.用模块化设计的方式实现每次按下按键0,4个LED显示状态以二进制加法格式加1,每次按下按键1,4个LED显示状态以二进制加法格式减1 ![]()
/ `: ]6 d! D* w$ G9 U9 c# T实验原理: 在上一讲中设计并验证了独立按键的消抖,这里基于上一讲的按键消抖模块来实现一个加减法计数器,并以此学习模块化的设计方式。 在设计过程中,相对大一点的工程经常通常不会写在一个设计文件中,通常会针对不同的功能设计出不同的子文件,最后在顶层文件中进行例化。基于本讲其模块的划分如图9-1所示。 ![]()
& [% S9 e- g) v! o" e. F+ u# n3 ?% H# O
图9-1 顶层模块端口图 实验步骤: 这里先编写led_ctrl,从图9-1可得出其端口列表如下。 ![]() ![]()
2 _ {( |! V# K0 U2 n9 a) }. X0 p2 W8 T3 a. C" o3 Z$ u5 k3 \5 i5 r- \
这里需要进行根据两个按键的状态来进行计数器的加减。 ; f9 [" U( q. G& W. A
, E4 [8 R8 Q+ d
计数器的初值为4’b0000,这里当按键0按下即计数器加一计数器变为4’b0001,由开发板上的led灯电路图可知,led灯为低电平点亮,此时就会出现led0-led3分别为亮亮亮暗,为了更直观的显示效果对输出数据进行取反,这样led的数据就会变为暗暗暗亮,与正常的思路相符合。 ![]()
/ Z: `' h8 |# Q1 ?2 N6 |# h) e6 d5 w6 q5 ^& n5 b
![]()
3 `3 v7 U2 p, N1 J$ m2 s图9-2 led灯电路图 这样各个独立的模块即编写完成,下面开始顶层文件的设计。 ![]() ![]() ![]()
! t% T; C" @ t2 T- M' i
; T; Y3 y9 V* K8 D- d. h进行分析和综合直至没有错误以及警告。这时可以打开Quartus II软件中的RTL Viewer,查看模块间的连接。如图9-4所示,与设计的顶层模块端口图一样,因此可以看出顶层文件例化正确。 ' ~5 V1 t# i" P& j) b, j
图9-4 顶层模块RTL视图 为了测试仿真编写测试激励文件,这里由于调用了两个按键进行仿真,因此需要将前一讲设计的按键仿真模型进行改写,加入使能信号press,即press上升沿时就执行一次输出key,其中任务task press_key部分是不变的。如果不改写调用的两个仿真模型会同时执行,就导致出错。 ![]() ![]()
. G) C0 e! A* x i8 V" L6 H) H) b, j+ x" _. d+ ], M: r
. |% d6 i, U5 o7 f2 e新建key_led_top_tb.v文件输入以下内容并保存到testbench文件夹下,再次进行分析和综合直至没有错误以及警告。以下内容除了生成了时钟以及复位信号,还模拟了按键0按下释放两次以及按键1按下释放两次的过程。这样整体的代码就如下所示。 ![]() ![]() ![]() ![]() ![]() ![]()
0 z- `- p7 ? L* E+ N* k2 Y' h- L% v# Z
7 p' `) i2 c Z" Y( q' \: O) r9 t设置好仿真脚本后进行功能仿真,可以看到如图9-5所示的波形文件。每当按键0按下时计数器led_r则会加一,按键1按下后计数器led_r则会减一。 1 I! d9 C: M2 k# j. L% X8 g
8 J+ _* y5 K9 [- c
图9-5 功能仿真波形图 分配引脚后全编译无误后下载工程到开发板中。也看到与之对应的现象,即为设计无误。 至此,实现了一个简单的模块化设计,并进行了仿真与板级验证。
) m9 v5 i) {& F' A% s W% E5 |小梅哥 芯航线电子工作室 7 K( S( j+ V8 D, z) t
`* F0 [. Z9 _' T6 p
$ P* y( k4 i/ f# g |