移位相加8位硬件乘法器电路设计报告.docx
- 文档编号:10634554
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:13
- 大小:212.79KB
移位相加8位硬件乘法器电路设计报告.docx
《移位相加8位硬件乘法器电路设计报告.docx》由会员分享,可在线阅读,更多相关《移位相加8位硬件乘法器电路设计报告.docx(13页珍藏版)》请在冰豆网上搜索。
移位相加8位硬件乘法器电路设计报告
学号:
08437119
课程名称:
FPGA设计
题目:
移位相加8位硬件乘法器电路设计
学生姓名:
谈鹏
学院(系):
信息科学与工程学院专业班级:
通信081
一、产品设计需求说明
本产品实现的功能:
比较方便地实现两个8位二进制数的乘法运算。
设计参数
使用的芯片/硬件平台
GW48实验系统
软件平台
WindowsXP+MuxplusII10.1
二、方案设计及实现
1、系统实现原理和总体框图
该乘法器是由8位加法器构成的以时序方式设计的8位乘法器。
其乘法原理是:
乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。
从下图可以清楚地看出此乘法器的工作原理。
在下图中,START信号的上跳沿及其高电平有两个功能,即16位寄存器清零和被乘数A[7..0]向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号。
CLK为乘法时钟信号。
当被乘数被加载于8位右移寄存器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。
当为1时,与门ANDARITH打开,8位乘数B[7..0]在同一节拍进入8位加法器,与上一次锁存在16位锁存器REG16B中的高8位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。
而当被乘数的移出位为0时,与门全零输出。
如此往复,直至8个时钟脉冲后,乘法运算过程中止。
此时REG16B的输出值即为最后的乘积。
此乘法器的优点是节省芯片资源,它的核心元件只是一个8位加法器,其运算速度取决于输入的时钟频率。
本设计采用层次描述方式,且用原理图输入和文本输入混合方式建立描述文件。
下图是乘法器顶层图形输入文件,它表明了系统由8位右移寄存器(SREG8B)、8位加法器(ADDER8)、选通与门模块(ANDARITH)和16位锁存器(REG16)所组成,它们之间的连接关系如下图所示。
原理框图:
移位相加硬件乘法器电路原理图
2、主要模块之8位右移寄存器模块的设计
模块说明:
输入为clk,load和din,输出为qb。
模块的主要功能是数据右移
8位右移寄存器工作流程图
源代码:
--File:
sreg8b.vhd
--Designer:
谈鹏
--Module:
clock
--Description:
--Simulator:
MAXplusII10.0.9/WindowXP
--Synthesizer:
MAXplusII10.0.9/WindowXP
--Date:
2011/05/02
--Modifydate:
2011/05/02
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYsreg8bIS--8位右移寄存器
PORT(clk:
INSTD_LOGIC;LOAD:
INSTD_LOGIC;
din:
INSTD_LOGIC_VECTOR(7DOWNTO0);
qb:
OUTSTD_LOGIC);
ENDsreg8b;
ARCHITECTUREbehaveOFsreg8bIS
SIGNALreg8:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
PROCESS(clk,load)
BEGIN
IFload='1'THENreg8<=din;--装载新数据
ELSIFCLK'EVENTANDCLK='1'THEN
reg8(6DOWNTO0)<=reg8(7DOWNTO1);--数据右移
ENDIF;
ENDPROCESS;
qb<=reg8(0);--输出最低位
ENDbehave;
仿真图
3、主要模块之8位加法寄存器模块的设计
模块说明:
输入为b,a,输出为s。
模块的主要功能是实现两个8位数的加法运算。
8位加法寄存器的工作流程图
源代码:
--File:
adder8.vhd
--Designer:
谈鹏
--Module:
clock
--Description:
--Simulator:
MAXplusII10.0.9/WindowXP
--Synthesizer:
MAXplusII10.0.9/WindowXP
--Date:
2011/05/02
--Modifydate:
2011/05/02
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYadder8IS--8位加法器
PORT(b,a:
INSTD_LOGIC_VECTOR(7DOWNTO0);
s:
OUTSTD_LOGIC_VECTOR(8DOWNTO0));
ENDadder8;
ARCHITECTUREbehaveOFadder8IS
BEGIN
s<='0'&a+b;0,a并置再与b相加
ENDbehave;
仿真图
4、主要模块之选通与门模块的设计
模块说明:
输入为abin和din,输出为dout
。
模块的主要功能是完成8位与1位运算。
选通与门模块的工作流程图
N
Y
源代码:
--File:
andarith.vhd
--Designer:
谈鹏
--Module:
clock
--Description:
--Simulator:
MAXplusII10.0.9/WindowXP
--Synthesizer:
MAXplusII10.0.9/WindowXP
--Date:
2011/05/02
--Modifydate:
2011/05/02
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYandarithIS
PORT(abin:
INSTD_LOGIC;
din:
INSTD_LOGIC_VECTOR(7DOWNTO0);
dout:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDandarith;
ARCHITECTUREbehaveOFandarithIS
BEGIN
PROCESS(abin,din)
BEGIN
FORIIN0TO7LOOP--循环,完成8位与1位运算
DOUT(I)<=DIN(I)ANDABIN;
ENDLOOP;
ENDPROCESS;
ENDbehave;
仿真图
5、主要模块之16位锁存器的设计
模块说明:
输入为clk,clr和d,输出为q。
模块的主要功能是将数据锁存。
16位锁存器工作流程图
源代码:
--File:
reg16b.vhd
--Designer:
谈鹏
--Module:
clock
--Description:
--Simulator:
MAXplusII10.0.9/WindowXP
--Synthesizer:
MAXplusII10.0.9/WindowXP
--Date:
2011/05/02
--Modifydate:
2011/05/02
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYreg16bIS
PORT(clk,clr:
INSTD_LOGIC;
d:
INSTD_LOGIC_VECTOR(8DOWNTO0);
q:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));
ENDreg16b;
ARCHITECTUREbehaveOFreg16bIS
SIGNALR16S:
STD_LOGIC_VECTOR(15DOWNTO0);
BEGIN
PROCESS(clk,clr)
BEGIN
IFclr='1'THENR16S<=(OTHERS=>'0');--清零信号
ELSIFCLK'EVENTANDCLK='1'THEN--时钟到来时,锁存输入值,并右移低8位
R16S(6DOWNTO0)<=R16S(7DOWNTO1);--右移低8位
R16S(15DOWNTO7)<=D;--将输入锁到高8位
ENDIF;
ENDPROCESS;
q<=R16S;
ENDbehave;
仿真图
三、仿真及延时分析
系统总体仿真图(时序仿真)
系统延时分析图
建立/保持时间分析
频率分析
四、总结:
通过这次期末设计,我对MAX+PLUS
的使用更加熟悉,了解了硬件乘法器的工作原理。
同时也提高了我对代码编写和阅读的能力。
过程中有好多细节需要注意的,比如说VHDL后缀名要用.vhd,保存的名字要跟实体名相一致等。
由于时间有限,没能去实验室测试,稍有遗憾,以后有空肯定会去测试下。
有些有疑问的地方是同学教我的,谢谢他们。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 移位 相加 硬件 乘法器 电路设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)