16位8x8硬件乘法器设计报告Word下载.docx

上传人:b****3 文档编号:15138253 上传时间:2022-10-28 格式:DOCX 页数:20 大小:472.09KB
下载 相关 举报
16位8x8硬件乘法器设计报告Word下载.docx_第1页
第1页 / 共20页
16位8x8硬件乘法器设计报告Word下载.docx_第2页
第2页 / 共20页
16位8x8硬件乘法器设计报告Word下载.docx_第3页
第3页 / 共20页
16位8x8硬件乘法器设计报告Word下载.docx_第4页
第4页 / 共20页
16位8x8硬件乘法器设计报告Word下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

16位8x8硬件乘法器设计报告Word下载.docx

《16位8x8硬件乘法器设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《16位8x8硬件乘法器设计报告Word下载.docx(20页珍藏版)》请在冰豆网上搜索。

16位8x8硬件乘法器设计报告Word下载.docx

2.2.1 

十进制加计数器设计……………………………………5

2.2.2 

BCD码转二进制码BCD_B的设计…………………………5

2.2.3 

8位移位寄存器reg_8的设计………………………………6

2.2.4 

8位加法器adder_8的设计…………………………………7

2.2.5 

1位乘法器multi_1的设计…………………………………7

2.2.6 

16位移位寄存器reg_16的设计……………………………8

2.2.7 

16位二进制转BCD码B_BCD的设计……………………9

2.3.软件设计

2.3.1 

设计平台和开发工具………………………………………10

2.3.2 

程序流程方框图……………………………………………10

2.3.3 

实现功能…………………………………………………..11

2.3.4 

8位乘法器的顶层设计…………………………………….11

2.4.系统测试

2.4.1 

乘法器使用………………………………………………13

2.4.2 

仪器设备…………………………………………………13

2.4.3 

测试数据…………………………………………………14

2.5.结论……………………………………………………..14

三.测试结果仿真图…………………………………………….14

四.参考文献………………………………………………………15

五.附录:

设计说明书及使用说明书…………………15

本设计通过对一个8×

8的二进制乘法器的设计,学习利用VHDL语言来描述简单的算法,掌握利用移位相加方法实现乘法运算的基本原理。

在此次设计中该乘法器是由十进制计数器,BCD码(输入)转二进制码,8位寄存器,8位加法器,16位寄存器,8x1乘法器,二进制码转BCD码(输出显示)7个模块构成的以时序方式设计的8位乘法器,采用逐项移位相加的方法来实现相乘。

设计中乘数,被乘数的十位和个位分别采用cnt10(十进制加法器)来输入,经拼接符“&

”拼接成8位BCD码,再由BCD_B(BCD码转二进制码)转化成二进制码后计算,计算结果由B_BCD(二进制转BCD码)转化成BCD码输入到数码管中显示。

此次设计的创新点在于cnt10,BCD_B,B_BCD的设计,使得电路的输入简单,显示方式为十进制,符合人们的习惯。

使用中只要输入乘数,被乘数,按下键3(脉冲)就可以直接得出结果,显示结果稳定。

可以满足两位十进制乘法的计算。

一.设计要求

设计一个十六位(8*8)硬件乘法器(难度系数1.0)

要求:

2位十进制乘法;

能同时显示乘数,被乘数和积的信息(LED数码管)。

二.正文

2.1.1系统设计方案

方案一:

直接生成乘法器,再配合输入,输出电路,构成2位十进制乘法器,该方案简单,原理清晰明了,但占用资源比较多,且不易于了解内部结构,及其乘法原理。

方案二:

移位相加方法实现乘法运算再配合输入,输出电路,构成2位十进制乘法器,该方案原理简单,占用资源少,易于初学者掌握移位相加方法实现乘法运算的原理,但电路模块较多。

方案选择:

由于现在属初学阶段,掌握原理较为重要,故经小组讨论,一致同意采用方案二。

2.1.2系统设计原理

例如:

被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下:

下面分解8位乘法器的层次结构,分为以下7个模块:

1.十进制计算模块:

使用4个十进制计数模块,输入乘数的十位个位,被乘数的十位个位。

