一、设计要求

利用Altera公司的FPGA做为主控设计一款简易计算器。简易计算器可以计算简单的千位以内加减乘除计算,通过矩阵键盘输入数字及运算符,并将计算结果显示在数码管上。

设计中采用Altera的飓风第4代产品家族中的EP4CE6E22C8N为主控,矩阵键盘作为计算器输入,共阳数码管作为计算器输出。

二、基本原理

基本实现原理是通过矩阵键盘进行输入,通过判断按下的按键是数字还是运算符,如果是数字则进行数字处理,若为运算符则保存此运算符,在进行输入第二个数,在第二次遇到运算符时则运算,把运算结果给num1,把num2清零,显示num1。这样就完成了简单的加减乘除运算。

三、系统原理图

矩阵按键原理图如下图所示,

按键设置在行列线交叉点,行、列线分别连接到按键开关的两端。列线通过上拉电阻接+5V的电压,即列线的输出被钳位到高电平状态。行线与按键的一个引脚相连,列线与按键的另一个引脚相连。判断键盘中有无按键按下是通过行线送入扫描信号,然后从列线读取状态得到的。其方法是依次给行线送低电平,检查列线的输入。如果列线信号全为高电平,则代表低电平信号所在的行中无按键按下;如果列线有输入为低电平,则低电平信号所在的行和出现低电平的列的交点处有按键按下。

共阳数码管:

共阴极数码管是把所有led的阴极连接到共同接点com,而每个led的阳极分别为a、b、c、d、e、f、g及dp(小数点),如下图所示。图中的8个led分别与上面那个图中的a~dp各段相对应,通过控制各个led的亮灭来显示数字。

共阳数码管动态显示就是轮流向各位数码管送出字形码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示,而实际上多位数码管是一位一位轮流显示的,只有轮流的速度非常快,人眼已经无法分辨出来,在FPGA中是通过一定的频率循环输出对应的位选和段选以达到多位数码管同时显示的。

三、设计步骤和调试过程

1.模块设计

把总工程分为五个部分分别为按键检测及消抖动、数字输入、转码、显示、运算。

(1)按键检测模块通过轮流给每一列输出低电平,然后通过扫描每行是否有低电平,若有低电平则更改键值并把低电平所在行信号传递给按键消抖模块,否则继续循环输出低电平。消抖模块是采用状态机对按键按下动作的按下阶段和释放阶段进行计数延时以达到消抖的目的。

(2)数字输入模块通过按键消抖得到的按键按下标志信号,当按键标志为按键按下时让这个数字乘十加上现在的键值如此循环便可输入一个数字。

(3)转码模块通过左移、判断是否大于四、是否加三得到该数的个十百千位的四位二进制码,共十六位。

(4)显示模块分别把转码得到的各十百千的十六位传递给动态数码管显示,并由dis_flagp判断显示num1还是num2。

(5)计算模块通过opera_flag储存运算符,并在第二次按到运算符时进行运算。

2.仿真及仿真结果分析

上图是矩阵按键及消抖的仿真图,如图可以看出,当按键无按下时也就是key_r全为1时,key_c在给四位循环置零以实现列扫描,当按key_r不全为1时,扫描停止,并把键值输出给key_out。

把key_r的低电平位作为key_filter模块的输入信号,进行消抖其中图1是按键下降沿,图2是按键上升沿。由仿真时序图可以看出按键下降沿可用(key_flay && key_state)表示,按键上升沿可用(key_flag && (!key_state))表示。

3.FPGA内部电路结构图

上图是FPGA内部电路结构图,由于整体太复杂无法看清因此在接下来我会从左到右依次介绍

上图中key_array是矩阵案件模块,key_filter是按键消抖模块,再通过en寄存器来同步按键的值key_num寄存器,图中还有两个寄存器分别是dis_flag和opera_flag寄存器,他们分别是显示标志和运算符保存,它是通过后面的opera模块来控制的。

上图中add模块是输入数字模块,opera是运算模块,当key_num为数字时进入add更改dis_flag所对应的数字,当key_num为运算符时进入opera进行更改opera_flag、dis_flag、num_a、num_b。中间那些选择器是判断把add更改的值给num_a还是num_b的。

上图中左边的选择器是选择把num_a还是num_b给bcd_d模块,bcd_d模块是把二进制码转换成四位十进制千位,四位十进制百位,四位十进制十位,四位十进制个位,在把这些信号传给数码管,让数码管动态显示出所选的数。

4.实验调试结果

输入数据99,再按加法键,输入第二个数字99,按等号键,数码管显示数字198;按减号键,输入第三个数字8,按等号键,数码管显示数字190;按乘号键,输入第四个数字2,按等号键,数码管显示数字390;按除号键,输入第五个数字10,按等号键,数码管显示最后的结果为39。最后按复位键清零。

由于FPGA模块过多所以没有贴出代码,请自行在百度云下载工程文件。

链接:https://pan.baidu.com/s/1uuKzC2lXogIS0Hc1691NKg 
提取码:okaj 
复制这段内容后打开百度网盘手机App,操作更方便哦

