FPGA简易加减法计算器设计

题目要求:
(1)设计10以内的加减法计算器。
(2)1个按键用于指定加法或减法,一个用于指定加数或被加数,还有两个分别控制加数或被加数的增加或减少。
(3)设置的结果和计算的结果用数码管显示。

本实验我还是将其视作Mealy型向量机,具体的见我之前关于秒表的内容:VHDL实验:基于有限状态机实现秒表
按照题目意思,有4个键是必不可少的,但我还是决定增加两个推键,本实验状态图如下:
在这里插入图片描述
S0:初态模式,所有数码管置零
S1:计算模式,等待用户设置并计算
这两者之间的转换我用开发板上的推键来完成。
另一个推键指示是进行整数运算还是一位小数。

我的代码:(抱歉注释是全英文的)

library ieee ;
use ieee.std_logic_1164.all ;
use ieee.std_logic_unsigned.all ;
use ieee.std_logic_arith.all ;entity Computer isport (key3 : in std_logic ;						-- is addition or subtraction?key2 : in std_logic ;						-- who is augend or minuend?key1 : in std_logic ;						-- change the value of augend or minuendkey0 : in std_logic ;						-- change the value of addend or subtrahendsw0 : in std_logic ;						-- change the state of circuitsw1 : in std_logic ;first1 : out std_logic_vector(0 to 6) ;first2 : out std_logic_vector(0 to 6) ;second1 : out std_logic_vector(0 to 6) ;second2 : out std_logic_vector(0 to 6) ;negative : out std_logic_vector(0 to 6) ;	-- Is the result a negative number?empty : out std_logic_vector(0 to 6) ;result1 : out std_logic_vector(0 to 6) ;	-- the result of computingresult2 : out std_logic_vector(0 to 6) ;	-- the result of computingPoint : out std_logic_vector(7 downto 0) ;	-- Radix pointledg8 : out std_logic ;						-- if substractionledr16 : out std_logic ;					-- it is augend or minuendledr13 : out std_logic 						-- it is augend or minuend) ;
end Computer ;architecture mathematic of Computer isconstant matrix_num : integer := 9 ;TYPE Number is array (0 to matrix_num) of std_logic_vector(0 to 6);signal Display : Number := (('0', '0', '0', '0', '0', '0', '1'),		-- 0('1', '0', '0', '1', '1', '1', '1'),			-- 1('0', '0', '1', '0', '0', '1', '0'),			-- 2('0', '0', '0', '0', '1', '1', '0'),			-- 3('1', '0', '0', '1', '1', '0', '0'),			-- 4('0', '1', '0', '0', '1', '0', '0'),			-- 5('0', '1', '0', '0', '0', '0', '0'),			-- 6('0', '0', '0', '1', '1', '1', '1'),			-- 7('0', '0', '0', '0', '0', '0', '0'),			-- 8('0', '0', '0', '0', '1', '0', '0')			-- 9) ;TYPE state_type is (s0, s1) ;		-- how many states does the circuit have?signal current_state : state_type ;-- all of them below are middle datasignal neg : std_logic_vector(0 to 6) := ('1', '1', '1', '1', '1', '1', '1') ;signal led8 : std_logic ;						signal led16 : std_logic ;					signal led13 : std_logic ;signal p : std_logic_vector(7 downto 0) ;					
beginprocess(sw0)											 -- to change the state of circuitbeginif (sw0 = '0') thencurrent_state <= s0 ;elsecurrent_state <= s1 ;end if ;end process ;process(current_state, key3, key2, key1, key0, sw1) -- take action according to statevariable First : integer := 0 ;variable Second : integer := 0 ;variable Result : integer := 0 ;variable num3 : integer := 0 ;variable num2 : integer := 0 ;beginif (current_state = s0) thenFirst := 0 ;Second:= 0 ;Result:= 0 ;num3  := 0 ;num2  := 0 ;neg <= ('1', '1', '1', '1', '1', '1', '1') ;					p <= ('1', '1', '1', '1', '1', '1', '1', '1') ;led8 <= '0' ;led16 <= '0' ;				led13 <= '0' ;elsif (current_state = s1) thenif (sw1 = '1') then			-- make sure integer or floatp <= ('0', '1', '0', '1', '1', '1', '0', '1') ;else p <= ('1', '1', '1', '1', '1', '1', '1', '1') ;end if ;if falling_edge(key2) then	-- make sure who is augend or minuend?num2 := num2 + 1 ;end if ;if ((num2 > 0) and(num2 MOD 2 = 0)) thenled16 <= '0' ;led13 <= '1' ;elsif (num2 MOD 2 = 1) thenled16 <= '1' ;led13 <= '0' ;end if ;if falling_edge(key1) then		-- decide the value of first numberFirst := First + 1 ;if (First > 10) thenFirst := 0 ;end if ;end if ;if falling_edge(key0) then 		-- decide the value of second numberSecond := Second + 1 ;if (Second > 10) thenSecond := 0 ;end if ;end if ;if falling_edge(key3) thennum3 := num3 + 1 ;end if ;if (num3 MOD 2 = 1) thenled8 <= '0' ;neg(6) <= '1' ;Result := First + Second ;elsif ((num3>0) and (num3 MOD 2 = 0)) thenled8 <= '1' ;if (led13 = '1') thenif (Second < first) thenneg(6) <= '0' ;Result := First - Second ;elseneg(6) <= '1' ;Result := Second - First ;end if ;elsif (led16 = '1') thenif (first < Second) thenneg(6) <= '0' ;Result := Second - First ;elseneg(6) <= '1' ;Result := First - Second ;end if ;end if ;end if ;end if ;empty <= ('1', '1', '1', '1', '1', '1', '1') ;first1 <= Display(First/10) ;first2 <= Display(First MOD 10) ;second1 <= Display(Second/10) ;second2 <= Display(Second MOD 10) ;negative <= neg ;result1 <= Display(Result/10) ;result2 <= Display(Result MOD 10);Point <= p ;ledg8 <= led8 ;ledr16 <= led16 ;ledr13 <= led13 ;end process ;
end mathematic ;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/283578.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发了一年的IDEA插件,接口调试的强大工具,敢说吊打所有

