简易计算器报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0.2 关键词
FPGA,VHDL,计算器
一、实验任务及要求
1.1 设计任务及要求
1.基本内容:设计一个简易计算器 2.基本要求:
①实现最大输入两位十进制数字的四则运算(加减乘除) ②能够实现多次连算(无优先级,从左到右计算结果) 如 12+34×56-78÷90+9=36.75 ③最大长度以数码管最大个数为限,溢出报警 ④有正负数区分 ;
resout[27..0] pnout
dout
模块说明: 乘或除的数据及正负在各自符号的下降沿时输出, 在输出时确定输出的是乘
的结果还是除的结果。 即预期在乘符号的下降沿时输出乘的结果; 在除符号的下 降沿时输出除的结果。
又由于两个时钟信号不能控制同一个变量, 所以把 clk1 当成是清零信号,clk2 当成时钟信号, 当 clk2 的下降沿的时候输出数据 2 (即除的结果),clk2 为 1 时,
模块说明: 减法是加法的逆运算, A-B 等同于 A+(-B) ,即减法运算只需在进行加法运算前 把数据的正负取反, 所以当减法的下降沿时输出的正负为输入的取反, 加法的下 降沿时输出的正负为输入的,实现方法与乘除选择模块一致。
8
tt2
reset pnout
pn
dout
clk1 clk2
inst21
][a7a2..td0a
][b.a.70dta ns
R2 O
12 s n
e0 d
d.t]7o0[vt.2ien0nr[mqe7]ua..
]7..0 reu[2mn
0me[o7n]
.. d
EGDN NS rUs e umN
EGDN NS sU
ORX
eonmD
s5 n
81 sn
1072. a a072.
引言:计算器已经成为人们日常生活中不可缺少的一种计算工具, 为我们的 生活提供了很大的方便。 而随着计算机的普及, 越来越多人在使用计算机, 越来 越多的工作离不开计算机,可以说计算机已经成为现代社会中不可或缺的工具, 而电子计算器功能也以软件的形式进入计算机的软件世界, 这不仅给人们带来了
更大的便利,更为人们引入了更快的计算速度和更强大的运算功能。
除法模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity div is
6.加减运算模块:
add
clk reset data[27..0] data_pn
dout[27..0] dout_pn
inst11
模块说明:
由于上一级已考虑加减情况,此模块只需实现加法运算。 A+B 有四种情况:
1、A>0,B>0 输出数据 A+B,正负号为正
2、A>0,B<0 |A|>|B| 输出数据 |A|-|B| 正负号为正 |A|<|B| 输出数据 |B|-|A| 正负号为负
106_e1 gchan
.n]70[. 2 st ure
s4 n
027. 03.
ur es _pn u
es r
u _o sceh oo
ese r aq ue
07.
pn
_
0 27.
aa d aa d es r
np es_ r
3n s
02 7.
n _p ou d
u do
0
dd a
kc
se e r
2d7a
pn 1_pn 2_ aa d aa d
da a d
um
k c ee sr
0 aa7d.
and_pa
0 2e 7 r
s.
_pn er
s
1n s
0 27. 1daa
07. 1_pan 2_pan ad2 a a d a d
vd
kc
e es r
7d0a.
pn da
a_7e02.rs
n _p es r
2 ns
模块说明: 当第一次进行运算或出现过加减再进行乘除的第一次运算时读取输入的数
据值,否则读取前一级的结果值。
其中 clr 为恢复信号 (加 or 减),当其为 1 时,恢复到第一次运算的模式。 clk 本为乘或除,又为了避开与上一级的清零错位,故其变为 (乘 or(除 and not dout))
5.加减选择模块:
tong datain[35..0]
dataout[27..0]
inst9
XOR inst19
模块说明: 当乘法符号的上升沿的时候读入反馈的结果 (包括数据及正负号) 并输出到
data1 、data1_pn; 当乘法符号的下降沿的时候读入数据 (包括数据及正负号) 并输出到 data2 、
data2_pn 。并进行计算,结果的数据由乘法器计算得到;结果的正负号即为两个 相乘数据的正负号取异或。
部分为加法器、 减法器、乘法器和除法器, 存储部分需要 3 个存储器来实现: 内 部累加器( acc)、输入寄存器( reg)以及结果暂存器( ans)。显示部分由七段 译码管组成, 显示输入数字, 加减乘除四个运算符按键,一个符号按键, 一个等
号按键和一个清零按键, 一个计数按键组成的。 通过按键可以完成四位数之内的 加、减、乘、除四种功能运算,其结构简单,易于实现。
3、A<0,B>0 |A|>|B| 输出数据 |A|-|B| |A|<|B| 输出数据 |B|-|A|
正负号为负 正负号为正
4、A<0,B<0 输出数据 A+B,正负号为负
其中 clk 为加 or 减,上升沿时读新数据并计算。
7.进制转换模块:
change16_10 resultin[27..0]
resultout[27..0]
数据为保留两位小数,输出的当成被乘数的数乘上 100。
2.除法模块:
div
clk reset data[7..0] data_pn res[27..0] res_pn
data1[27..0] data2[7..0] data1_pn data2_pn
divide0
numer[27..0]
quotient[27..0]
data_pn: in std_logic; res : in std_logic_vector(27downto 0);
res_pn: in std_logic; data1: out std_logic_vector(27downto 0); data2: out std_logic_vector(7downto 0);
输出数据 1 (即除的结果)。又为了防止 clk2 为 1 与其后面要用到的上升沿冲突, 故添加 dout。
4.结果反馈及输出模块:
res_cs
reset data[7..0]
data_pn clr clk res[27..0] res_pn inst16
result[27..0] result_pn
9
2.4 系统各模块 VHDL 语言设计
乘法模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity mul is
port( clk : in std_logic; reset:in std_logic; data : in std_logic_vector(7downto 0);
mul
clk reset data[7..0] data_pn res[27..0] res_pn
data1[27..0] data2[7..0] data1_pn data2_pn
inst2
lpm_mult0
dataa[27..0]
datab[7..0]
inst
result[35..0]
Unsigned multiplication
数据(包括正负) 除
乘法运算 包括一个乘法器
选择乘 或除 的结果输出
结果反馈输出
若出现加减符 号或第一次计
算,结果反馈 的都是输入的 数据
根据加减法选择数据正负, a-b 即 a+(-b) 进行加减法运算
结果输出 或数据选择输出
进制转换输出
注:各主要 模块都 加
reset 复位
2.3 系统各模块
6
1.乘法模块
PUTCC PUTCC INV INV
Hale Waihona Puke Baiduyd sa
ns um ys
TUINCC
UINVC
UINVC
sumy
rse
ue a q
07. aou ad
ae
ee rs ck
UIPNCVC
UIPNCCV PUINCCV s10n
na _p v a d yd s
kc
2.2 系统总体框架
5
乘
乘法运算 包括一个乘法器
数字系统设计实践 实验报告(四)
实验名称 : 班 级: 学生姓名 : 学 号: 完成日期 :
简易计算器设计 通信 113 胡挺
116040222 2013-06-17
1
目录
绪论
0.1 引言摘要
3
0.2 关键词
3
一、实验任务及要求
3
1.1 设计任务及要求
3
1.2 计算器的系统组成框图
4
二、 系统设计
data1_pn:outstd_logic; data2_pn:outstd_logic
); end entity mul; architecturebehaveof mul is signal temp1:std_logic; signal temp2:std_logic; begin process(reset,clk) begin if(reset='0')then
4
2.1 原理图输入顶层设计
4
2.2 系统总框架
5
2.3 系统各模块
6
2.4 系统各模块 VHDL 语言设计
10
三、 系统测试
15
3.1 部分数据及操作结果
15
2
0.1 引言摘要
绪论
摘要:本文介绍了一个简单计算器的设计, 该设计采用了现场可编程逻辑器 件 FPGA 设计,并基于硬件描述语言 VHDL 在 Altera 公司的 Quartus Ⅱ软件上实 现仿真。系统由计算部分、 存储部分、显示部分和输入部分四个部分组成, 计算
a.
_pn da
a
11 ns
R3 O
s15n
ou pndou
2
ee sr
np
1k c
2k c
s21n
2AND
41 ns
02 7. ures
_n up res
1
OTN
31 ns
_cs s er
sre e a07d.a
pn _ ad a cr
ck
0 s7r e2. snr_pe
16 s n
9 ts n i 2 DN A
if(cdlakt'ae1v<en=treasn;d clk=da'1t'a)1th_epnn<=res_pn;
end if; if(clk'event and clk='0')then
data2<=data;data2_pn<=data_pn; end if; elsedata1<="0000000000000000000000000000";data2<="00000000"; end if; end process; end behave;
7 ts n i
TO
N
0 7 2.
ou pnou d
eosu r
00
se re 1p n
2p n
27. s1 re
27. s2 re
1c
k
2c k
6 ns
RO2
71 sn
0 27. daou
0 n5 a3. ong da
ORX
91 sn
s8 n
u_0p mmt
5t]r[e..0s3dsUgnun
on a mup
3
⑤除法不能除尽时小数保留 2 位有效数字 3.扩展要求:
能够区分运算优先级(先乘除,后加减) 如 12+34×56-78÷90+9=1924.13
1.2 计算器的系统组成框图
二、系统设计
2.1 原理图输入顶层设计
4
03.
207.
pn _
ures
esu r
T UTPU
UPUTTO
O
.t]70[.2 ou uret s
inst4
模块说明: 28 位二进制数 (根据 7 个数码管为限, 最大输出为十进制的 9999999,后两
位为小数位)以十进制的方式显示到数码管上,采用各位求余分别显示的方法。 其中除数分别为十进制的 1000000、100000、10000、1000、100、10,需要
输出的是每次相除后的商及最后一个余数。
data2_pn 。并进行计算,结果的数据由除法器计算得到;结果的正负号即为两个 相除数据的正负号取异或。
数据为保留两位小数,输出的当成被除数的数乘上 100。
3.乘或除数据选择输出模块:
7
tt
reset pn1 pn2 res1[27..0] res2[27..0] clk1 clk2
inst6
denom[7..0]
remain[7..0]
Numer is UNSIGNED
Denom is UNSIGNED
inst6 XOR
inst18 inst3
模块说明:
当除法符号的上升沿的时候读入反馈的结果 (包括数据及正负号) 并输出到
data1 、data1_pn; 当除法符号的下降沿的时候读入数据 (包括数据及正负号) 并输出到 data2 、