2.BCD码转二进制模块:

实现将输入的8位BCD码转化成二进制

3. 

右移寄存器模块:

这是一个8位右移寄存器,可将乘法运算中的被乘数加载于其中,同时 

 

进行乘法运算的移位操作。

4.加法器模块:

这是一个8位加法器,进行操作数的加法运算。

5.1位乘法器模块:

完成8位与1位的乘法运算。

6.锁存器模块:

这是一个16位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。

7.二进制转BCD码模块:

将16位寄存器的值(积)转化成BCD码,配合数码管显示

十进制加计数器设计

十进制计数器在每个时钟来临时计数,clk=1时清零,用于输入乘数,被乘数的个位,十位

Libraryieee;

--0到9计数器

Useieee.std_logic_unsigned.all;

Useieee.std_logic_1164.all;

Entitycnt10is

Port(clk,clr:

instd_logic;

q:

outstd_logic_vector(3downto0));

endcnt10;

architecturebehavofcnt10is

begin

process(clk,clr)

variablecqi:

std_logic_vector(3downto0);

ifclr='

1'

thencqi:

="

0000"

;

elsifclk'

eventandclk='

then

ifcqi=9thencqi:

else 

cqi:

=cqi+1;

endif;

q<

=cqi;

endprocess;

endbehav;

BCD码转二进制码BCD_B的设计

将十进制计数器产生的十位和个位合并后,为BCD码,而计算时使用二进制码计算,所以采用该模块来转化

--(0到99)BCD码转二进制码

EntityBCD_Bis

Port(a:

instd_logic_vector(7downto0);

outstd_logic_vector(7downto0));

endBCD_B;

architecturebehavofBCD_Bis

signala1,a2,a3,a4,cq:

std_logic_vector(7downto0);

process(a)

a1<

&

a(3downto0);

a2<

a(7downto4);

a3<

=a2(6downto0)&

'

0'

a4<

=a2(4downto0)&

"

000"

cq<

=a4+a3+a1;

=cq;

8位移位寄存器reg_8的设计

8位移位寄存器是在时钟(r8_clk'

eventandr8_clk='

)信号作用下,当r8_load='

时,将8位乘数加载进入;

而当r8_load='

时,对数据进行移位操作,同时定义一个信号reg8用来装载新数据及移位后的操作数,完成这些操作后,寄存器的最低位reg8(0)传送给r8_out输出。

libraryieee;

---8位移位寄存器

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entityreg_8is 

port(r8_clk,clr,r8_load:

instd_logic;

r8_in:

instd_logic_vector(7downto0);

r8_out:

outstd_logic);

endreg_8;

architecturearc_reg_8ofreg_8is 

signalreg8:

std_logic_vector(7downto0);

begin

process(r8_clk,clr,r8_load)

then

reg8<

00000000"

elsifr8_clk'

then 

ifr8_load='

=r8_in;

else

reg8(6downto0)<

=reg8(7downto1);

r8_out<

=reg8(0);

endarc_reg_8;

8位加法器adder_8的设计

该加法器由八位二进制加法器组成。

其中设计八位二进制加法器时,为了避免加法运算时产生溢出,故定义了三个信号量ss,aa,bb,将加数a8_a,a8_b分别与0连接后赋值给aa,bb,形成9位二进制数,然后aa,bb相加赋值给ss,最后将ss的低八位赋值给和a8_s,同时将ss的最高位送给a8_out输出。

--8位加法器

entityadder_8is 

port(a8_a,a8_b:

a8_s:

outstd_logic_vector(7downto0);

a8_out:

endadder_8;

architecturearc_adder_8ofadder_8is 

signalss:

std_logic_vector(8downto0);

signalaa,bb:

aa<

='

a8_a;

bb<

a8_b;

ss<

=aa+bb;

a8_s<

=ss(7downto0);

a8_out<

=ss(8);

endarc_adder_8;

1位乘法器multi_1的设计

利用if语句来完成8位二进制数与1位二进制的乘法运算,最后将结果送到m1_out输出。

即当m1_x为1时,m1_out输出为m

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1