前言 经历了整整一年的开发&#xff0c;现在这款插件终于可以测试了&#xff0c;可以到网站http://plugin.houxinlin.com 进行下载(Idea版本仅支持2021.1及以上)。 那么&#xff0c;这个插件到底解决了什么问题&#xff1f;以至于我花了一整年时间。 每个后端程序员都需要借助…

机器学习---推荐系统案例(一)

一、推荐系统-数据处理流程 推荐系统数据处理首先是将Hive中的用户app历史下载表与app浏览信息表按照设备id进行关联&#xff0c;然后将关联数据使用python文件进行处理&#xff0c;将数据预处理为label和feature两列的临时数据&#xff0c;后期经过处理转换成逻辑回归 模型的…

python读取excel数据 附实战代码

在Python中&#xff0c;可以使用pandas库来读取Excel文件中的数据。下面是一个简单的例子&#xff1a; import pandas as pd# 读取Excel文件 df pd.read_excel(example.xlsx)# 显示前5行数据 print(df.head())在上面的代码中&#xff0c;我们首先导入了pandas库&#xff0c;并…

Java 内存模型(JMM)探寻原理,深度讲解

目录 一. 前言 二. 为什么会有内存模型 2.1. 硬件内存架构 2.2. 缓存一致性问题 2.3. 处理器优化和指令重排序 三. 并发编程的问题 四. Java 内存模型&#xff08;JMM&#xff09; 4.1. Java 运行时内存区域与硬件内存的关系 4.2. Java 线程与主内存的关系 4.3. 线程…

深入探索Spring Batch:大规模批处理的领航者

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 写在前面参与规则 ✅参与方式&#xff1a;关注博主、点赞、收藏、评论&#xff0c;任意评论&#xff08;每人最多评论…

万文详解JUC(超详细)

生命无罪&#xff0c;健康万岁&#xff0c;我是laity。 我曾七次鄙视自己的灵魂&#xff1a; 第一次&#xff0c;当它本可进取时&#xff0c;却故作谦卑&#xff1b; 第二次&#xff0c;当它在空虚时&#xff0c;用爱欲来填充&#xff1b; 第三次&#xff0c;在困难和容易之…

SpringBoot之响应案例的详细解析

2.3 案例 下面我们通过一个案例&#xff0c;来加强对请求响应的学习。 2.3.1 需求说明 需求&#xff1a;加载并解析xml文件中的数据&#xff0c;完成数据处理&#xff0c;并在页面展示 获取员工数据&#xff0c;返回统一响应结果&#xff0c;在页面渲染展示 2.3.2 准备工作…

Pipe转token教程

打开网站&#xff1a;https://www.satsx.io/pipe 选择Transfer&#xff0c;以及pipe 选择转账数量&#xff0c;点击select uxto关键是可以多选 填入买家地址&#xff0c;以及输入对应数量即可

如何确保对称密钥管理的存储安全?

确保对称密钥管理的存储安全是保障信息安全的重要一环。以下是一些建议&#xff0c;以确保对称密钥管理的存储安全&#xff1a; 使用安全存储设备&#xff1a;选择使用经过验证的安全存储设备来存储对称密钥。这些设备通常具有高度的物理安全性&#xff0c;可以防止未经授权的访…

Acre1-6000电气火灾监控系统在工矿企业的应用——安科瑞 顾烊宇

摘要&#xff1a;主要介绍了电气火灾的主要原因、几种电气火灾监控系统的构成和设立意义。参照各规范&#xff0c;讨论了宜设立电气火灾监控系统的场所。该系统的设立可大大减少电气火灾事故的发生&#xff0c;对保证人们的生命财产安全具有重要意义。 关键词:电气火灾&#x…

透明之光:探讨可解释性人工智能的前沿

导言 随着人工智能技术的飞速发展&#xff0c;可解释性人工智能&#xff08;Explainable AI, XAI&#xff09;成为关注焦点。本文将深入研究可解释性人工智能的背景、技术原理以及在不同领域的应用。 1. 背景与挑战 在许多领域&#xff0c;人工智能模型的黑盒性引发了关于决策…

Web前端-HTML(初识)

文章目录 1.认识WEB1.1 认识网页&#xff0c;网站1.2 思考 2. 浏览器&#xff08;了解&#xff09;2.1 五大浏览器2.2 查看浏览器占有的市场份额 3. Web标准&#xff08;重点&#xff09;3.1 Web 标准构成结构表现行为 1.认识WEB 1.1 认识网页&#xff0c;网站 网页主要由文字…