1 / 12
文档名称:

八位二进制乘法器.doc

格式:doc   大小:137KB   页数:12页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

八位二进制乘法器.doc

上传人:zbfc1172 2019/1/4 文件大小:137 KB

下载得到文件列表

八位二进制乘法器.doc

文档介绍

文档介绍:数字逻辑与数字系统
——八位二进制乘法器
学院:
信息科学与技术学院
班级:
计0805-2
学号:
20082459
姓名:
王志军
指导老师:
王彦芳
完成时间:2010年7月11日
目录
1 课题综述
分析问题
结构框图


波形文件
VHDL文本
4 上机结果分析
5 总结
6 致谢
7 参考资料
课题二:八位二进制乘法器
1 课题综述
选择这个课题与我以前做过二进制乘法电路有关,思想源于此,但那次是用组合逻辑电路实现的且是两位二进制乘法,很受局限,由此想扩展它。
实现二进制乘法器的电路有多种方法,一种是由组合逻辑电路(与、或、非门)构成的乘法器,速度快但占用PLD的资源比较多,难以实现多位乘法;另一种是基于PLD器件外接ROM九九表的乘法器,但无法构成片上系统,不是很适用。这一次我是采用八位二进制乘法的硬件算法,不同于前面两种乘法器电路,是由一个加法器和移位寄存器构成的时序逻辑方式的八位硬件乘法器。
分析问题
硬件乘法器的乘法原理是通过逐项移位相加的方法来实现。
在计算过程中,先观察乘数的每一位,从最低位开始,若最低位是1,则被乘数被复制到下面,否则复制为全零,复制下来的数值较前一个数值左移一位。最后,将复制的数值相加,它们的和就是乘积。两个n位二进制数相乘的结果最多可以有2n位的二进制数。
根据上面这个乘法的过程,可以得出三点:
只对两个二进制数进行相加运算,并用寄存器不断地累加部分积;
将累加的部分积左移,但复制的被乘数不左移;
乘数的对应位若为0时,对累加的部分积不产生影响。
结构框图
B0
A A+d
A右移
n=0
d[7…0]被乘数
b[7…0]乘数
n为数
ST
A[15..0] 0 0
n n-1
Z=1输出
S0
0
1
S1
S2
1
0
S2
0
1
图1

图 2
在上图中:d为被乘数输入,b为乘数输入,ST为启动信号,A[15..0]输出端口为乘积。当ST为一时乘法器运算开始,累加寄存器A清零。在S1状态下对乘数最低位b0进行检测,若为1,被乘数加到A中的部分积上;如果b0为0,系统则不操作,直接进入到S2状态。在S2状态中进行累加寄存器A和乘数b的右移一位,并且判断乘数的位数是否运算结束,若运算结束,在S3状态下,输出乘积结果。
这是由两个进程的状态机来实现:一个进程描述状态转移,另一个进程描述寄存器操作。累加寄存器q的位数为WIDTHd+WIDTHb+1,其中,q的高位段(WIDTHd+1)进行数的累加,然后向q的低位进行移位,形成部分积。当计数器n减到0时,乘法过程结束。在寄存器操作进程中,由于使用的是时钟同步工作方式,其操作都是在下一个状态完成,因此在乘法结束进入S3状态下,需要对累加寄存器q左移一位,并将寄存器q中的乘积结果输入到乘积输出端A。

本次是课题二,有了做课题一的熟悉和经验,调试过程容易多了。
具体步骤是:绘制完后—>file—>project—>set project current file,选择之后,再选择,Max+plus2
—>compiler开始进入调试。
piler调试成功的结果
上图是最后调试成功后的结果,在调试没有成功时,曾出现过许多错误,
第一个错误也是最普遍的错误就是:
error:line1,file e:\max+plusⅡ\:
TDF syntax error:Expected ASSERT ,CONSTANT,DEFINE,DESIGN,FUNCTION,,PARAMETERS,SUBDESIGN,OR TITLE but found a symbolic name”LIBRARY”
上面这个错误是由调试时是用的“。tdf”文件,把文件保存为“.vhd”之后就消除错误。
其它的错误也不一一列举,有些错误是逻辑问题,还有的是输入时不小心输入错误,根据错误提示,一步一步的完成排错,最后出现无错的调试结果。
波形文件
仿真前:
图 4 仿真前波形
仿真后:
图 5 仿真后波形
VHDL文本
LIBRARY IEEE;
USE ;
USE ;
ENTITY multi_lpm IS
GENERIC(WIDTHd:INTEGER:=8;
WIDTHb:INTEGER:=8);
PORT(clk,