实验四FPGA时序逻辑设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
In[4]
1 0 0 0 1 1 1 1 1 1 0 1 1 1 1 1
In[3]
1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1
In[2]
1 1 1 0 1 1 0 1 1 0 1 1 1 1 1 0
In[1]
0 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1
In[来自百度文库]
1 0 1 1 0 1 1 0 1 1 1 1 1 1 0 1
2、 实验要求: 1、 根据设计要求划分设计层次、单元模块和接口信号,在预习报告上记录设计过程,
绘制系统框图, 每个模块的状态转移图或 ASM 图,并设计验证方案。 2、 用原理图输入法设计所有单元模块并编译,分析编译时产生的错误和警告信息 3、 对所有的单元模块进行功能仿真,并记录和分析全部仿真结果 4、 在顶层文件中连接全部单元模块并编译、综合、分配管脚和适配。 5、 对整个系统进行时序仿真,并记录和分析仿真结果。 6、 将仿真正确的设计下载到实验箱上,连接输入输出设备和示波器进行板级验证
可编辑
实验四 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 键盘上拉电阻也已连接好。
按键开关一般是利用机械触点来实现合、断的。由于机械触 点的弹性作用,在按键闭 合和断开的瞬间均会出现一系列尖脉冲,如图所示,这种现象称之为“抖动”。抖动时间的 长短与开关的机械特性有关,一般为 5~10mS。而按键稳定闭合的时间是由操作人员的按 键动作所确定的,一般不低于 0.1 秒。为了保证电路对键的一次闭合仅做一次键输入处。
通过以上的分析可以得到结论,每一个数码管应该对应两个 74194,这两个 74194 的 工作状态应该是相反的。74194 的工作状态只有两个,分别是同步置数和保持,对应 分 别位 11 和 00。存储电路的时钟信号应该和 row[3..0]有关。
通过 74138,结合 74138 的使能端,决定每一位应该存储到哪个 74194 中。故应该 有 4 个 74138 存在。例如:当 =00 的时候,此时的 4 位二进制数中的每一位都选择 存储到第一个 74194 中。逻辑电路图如下:
。此时满足自启动。
另外,考虑到还有控制信号 E,当 E 为 1,电路保持扫描状态;当 E 为 0 是,电路停
止扫描,保持此时的状态。为了完成此功能,使时钟信号为 逻辑电路图:
。
,
。
精品文档
可编辑
2. 消除抖动 根据题目的要求,使用 D 触发器消除抖动。使用两个 7474 进行封装,封装为一个四 输入四输出的 D 触发器。 逻辑电路:
3. 转码为二进制码 通过行列的扫描结果可以得到 8 位二进制码,需要转换得到 4 位二进制码。
精品文档
可编辑
In[7]
0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
In[6]
1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1
In[5]
1 1 1 1 0 0 0 1 1 1 1 0 1 1 1 1
精品文档
可编辑
通过对行线轮流加低电平信号,
的值在 1110,1101,1011 和 0111 之间变
化。无键摁下时,
等于 1111,
;有按键摁下时,行线
短接,
不等于 1111,
。检测到变化时,输出控制信号
,使行线停止扫描。行线和列线共同构成 8 位二进制码通过译码电路进行译码 得到键值。松开按键,列线 R=1,扫描继续。
实验内容
设计原理
矩阵式键盘,将 I/O 线分别组成行、列结构,按键设置在行列的交点上。4×4 行列键 用 4 条 I/O 线作为行线,4 条 I/O 线作为列线所组成的的键盘,16 个按键分别设置在行、 列线的交点处,行线、列线分别连接到按键开关的两端。所有的行线和列线都通过上拉电阻 接电源,钳位在高电平状态。相比较独立式按键,4×4 行列式键盘只需要 8 根 I/O 线就 实现了 16 个按键,节省了 8 个 I/O 口。但由于行、列线为多键共用,各按键彼此将相互 发生影响,必须将行、列线信号配合起来并作适当的处理,才能确定闭合键的位置。
16 进 制码
0 1 2 3 4 5 6 7 8 9 A B C D E F
二进 制码 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
使用 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 位二进制信号,由此保证在按下新的按键的时候,以前的数值不会立马被清零, 直到完成按键的动作的时候,数码管才显示新输入的按键内容。
1. 键盘的行线扫描电压
使用寄存器 74194,构造一个模为 4 的状态循环,采用右移,
。
电路状态:1110→1101→1011→0111→1110 真值表:
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
0
卡诺图:
精品文档
可编辑
最简逻辑表达式:
。但此时并不满足自动。
重新修改无关的循环,并修改卡诺图 :
利用最大项之和得到: