实验四fpga时序逻辑设计

实验四fpga时序逻辑设计
实验四fpga时序逻辑设计

实验四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口。但由于行、列线为多键共用,各按键彼此将相互发生影响,必须将行、列线信号配合起来并作适当的处理,才能确定闭合键的位置。

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

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

1.键盘的行线扫描电压

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

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

真值表:

11101 11011 10111 01110卡诺图:

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

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

利用最大项之和得到:。此时满足自启动。

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

逻辑电路图:

2.消除抖动

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

逻辑电路:

3.转码为二进制码

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

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

制码二进制码

0111110100000 1110111010001 1110110120010 1110101130011 1101111040100 1101110150101 1101101160110 1011111070111

1011110181000 1011101191001 11100111A1010 11010111 B 1011 10110111C1100 01110111D1101 01111110E1110 01111011F1111使用Verilog语言实现,并实现封装。16个按键分别按下时,对应16种不同的情况,编码从0到F的二进制代码。当按键没有按下时,输出0的4位二进制代码。代码如下:

逻辑电路图的如下:

4.储存电路设计

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

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

74161的输出和决定此时转码的4位二进制信号因该储存到哪里,以及74194的工作状态。首先用4个74194进行存储此时的4位二进制信号,再用4个74194存储以前的4位二进制信号,由此保证在按下新的按键的时候,以前的数值不会立马被清零,直到完成按键的动作的时候,数码管才显示新输入的按键内容。

通过以上的分析可以得到结论,每一个数码管应该对应两个74194,这两个74194的工作状态应该是相反的。74194的工作状态只有两个,分别是同步置数和保持,对应分别位11和00。存储电路的时钟信号应该和row[3..0]有关。

通过74138,结合74138的使能端,决定每一位应该存储到哪个74194中。故应该有4个74138存在。例如:当=00的时候,此时的4位二进制数中的每一位都选择存储到第一个74194中。逻辑电路图如下:

举例说明,当=00的时候,第一个74194选择存储,此时的74194的状态应该是并行输入,后面的74194状态时的保持(保持上一个二进制数)。当按键动作结束,此时01,跳到下一个状态,第一个74194的状态变为保持,后面的74194状态变为并行输入。直观上来看,当按键动作结束时,数码管更新显示新的数字。逻辑电路图连接如下:

通过分析可以得到,上面的两列74194的CP时钟信号是不同,对应的上升触发沿是不一样的时间,才可以完成相应的功能。逻辑电路连接如下:

三个时钟信号,分别是74161的CP以及第一列74194的CP和第二列74194的CP。

5.比较电路的设计

根据题目的要求,要求和自己的学号后四位7417进行比较。和7比较,和4比较,和1比较,和7比较。利用7485实现每一位的比较,当所有位的比较相等时,结果输出1。逻辑电路图如下:

封装结果如下:

6.解码电路

利用老师的提供的模块实现解码,点亮对应数码管的不同部分,正确输出对应引脚。

引脚分配如下图所示:

顶层逻辑电路设计

相关主题
相关文档
最新文档