实验四 FPGA 时序逻辑设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四FPGA 时序逻辑设计

学习目标

1、了解可编程数字系统设计的流程

2、掌握Quartus II 软件的使用方法

3、掌握原理图输入方式设计时序逻辑电路的方法和流程

必做实验

1、实验内容:

设计一个电路,用4×4 矩阵键盘输入一个4 位数,并在数码管上显示,要求如下:(1)输入时,数字顺序是从左到右。例如,顺序输入0、1、2、3 应该在数码管上显示“0123” 。

(2)比较输入数值,比较结果用1 个LED 显示。如果输入值和你的学号后4 位相等,则LED灯亮,不等LED灭。

(3)实验箱上的数码管内部已译码,4×4 键盘上拉电阻也已连接好。

2、实验要求:

1、根据设计要求划分设计层次、单元模块和接口信号,在预习报告上记录设计过程,绘制系统框图,每个模块的状态转移图或ASM 图,并设计验证方案。

2、用原理图输入法设计所有单元模块并编译,分析编译时产生的错误和警告信息

3、对所有的单元模块进行功能仿真,并记录和分析全部仿真结果

4、在顶层文件中连接全部单元模块并编译、综合、分配管脚和适配。

5、对整个系统进行时序仿真,并记录和分析仿真结果。

6、将仿真正确的设计下载到实验箱上,连接输入输出设备和示波器进行板级验证实验内容

设计原理

矩阵式键盘,将I/O线分别组成行、列结构,按键设置在行列的交点上。4×4行列键用4条I/O线作为行线,4条I/O线作为列线所组成的的键盘,16个按键分别设置在行、列线的交点处,行线、列线分别连接到按键开关的两端。所有的行线和列线都通过上拉电阻接电源,钳位在高电平状态。相比较独立式按键,4×4行列式键盘只需要8 根I/O 线就实现了16个按键,节省了8个I/O口。但由于行、列线为多键共用,各按键彼此将相互发生影响,必须将行、列线信号配合起来并作适当的处理,才能确定闭合键的位置。

通过对行线轮流加低电平信号,C3C2C1C0的值在1110,1101,1011和0111之间变化。无键摁下时,R3R2R1R0等于1111,R=R3∗R2∗R1∗R0=1;有按键摁下时,行线短接,R3R2R1R0不等于1111,R=R3∗R2∗R1∗R0=0。检测到变化时,输出控制信号E= R3R2R1R0,使行线停止扫描。行线和列线共同构成8位二进制码通过译码电路进行译码得到键值。松开按键,列线R=1,扫描继续。

按键开关一般是利用机械触点来实现合、断的。由于机械触点的弹性作用,在按键闭合和断开的瞬间均会出现一系列尖脉冲,如图所示,这种现象称之为“抖动”。抖动时间的长短与开关的机械特性有关,一般为5~10mS。而按键稳定闭合的时间是由操作人员的按键动作所确定的,一般不低于0.1秒。为了保证电路对键的一次闭合仅做一次键输入处。

1.键盘的行线扫描电压

使用寄存器74194,构造一个模为4的状态循环,采用右移,S1C0=01。

电路状态:1110→1101→1011→0111→1110

真值表:

C3C2C2C2D SR

1 1 1 0 1

1 1 0 1 1

1 0 1 1 1

0 1 1 1 0

卡诺图:

最简逻辑表达式:D SR=C3。但此时并不满足自动。

重新修改无关的循环,并修改卡诺图

̅̅̅̅̅̅̅̅̅。此时满足自启动。

利用最大项之和得到:D SR=C2̅̅̅+C1̅̅̅+C0̅̅̅=C2C1C0

另外,考虑到还有控制信号E,当E为1,电路保持扫描状态;当E为0是,电路停止扫描,保持此时的状态。为了完成此功能,使时钟信号为CP∗E。S1=0,S2=1。

逻辑电路图:

2.消除抖动

根据题目的要求,使用D触发器消除抖动。使用两个7474进行封装,封装为一个四输入四输出的D触发器。

逻辑电路:

3.转码为二进制码

通过行列的扫描结果可以得到8位二进制码,需要转换得到4位二进制码。

In[7] In[6] In[5] In[4] In[3] In[2] In[1] In[0] 16进

制码二进制码

C3C2C1C0R3R2R1R0

0 1 1 1 1 1 0 1 0 0000

1 1 1 0 1 1 1 0 1 0001 1 1 1 0 1 1 0 1

2 0010 1 1 1 0 1 0 1 1

3 0011 1 1 0 1 1 1 1 0

4 0100 1 1 0 1 1 1 0 1

5 0101

1 1 0 1 1 0 1 1 6 0110

1 0 1 1 1 1 1 0 7 0111

1 0 1 1 1 1 0 1 8 1000

1 0 1 1 1 0 1 1 9 1001

1 1 1 0 0 1 1 1 A 1010

1 1 0 1 0 1 1 1 B 1011

1 0 1 1 0 1 1 1 C 1100

0 1 1 1 0 1 1 1 D 1101

0 1 1 1 1 1 1 0 E 1110

0 1 1 1 1 0 1 1 F 1111

使用Verilog语言实现,并实现封装。16个按键分别按下时,对应16种不同的情况,编码从0到F的二进制代码。当按键没有按下时,输出0的4位二进制代码。代码如下:

逻辑电路图的如下:

4.储存电路设计

转码部分每次只能输出一个4位二进制代码,又因为有四个数码管要显示不同的字,所以要对转码后的4位二进制代码进行存储。

通过746161构造一个周期为4的循环:00→01→10→11。

在此处键入公式。

相关文档
最新文档