实验四FPGA时序逻辑设计学习目标1、了解可编程数字系统设计的流程2、掌握QuartusII软件的使用方法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之间变化。C3C2C1C0无键摁下时,等于1111,;有按键摁下时,行线短接,R3R2R1R0R=R3*R2*R1*R0=1不等于1111,。检测到变化时,输出控制信号R3R2R1R0R=R3*R2*R1*R0=0,使行线停止扫描。行线和列线共同构成8位二进制码通过译码电路进行译码E=R3R2R1R0得到键值。松开按键,列线R=1,扫描继续。按键开关一般是利用机械触点来实现合、断的。由于机械触点的弹性作用,在按键闭合和断开的瞬间均会出现一系列尖脉冲,如图所示,这种现象称之为“抖动”。抖动时间的长短与开关的机械特性有关,一般为5~10mS。而按键稳定闭合的时间是由操作人员的按键动作所确定的,一般不低于0.1秒。为了保证电路对键的一次闭合仅做一次键输入处。1.键盘的行线扫描电压使用寄存器74194,构造一个模为4的状态循环,采用右移,。S1C0=01电路状态:1110→1101→1011→0111→1110真值表:C3C2C2C2DSR11101110111011101110卡诺图:最简逻辑表达式:。但此时并不满足自动。DSR=C3重新修改无关的循环,并修改卡诺图:利用最大项之和得到:。此时满足自启动。DSR=C2+C1+C0=C2C1C0另外,考虑到还有控制信号E,当E为1,电路保持扫描状态;当E为0是,电路停止扫描,保持此时的状态。为了完成此功能,使时钟信号为。,。CP*ES1=0S2=1逻辑电路图:2.消除抖动根据题目的要求,使用D触发器消除抖动。使用两个7474进行封装,封装为一个四输入四输出的D触发器。逻辑电路:3.转码为二进制码通过行列的扫描结果可以得到8位二进制码,需要转换得到4位二进制码。In[7]In[6]In[5]In[4]In[3]In[2]In[1]In[0]C3C2C1C0R3R2R1R016进制码二进制码011111010000011101110100011110110120010111010113001111011110401001101110150101110110116011010111110701111011110181000101110119100111100111A101011010111B101110110111C110001110111D110101111110E111001111011F1111使用Verilog语言实现,并实现封装。16个按键分别按下时,对应16种不同的情况,编码从0到F的二进制代码。当按键没有按下时,输出0的4位二进制代码。代码如下:逻辑电路图的如下:4.储存电路设计转码部分每次只能输出一个4位二进制代码,又因为有四个数码管要显示不同的字,所以要对转码后的4位二进制代码进行存储。通过746161构造一个周期为4的循环:00→01→10→11。在此处键入公式。74161的输出和决定此时转码的4位二进制信号因该储存到哪里,以及74194的QAQB工作状态。首先用4个74194进行存储此时的4位二进制信号,再用4个74194存储以前的4位二进制信号,由此保证在按下新的按键的时候,以前的数值不会立马被清零,直到完成按键的动作的时候,数码管才显示新输入的按键内容。通过以上的分析可以得到结论,每一个数码管应该对应两个74194,这两个74194的工作状态应该是相反的。74194的工作状态只有两个,分别是同步置数和保持,对应分别S1S0位11和00。存储电路的时钟信号应该和row[3..0]有关。通过74138,结合74138的使能端,决定每一位应该存储到哪个74194中。故应该有4个74138存在。例如:当=00的时候,此时的4位二进制数中的每一位都选择存储到第QAQB一个74194中。逻辑电路图如下:举例说明,当=00的时候,第一个74194选择存储,此时的74194的状态应该是并QAQB行输入,后面的74194状态时的保持(保持上一个二进制数)。当按键动作结束,此时01,跳到下一个状态,第一个74194的状态变为保持,后面的74194状态变为并行输QAQB=入。直观上来看,当按键动作结束时,数码管更新显示新的数字。逻辑电路图连接如下:通过分析可以得到,上面的两列74194的CP时钟信号是不同,对应的上升触发沿是不一样的时间,才可以完成相应的功能。逻辑电路连接如下:三个时钟信号,分别是74161的CP以及第一列74194的CP和第二列74194的CP。5.比较电路的设计根据题目的要求,要求和自己的学号后四位7417进行比较。和7比较,和4比较,S0S1和1比较,和7比较。利用7485实现每一位的比较,当所有位的比较相等时,结果输出S2S31。逻辑电路图如下:封装结果如下:6.解码电路利用老师的提供的模块实现解码,点亮对应数码管的不同部分,正确输出对应引脚。引脚分配如下图所示:顶层逻辑电路设计