8位乘法器设计Word下载.docx
- 文档编号:16056044
- 上传时间:2022-11-18
- 格式:DOCX
- 页数:13
- 大小:154.80KB
8位乘法器设计Word下载.docx
《8位乘法器设计Word下载.docx》由会员分享,可在线阅读,更多相关《8位乘法器设计Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
+00000000N4与被乘数相乘的部分积
·
N7与被乘数相乘的部分积
+11010101
111101001001111与前面部分积之和相加
011110100100111右移一位得到最后的积
•按照这种算法,可以得到下图所示之框图和简单流程图。
图中Y寄存器存放被乘数M,B寄存器存放乘数N,A累加器存放部分积。
A和Y中的数据在加法器中相加后送入A中,而A和B相级联又构成了一个16bit的移位寄存器,当它工作于移位模式时,可以实现数据的右移。
由于乘数的每一位不是0就是1,对应的部分积不是0就是被乘数本身,所以实际作部分积相加这一步时,只要根据乘数的对应位判断:
如该位为1,则将累加器中的数据加上被乘数再移位;
如该位为0时,就不加被乘数而直接移位。
运算时首先将累加器A清零,并将被乘数M和乘数N分别存入寄存器Y和B,然后依据寄存器B中最右一位B0(数据N0)确定第一个部分积。
将此部分积送入A累加器以后,将A连同寄存器B右移一位,部分积的最低位被移进寄存器B的最左位,乘数的最低位N0被移出寄存器B,而乘数的次低位N1被移至寄存器B的B0位。
第二次仍然依据B0位的数据(N1)来确定第二个部分积,将部分积与累加器中的数据相加后右移一位,N1又被移出寄存器,数据N2被移到B0位置。
。
这样,经过8次部分积相加位的操作,完成1次乘法运算,乘数N恰好被移出寄存器B,寄存器B中保存的就是运算积的低8位数据。
移位相加的次数应用一个计数器来控制,每移位一次,计数器计一个数。
当计数器计得8个数时,发出一个信号,使电路停止操作,并输出运算结果(流程图是按减法计数器设计的,也可使用加法计数器)。
•
电路框图简单流程图
2.设计方案总结
(1)8位移位寄存器模块。
可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。
(2)8位加法器模块。
这是一个8位加法器,进行操作数的加法运算。
(3)一位乘法电路模块。
完成8位与1位的乘法运算。
(4)乘法控制电路模块。
当结果得到时使程序停止。
(5)16位移位锁存器。
在时钟信号的控制下完成输入数值的锁存与移位。
其最终结果就是要求结果。
3.系统程序设计及仿真图。
(1)8位移位寄存器
源代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entityregis
port(reg_clk,load:
instd_logic;
reg_in:
instd_logic_vector(7downto0);
reg_out:
outstd_logic);
endreg;
architecturearc_regofregis
signalreg8:
std_logic_vector(7downto0);
begin
process(reg_clk,load)
begin
ifreg_clk'
eventandreg_clk='
1'
then
ifload='
reg8<
=reg_in;
else
reg8(6downto0)<
=reg8(7downto1);
endif;
endprocess;
reg_out<
=reg8(0);
endarc_reg;
仿真图:
(2)8位加法电路
entityadderis
port(adder_in:
a4,b4:
instd_logic_vector(3downto0);
s4:
outstd_logic_vector(3downto0);
adder_out:
endadder;
architecturearc_adderofadderis
signalss:
std_logic_vector(4downto0);
signalaa,bb:
aa<
='
0'
&
a4;
bb<
b4;
ss<
=aa+bb+adder_in;
s4<
=ss(3downto0);
adder_out<
=ss(4);
endarc_adder;
entityadder_8is
port(a8_in:
a8,b8:
s8:
outstd_logic_vector(7downto0);
a8_out:
endadder_8;
architecturearc_adder_8ofadder_8is
componentadder
endcomponent;
signalcarry_out:
std_logic;
begin
u1:
adder
portmap(a8_in,a8(3downto0),b8(3downto0),s8(3downto0),carry_out);
u2:
adder
portmap(carry_out,a8(7downto4),b8(7downto4),s8(7downto4),a8_out);
endarc_adder_8;
(3)一位乘法电路模块。
entitymultiis
port(x:
y:
m1_out:
outstd_logic_vector(7downto0));
endmulti;
architecturearc_multiofmultiis
process(x,y)
foriin0to7loop
m1_out(i)<
=y(i)andx;
endloop;
endarc_multi;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYARICTL
IS
PORT(CLK2:
INSTD_LOGIC;
START:
IN
STD_LOGIC;
CLKOUT:
OUTSTD_LOGIC;
RSTALL:
OUT
ARIEND:
OUTSTD_LOGIC);
ENDARICTL;
ARCHITECTUREARTOFARICTLIS
SIGNAL
CNT4B:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
RSTALL<
=START;
PROCESS(CLK2,START)
BEGIN
IFSTART='
THENCNT4B<
="
0000"
;
ELSIFCLK2'
EVENTANDCLK2='
THEN
IFCNT4B<
8THEN
CNT4B<
=CNT4B+1;
ENDIF;
ENDPROCESS;
PROCESS(CLK2,CNT4B,START)
IFSTART='
8THEN
CLKOUT<
=CLK2;
ARIEND<
='
ELSECLKOUT<
ENDIF;
ENDART;
entityreg_16is
port(r16_clk,r16_clr:
r16_in:
instd_logic_vector(8downto0);
r16_out:
outstd_logic_vector(15downto0));
endreg_16;
architecturearc_reg_16ofreg_16is
sig
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 乘法器 设计