2位四则运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
研究生课程论文《二位十进制计数四则运算》
课程名称FPGA原理与运用
姓名刘钰佳
学号1200401018
专业电子与通信工程
任课教师彭盛亮
开课时间2013年3月
教师评阅意见:
论文成绩评阅日期
课程论文提交时间:2013 年 6 月30 日
一、摘要: (3)
二、正文: (3)
2.1、设计要求: (3)
2.2、系统顶层设计 (3)
2.3单元电路设计: (4)
2.3.1、控制模式选择模块: (4)
2.3.2、加法模块: (4)
2.3.3、减法模块: (5)
2.3.4、乘法模块: (6)
2.3.5、除法模块: (7)
2.3.6、模式选择模块: (7)
2.4、软件设计 (8)
2.4.1、“控制模式选择模块”cnt4程序: (9)
2.4.2、“加法模块”内部电路子模块my_add的程序如下: (10)
2.4.3、“减法模块”内部电路子模块my_sub的程序如下: (10)
2.4.4、“乘法模块”内部电路子模块mult2的程序如下: (11)
2.4.5、“模式选择模块”程序: (11)
三、结论: (12)
一、摘要:
本次2位十进制四则运算器电路的设计主要内容是:设计一个2位十进制数的四则运算器,包括加、减、乘、除。
二、正文:
2.1、设计要求:
输入两个2位十进制数(0~99),输出它们的四则运算(加减乘除)结果;发光二极管显示运算模式;
2.2、系统顶层设计
首先是输入二个2位十进制数,分别将这两个数接入加法、减法、乘法和除法模块进行运算,将结果汇总到一个“模式选择模块”,再通过一个按键控制的四进制“控制模式选择模块”控制其输出分别是加法、减法、乘法还是除法的运算的结果,其中除法运算的精确度可以达到小数点的后两位。
2.3单元电路设计:
、控制模式选择模块:
“控制模式选择模块”原理分析:其中cnt4是一个四进制模块,输入端接CLK,当检测到一个上升沿时,cnt4的结果加1,起到模式转换的作用并将对应的模式用发光二极管显示。
“控制模式选择模块”如图1
图 1
仿真波形如图2:
图 2
仿真分析:CLK出现一个上升沿时,CQ加1,当CQ加到3时,仍有上升沿的CLK信号时,CQ回到0。
是一个4进制计数器。
2.3.2、加法模块:
“加法模块”原理分析:输入两个7位2进制数相加,也就是2位的十进制数的和的二进制,得到一个8位的二进制。
对应十进制就有百位、十位和个位。
再通过除法器除法运算,即两位数相加的结果除掉100后,得到百位和余数;余数除掉10后,得到十位和个位。
再将百位、十位和个位分别输出。
“加法模块”如图3
图3
模块内部电路如图4
图4
仿真波形如图5
图5
仿真分析:两个2位十进制数分别为ADD_INH和ADD_INL。
当ADD_INH为56、ADD_INL为96时,运算的结果是152(其中ADD_OUTB是百位、ADD_OUTS是十位、ADD_OUTG是个位)。
是一个2位十进制加法器。
2、减法模块:
“减法模块”原理分析:输入的2位十进制数相减(如A-B),内部定义一个标志位flag,当A大于或者等于B时,flag置为0,否则flag置为1.A-B得到的值,与“加法模块”类似,经过除法运算得到十位和个位。
(结果最多只有两位,极端情况0-99= -99),“减法模块”如图6
图 6
模块内部电路如图7
图7
仿真波形如图8
图8
仿真分析:2位十进制数分别是SUB_INH和SUB_INL,运算的规则是SUB_INH是被减数,SUB_INL是减数。
当被减数为36,减数为62时,结果是—26。
(结果是负数时flag 为“0”,正数或者零时flag为“1”)。
是一个2位十进制减法器。
2.3.4、乘法模块:
“乘法模块”原理分析:首先分析最大的位数,也就是当输入的2位十进制数都是99时,相乘得到的结果是四位的十进制数9801,即“乘法模块”的输出应有四个,分别是千位、百位、十位、和个位。
其实现原理运用了乘法运算过程中的移位相加,输出再通过除法器除法运算,即两位数相乘的结果除掉1000后,得到千位和余数;余数除掉100后,得到百位和余数;余数除掉10后得到十位和个位,再将千位、百位、十位和个位分别输出。
“乘法模块”如图9
图9
模块内部电路如图10
图10
仿真波形如图11
图11
仿真分析:MULT_INH为80,MULT_INL为16时,运算的结果是1280。
经验证结果正确,是一个2位十进制乘法器。
(其中MULT_OUTQ是千位、MULT_OUTB是百位、MULT_OUTS是十位、MULT_OUTG是个位)
2.3.5、除法模块:
“除法模块”原理分析:除法运算采用调用LPM_DIVIDE模块,2位十进制数相除可能得到2位的商,也可能得到2位的余数,所以需要分别对商和余数再一次求摸运算,就得到商和余数。
“除法模块”如图12
图12
模块内部电路如图13
图14
仿真波形如图15
图15
仿真分析:DIV_INH是被除数,DIV_INL是除数。
当被除数为99,除数为64时,结果是商为“01”,余数“35”。
经验证结果正确,是一个2位十进制除法器。
(DIV_OUTSS 是商的十位、DIV_OUTSG是商的个位、DIV_OUTYS是余数的十位、DIV_OUTYG是余数的个位)
2.3.6、模式选择模块:
“模式选择模块”原理分析:模式选择模块,是对模式加以选择,对于加减乘除四个模
块的结果集中到内部,输入端mod_sel的不同,使得输出的不同。
当mod_sel为“00”时,输出加法运算的结果;“01”时,输出减法运算的结果;“10”时,输出乘法运算的结果;否则输出除法运算的结果。
以及输出端还有一个mod_out接四个LED灯分别按顺序代表着加减乘除模式。
“模式选择”模块如图16
图16
仿真波形如图17
图17
仿真分析:当输入为22和12(或75和89)时,且SEL_MOD没有上升沿脉冲时,模式选择模块为加法模式——结果是34(或164),MOD为“0001”;当SEL_MOD有一个上升沿脉冲时,模式选择模块进入减法模式——结果为输入的两个数55和41(或32和95)相减,结果为14(或-63)(此时OUT_QIAN无数据,显示0。
OUT_BAI是符号位flag。
OUT_SHI 和OUT_GE分别是结果的十位和个位。
);同理当MOD有两个上升沿脉冲时,模式选择进入乘法模式——结果为两个输入相乘,此时OUT_QIAN、OUT_BAI、OUT_SHI、OUT_GE 分别是千、百、十、个位;当MOD有三个上升沿脉冲时,模式选择模块进入除法模式——结果是两输入14和49(或56和12)相除,商“00”或(“04”),余数“14”或(“08”),此时OUT_QIAN、OUT_BAI、OUT_SHI、OUT_GE分别表示商的十位和个位、余数的十位和个位。
注意:减法模块中的符号位flag,在模式选择模块中OUT_BAI是符号位not flag,即被减数大于或等于减数时,flag为0。
2.4、软件设计
本设计采用quartus II 7.2软件设计,运用一般的VHDL程序设计方法、原理图电路设
计方法以及LPM_ROM宏模块的运用等方法实现。
程序的流程方框图
开始
输入2位十进制数
加法模块减法模块乘法模块除法模块
模式选择
输出结果、模式
结束
程序清单
2.4.1、“控制模式选择模块”cnt4程序:
2.4.2、“加法模块”内部电路子模块my_add的程序如下:2.4.3、“减法模块”内部电路子模块my_sub的程序如下:
2.4.4、“乘法模块”内部电路子模块mult2的程序如下:2.4.5、“模式选择模块”程序:
三、结论:
本次设计存在一个缺陷,即当除法运算除数为0时,未能有错误警告,导致输出结果为任意值。
由于设计时间较短,也由于自己的疏忽,使得设计并不是那么完美。
其他指标均满足要求,而且添加了除法运算的余数功能,除法运算更加精确。