FPGA简易计算器 + 工程源码相关推荐

  1. FPGA实现UDP传输视频,提供2套verilog工程源码和接收显示上位机程序

    FPGA实现UDP传输是FPGA在通信领域的应用之一,只要有UDP收发模块,那么实现UDP传输就只剩下数据组包的事项了: 之前我写过一篇文章介绍过FPGA实现UDP协议的文章FPGA实现UDP协议 后 ...

  2. FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持

    目录 1.前言 2.JPEG-LS图像压缩理论 3.JPEG-LS图像压缩性能介绍 4.JPEG-LS图像压缩时序介绍 5.JPEG-LS图像压缩输出压缩流 6.工程源码和仿真 7.福利:工程代码的获 ...

  3. FPGA解码4line MIPI视频 IMX291/IMX290摄像头采集 提供工程源码和技术支持

    目录 1.前言 2.Xilinx官方主推的MIPI解码方案 3.我已有的MIPI解码方案 4.纯Vhdl代码解码MIPI 5.vivado工程介绍 6.上板调试验证 7.福利:工程代码的获取 1.前言 ...

  4. FPGA纯verilog代码实现图像对数变换,提供工程源码和技术支持

    目录 1.图像对数变换理论 2.log系数的matlab生成 3.FPGA实现图像对数变换 4.vivado与matlab联合仿真 5.vivado工程介绍 6.上板调试验证并演示 7.福利:工程代码 ...

  5. FPGA基于XDMA实现PCIE X4通信方案 提供工程源码和QT上位机程序和技术支持

    目录 1.前言 2.我已有的PCIE方案 3.PCIE理论 4.总体设计思路和方案 5.vivado工程详解 6.驱动安装 7.QT上位机软件 8.上板调试验证 9.福利:工程代码的获取 1.前言 P ...

  6. FPGA纯verilog代码读写N25Q128A QSPI Flash 提供工程源码和技术支持

    目录 1.N25Q128A芯片解读 2.N25Q128A读写时序 3.整体设计思路架构 4.verilog读写Flash驱动设计 5.verilog读写Flash控制器设计 6.FIFO缓存设计 7. ...

  7. FPGA纯Verilog实现任意尺寸图像缩放,串口指令控制切换,贴近真实项目,提供工程源码和技术支持

    目录 1.前言 2.目前主流的FPGA图像缩放方案 3.本方案的优越性 4.详细设计方案 5.vivado工程详解 6.上板调试验证并演示 7.福利:工程源码获取 1.前言 代码使用纯verilog实 ...

  8. FPGA驱动silicon9011和silicon9134完成HDMI收发,提供工程源码和技术支持

    目录 1.HDMI输入输出设计框架 2.silicon9011/9013芯片详解及配置 3.silicon9134芯片详解及配置 4.FPGA工程介绍 5.上板调试验证 6.福利:工程源码获取 1.H ...

  9. FPGA纯verilog实现视频拼接,纯逻辑资源搭建,提供4套工程源码和技术支持

    目录 1.本方案的实用价值 2.总体设计方案 3.视频拼接方案算法 4.工程1:单路视频输出 5.工程2:2路视频拼接输出 6.工程3:3路视频拼接输出 7.工程4:4路视频拼接输出 8.上板调试验证 ...

最新文章

  1. Simulink仿真教程5---仿真参数设置和示波器的使用
  2. Message LongText(消息的详细长文本)
  3. 顺序容器及其常用函数
  4. 从研究到应用:腾讯AI Lab的自然语言理解和生成
  5. ERP的配置管理实践
  6. matlab打开笔记本摄像头_如何解决笔记本电脑摄像头异常问题
  7. 显卡服务器已停止响应,电脑提示显卡驱动已停止响应并且已成功恢复该怎么解决?...
  8. python - 2 8 16进制/颜色/字符编码
  9. section怎么制造图框_cad中如何制作带属性块的图框 - CAD自学网
  10. java环境怎么搭,如何搭建一个完整的Java开发环境
  11. javascript的模块开发方法;
  12. java jxl 复制单元格_如何用JAVA(如poi、jxl等)读取excel文件中的下拉框单元格的值。...
  13. 小游戏练手1——雷速小子
  14. Redis单机最大并发量
  15. flash 图表(XML动态获取数据)
  16. 一款APP从设计稿到切图过程全方位揭秘(IOS版)
  17. python 异常重试模块retry
  18. CSSAPP稀里糊涂的读书笔记(一)计算机系统漫游
  19. 华为鸿蒙系统研发砸了多少钱,5000研发人员,打造生态系统砸10亿美元,为鸿蒙华为几乎不惜代价!...
  20. IT人的纠结:去大公司还是去小公司?

热门文章

  1. 使用oracle数据库建表语句,怎么使用sql查询oracle建表语句
  2. Oracle EBS R12 GL总帐模块 查询账户余额、发生额SQL
  3. 云盘 同步盘介绍 同步工具介绍
  4. 概率论与数理统计(一)知识框架
  5. HarmonyOS app 开发应用框架的架构和组成(Java)
  6. Zabbix4.4 技术解决方案(实战篇) 监控 Nginx 日志 统计WEB网站PV和UV
  7. 布尔表达式----栈
  8. 清迈中文离线地图App上线
  9. 2023年5月PMP应该如何备考?(含pmp资料)
  10. Saturn Java作业SpringBoot方式开发打包