计算机算法课件.ppt

上传人:石*** 文档编号:87231237 上传时间:2023-04-16 格式:PPT 页数:102 大小:3.73MB
返回 下载 相关 举报
计算机算法课件.ppt_第1页
第1页 / 共102页
计算机算法课件.ppt_第2页
第2页 / 共102页
点击查看更多>>
资源描述

《计算机算法课件.ppt》由会员分享,可在线阅读,更多相关《计算机算法课件.ppt(102页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、计算机算法第1页,此课件共102页哦主要内容二进制整数无符号二进制整数补码表示的带符号二进制整数加减法算法及Verilog HDL实现加法器和减法器设计先行进位加法器设计乘法算法及Verilog HDL实现无符号数乘法器设计带符号数乘法器设计无符号数Wallace树型乘法器设计(略)带符号数Wallace树型乘法器设计(略)除法算法及Verilog HDL实现(略)恢复余数器除法设计不恢复余数器除法设计带符号数不恢复余数除法器设计Goldschmidt除数算法(略)Newton-Raphson除法算法(略)开方算法及Verilog HDL实现(略)逻辑运算(增加)算术逻辑运算单元(ALU)举例

2、(增加)第2页,此课件共102页哦3.1 二进制整数计算机中所有的信息,包括指令和数据,都是用二进制数表示的。假设有一个32位的二进制数0011 0011 1101 1110 0000 0001 0000 0000它到底表示是什么?指令?数据:整数,浮点数?图形图像?音乐?IP地址?缺点:读写起来太长,不方便。第3页,此课件共102页哦3.1.1 无符号二进制整数(略)3.1.2 补码表示的带符号二进制整数(略)第4页,此课件共102页哦3.2 定点整数的加减法算法及Verilog HDL实现影响运算器硬件设计的因素:从数值数据类型区分。定点数、浮点数、BCD码数据。从编码方案区分。原码、补码

3、、反码、移码。从数据运算的算法看,重点是解决运算的高速度与硬软件实现的简便与经济性的矛盾与协调。第5页,此课件共102页哦运算器有:定点运算器-用硬件直接完成定点数算术逻辑运算。如果用定点运算器完成浮点数的算术运算,则要由子程序实现,速度慢。浮点运算器-主要用硬件完成浮点数算术运算。第6页,此课件共102页哦3.2.1 补码数加法器和减法器设计补码定点加减法运规则:X+YX+Y补补=X=X补补+Y+Y补补 (mod 2)(mod 2)X-YX-Y补补=X=X补补+-Y+-Y补补 (mod 2)(mod 2)例1X=0.1011,Y=-0.1110,求X+Y补.解 X补=0.1011,Y补=1.

4、0010 X补00.1011+Y补11.0010 X补+Y补11.1101所以X+Y补=1.1101注:这里的小数点注:这里的小数点可以理解为符号与可以理解为符号与数值的分隔符数值的分隔符第7页,此课件共102页哦例2 X=0.1011Y=-0.0010,用补码加减法规则求X-Y。解X补=0.1011,Y补=1.1110 -Y补=0.0010X补 00.1011 +-Y补00.0010 X补+-Y补00.1101所以X-Y补=0.1101X-Y=0.1101第8页,此课件共102页哦运算器电路的实现补码加减法可用统一的方式处理。用补码实现加减法对运算器有什么要求?公式:X+Y补=X补+Y补 X

5、-Y补=X补+-Y补(mod 2)由Y补求-Y补是把Y补的每一位取反,再在最低位加1来实现。补码加减法运算逻辑电路框图如下图。第9页,此课件共102页哦图实现补码加减运算的逻辑电路第10页,此课件共102页哦A、B、C只是其中的一位。每个框中的1代表Q,0 代表/Q。用同一套加法器电路,可以完成X+Y补和X-Y补的运算。实现X+Y补和X-Y补的差别:加Y用的是YF控制信号有效(1),1F控制信号无效(0)。减Y用的是/YF和1F两个控制信号都有效(1)。第11页,此课件共102页哦需要增加判别运算结果溢出的功能加法溢出的条件符号相同的两个数相加。减法溢出的条件符号不同的两个数相减。例如 X补=

6、01011,Y补=01000,则 X+Y补=01011+01000=10011(溢出)例如 X补=01011,Y补=10111 -Y补=01001 则X-Y补=01011+01001=10100(溢出)第12页,此课件共102页哦结论:(1)两个符号相同的补码数相加,如果和的符号与加数符号相反,或者符号相反的两个补码数相减,差的符号与减数符号相同,都表示运算结果溢出。(2)利用进位判断。即两个补码数实现加减法运算时,若最高数值位向符号位的进位值与符号位产生的进位输出值不相同,则表示产生了溢出。表示为:第13页,此课件共102页哦表双符号位溢出判断(3)用双符号位判断溢出如下表。结果符号位溢出情

7、况00无溢出01正溢出10负溢出11无溢出第14页,此课件共102页哦例如 X补=00.1011,Y补=00.1000 则X+Y补=00.1011+00.1000 =01.0011例如 X补=11.0101,Y补=00.1001,-Y补=11.0111则 X-Y补=11.0101+11.0111 =10.1100注意:采用双符号方案时,在寄存器和主存中都只要保存一位符号位。第15页,此课件共102页哦Unsigned adder code/adder.vmodule adder(a,b,cin,cout,sum);parameter bit_width=8;outputbit_width-1:

8、0 sum;output cout;input bit_width-1:0 a,b;input cin;assign cout,sum=a+b+cin;/single signendmodule第16页,此课件共102页哦Unsigned adder testbench codetimescale 1ns/1nsmodule adder_tb;parameter bit_width=4;wire bit_width-1:0 sum;wire cout;reg bit_width-1:0 a,b;reg cin;/carry integer i,k;initial begin k=1bit_wi

9、dth;cin=0;for(i=0;i=k*k;i=i+1)begin#100 a=i/k;b=i%k;end end adder m(.a(a),.b(b),.cin(cin),.cout(cout),.sum(sum);endmodule 修改描述加法器长度,可以得到不同长度的加法器。第17页,此课件共102页哦简单的二进制减法器的实现设计一个n位的二进制减法器。把adder.v中的代码略加修改,即可得到减法器的Verilog HDL代码。其符号如下图所示。代码如下一页。第18页,此课件共102页哦Subtractor code/subtractor.vmodule subtractor(

10、a,b,cin,cout,sum);parameter bit_width=8;outputbit_width-1:0 sum;output cout;input bit_width-1:0 a,b;input cin;/carry assign cout,sum=a-b-cin;/single signendmodule第19页,此课件共102页哦Substractor testbench codeinclude”subtractor.v”module subtractor_tb;parameter bit_width=4;wire bit_width-1:0 sum;wire cout;r

11、eg bit_width-1:0 a,b;reg cin;/carry integer i,k;initial begin k=1bit_width;cin=0;for(i=0;i=k*k;i=i+1)begin#100 a=i/k;b=i%k;end end subtractor m(.a(a),.b(b),.cin(cin),.cout(cout),.sum(sum);endmodule 第20页,此课件共102页哦定点二进制数的补码加减法器设计把补码加减法运算器作为一个功能部件,取名为add_sub,其符号如下图。Add_Subcontrol sumoverflow a bcontrol

12、operation0a+b(x+y)1a+/b+1(x+/y+1)说明:(1)a,b均为补码(2)运算结果sum也是补码(3)Overflow溢出标志第21页,此课件共102页哦add_sub code/add_sub.vmodule add_sub(a,b,control,cout,overflow,sum);parameter bit_width=4;outputbit_width-1:0 sum;output cout,overflow;input bit_width-1:0 a,b;input control;/carry reg overflow,cout;reg bit_width

13、-1:0 sum,b1;always(a or b or control)begin if(control=0)cout,sum=a+b;else cout,sum=a+(b)+control;if(sumbit_width-1sumbit_width-2)=1)overflow=1;/bit_width-1 else overflow=0;end endmodule if(control=1)b1=b;else b1=b;cout,sum=a+b1+control;第22页,此课件共102页哦Add_sub testbench codeinclude”add_sub.v”module add

14、_sub_tb;parameter bit_width=4;wire bit_width-1:0 sum;/single sign wire cout,overflow;reg bit_width-1:0 a,b;reg control;/carry,control=0 integer i,k;initial begin k=1bit_width;control=0;for(i=0;i=k*k;i=i+1)begin#100 a=i/k;b=i%k;end /adder#100 control=1;for(i=0;i=k*k;i=i+1)begin#100 a=i/k;b=i%k;end /s

15、ubtractor end add_sub m(.a(a),.b(b),.control(control),.cout(cout),.overflow(overflow),.sum(sum);endmodule第23页,此课件共102页哦3.2.2 先行进位加法器设计略第24页,此课件共102页哦3.3 乘法算法及Verilog HDL实现3.3.1 无符号数乘法器设计与十进制乘法计算一样,二进制的乘法可以用加法和移位操作来完成,例如:X=1101Y=1011 1101 (13)10 1011 (11)10 1101位积 1101 位积 0000位积 1101 位积 10001111 (143

16、)10第25页,此课件共102页哦可以用全加器阵列来实现上述加法,也可以用循环迭代的方法实现。第26页,此课件共102页哦3.3.2带符号数乘法器设计一、原码的乘法器设计十进制乘法规则:积符号:同号相乘为正,异号相乘为负。数值|被乘数|*|乘数|原码乘法规则:积符号:同号相乘为正,异号相乘为负。数值|被乘数|*|乘数|由此看出,重点在正数的乘法运算。第27页,此课件共102页哦假设乘数 X原=Xf.X1X2X3Xn 被乘数Y原=Yf.Y1Y2Y3Yn 其中Xf,Yf为符号位。则 X*Y原=Y原*X原 =(XfYf).(Y1Y2Y3Yn)*(X1X2X3Xn)第28页,此课件共102页哦先来看手

17、工乘法的计算过程。X=0.1101Y=0.1011 0.1101 0.1011 1101位积 1101 位积 0000位积 1101 位积 10001111第29页,此课件共102页哦存在的问题:在运算器中是很难实现多个数据同时相加的,通常只能完成对两数的求和运算。在手工计算时,各加数逐位左移,最终相加位数为相乘二数位数之和,而在计算机中,加法器的位数一般与寄存器位数相同。如何判断乘数中的某位为1或0?第30页,此课件共102页哦解决:每求得一个相加数(位积),就同时完成与上一次部分积相加的操作。解决:使用两个寄存器,使每次相加得到的部分积右移一位后再与求得的相加数(位积)相加。解决:在计算机

18、内用乘数寄存器中每一位直接决定相加数是被乘数还是零很不方便,若用该寄存器的最低一位来执行这种判别就简便多了。第31页,此课件共102页哦设乘数X原=Xf.X1X2X3Xn 被乘数Y原=Yf.Y1Y2Y3Yn则原码乘法的规则为 积的符号位=(Xf Yf)积的绝对值=|Y|*|X|Y|*|X|=|Y|*(0.X1X2X3Xn)=|Y|*(X1*2-1+X2*2-2+X3*2-3+Xn*2-n)=|Y|*2-1(X1+2-1(X2+2-1(X3+2-1(Xn+0)第32页,此课件共102页哦则递推公式为:P0=0 P1=2-1(P0+|Y|*Xn)P2=2-1(P1+|Y|*Xn-1)Pn=2-1(

19、Pn-1+|Y|*X1)=|Y|*|X|乘法规则可表示为:Y原*X原=(YfXf).Pn其中Pi称为部分积(i=0,1,2,3,n)第33页,此课件共102页哦例 X=-0.1011 Y=0.1101,求Y*X原。解:X原=1.1011,Y原=0.1101 部分积(寄存器)乘数(寄存器)P000.00001011 +|Y|00.1101 00.1101P1 00.01101101 +|Y|00.1101 01.0011P2 00.1001 1110第34页,此课件共102页哦P3 00.01001111 +|Y|00.1101 01.0001P4 00.10001111所以Y原*X原=(01)

20、.10001111 =1.10001111 Y*X原=1.10001111原码一位乘法的流程图如下。第35页,此课件共102页哦原码一位乘法运算的流程图 Cn=1?开始A0,CdnB Y,C X()+()()、(C)右移一位Cd(Cd)-1 (Cd)=0?00C0结束NNYY第36页,此课件共102页哦用Verilog HDL设计正数的定点小数乘法器算法描述(1)设一个存放部分积的中间变量pp=0,乘数为x,被乘数为y;(2)设一个循环变量i=1;(3)求部分积:pppp+y*xi,pp右移一位,ii+1;(4)如果in转(3);(5)ppp,算法结束。第37页,此课件共102页哦设计一个字长

21、8位、最高(符号位)为0的、二进制定点小数的乘法器。其外观图如下。multiplier y x clk startresetdone p第38页,此课件共102页哦说明输入端口乘数x(70),x=0.x6x5x4x3x2x1x0;被乘数y(70),y=0.y6y5y4y3y2y1y0;异步清零信号reset,当reset=0时,乘法器立即进入初始状态;时钟信号clock,乘法器在时钟信号的驱动下逐步完成乘法运算;启动信号start,乘法器接到该信号后开始工作。第39页,此课件共102页哦输出端口乘积p(140),p=0.p13p12p11p10p9p8p7p6p5p4p3p2p1p0;乘法完成

22、信号done,当done=1时,输出端口p的数值才是正确的数。根据算法,可以画出该乘法的状态迁移图,如下图所示。第40页,此课件共102页哦该乘法器的Verilog HDL代码如下。第41页,此课件共102页哦Multiplier codemodule mult(clk,reset,start,x,y,p,done);parameter bit_width=4;input clk,reset,start;input bit_width-1:0 x,y;output done;output bit_width*2-1:0 p;reg bit_width-1:0 ry,temp;reg bit_w

23、idth*2-1:0 pp,p;reg done;integer state;always(negedge reset or posedge clk)beginif(reset=0)begin state=0;done=0;ry=0;pp=0;endelse 第42页,此课件共102页哦 case(state)0:begin done=0;temp=0bit_width;pp=temp,x;ry=y;/if(start=1)state=1;end bit_width:begin if(pp0=1)temp=ppbit_width*2-1:bit_width+ry;else temp=ppbit

24、_width*2-1:bit_width;pp=temp,ppbit_width-1:1;p=pp;done=1;state=0;end default:begin if(pp0=1)temp=ppbit_width*2-1:bit_width+ry;else temp=ppbit_width*2-1:bit_width;pp=temp,ppbit_width-1:1;state=state+1;end endcase end endmodule第43页,此课件共102页哦Multiplier testbench codetimescale 1ns/1nsmodule mult_tb;para

25、meter bit_width=4;wire bit_width*2-1:0 p;wire done;reg bit_width-1:0 a,b;reg clk,start,reset;integer i,k;initial begin k=1=0)时,Y补=Y原=Y,X补=X原=X,所以乘法过程与原码乘法相同,且符号位可以参加运算。第46页,此课件共102页哦(2)当被乘数为负(Y=0,X0=0故 X补=X=0.X1X2Xn =X1*2-1+X2*2-2+X3*2-3+Xn*2-n Y补*X补=Y补*X=(2n+2+Y)*X =2n+2*X+Y*X第47页,此课件共102页哦2n+2*X=2

26、n+2*(X1*2-1+X2*2-2+Xn*2-n)=(X1*2n-1+X2*2n-2+Xn-1*21+Xn)*22 =22(MOD 4)所以 Y补*X补=2n+2*X+Y*X =22+Y*X=Y*X补当Y补为任意符号数,X=0时:Y*X补=Y补*X补=Y补*X整数整数第48页,此课件共102页哦2、乘数X为负数因X0,则 X补=1.X1X2Xn (MOD 2)由补码定义,X=X补-2 =0.X1X2Xn-1故YX补=Y(0.X1X2Xn-1)补 =Y(0.X1X2Xn)补-Y补 =Y补(0.X1X2Xn)-Y补综合上述 YX补=Y补0.X1X2Xn-Y补X0第49页,此课件共102页哦递推公

27、式:P0补=0 P1补=2-1(P0补+Y补*Xn)P2补=2-1(P1补+Y补*Xn-1)Pn补=2-1(Pn-1补+Y补*X1)Pn+1补=Pn补-Y补*X0第50页,此课件共102页哦补码一位乘法规则:当乘数为正时,与原码乘法类似,只是相加时用两位符号位,右移时按补码规则进行。当乘数为负时,与乘数为正时一样进行计算,最后再进行校正,加上被乘数-Y补。第51页,此课件共102页哦例 Y=0.1101X=-0.1011,求Y*X补。解:Y补=0.1101,X补=1.0101 -Y补=1.0011所以Y*X补=1.01110001第52页,此课件共102页哦 部分积乘数P0补 00.00000

28、101+Y补 00.1101 00.1101P1补 00.01101010P2补 00.00110101 +Y补00.1101 01.0000P3补 00.10000010P4补 00.01000001 +-Y补11.0011 11.01110001第53页,此课件共102页哦三、补码比较乘BOOTH乘法校正法对乘数为正或为负,其运算规则不统一,控制起来复杂。比较乘法(BOOTH乘法)由补码校正法导出。设被乘数Y补=Y0.Y1Y2Y3Yn 乘数X补=X0.X1X2X3Xn其中X0,Y0为符号位。第54页,此课件共102页哦 乘积C补=Y*X补 =Y补(0.X1X2Xn)-X0*Y补 =Y补(X

29、1*2-1+X2*2-2+Xn*2-n-X0)=Y补(X1-X0)+(X2-X1)*2-1+(X3-X2)*2-2+(Xn-Xn-1)*2-(n-1)-Xn*2-n)=Y补(X1-X0)+(X2-X1)*2-1+(X3-X2)*2-2+(Xn-Xn-1)*2-(n-1)+(Xn+1-Xn)*2-n)(Xn+1=0)第55页,此课件共102页哦递推公式:P0补=0,Xn+1=0 P1补=2-1(P0补+Y补(Xn+1-Xn)P2补=2-1(P1补+Y补(Xn-Xn-1)Pn补=2-1(Pn-1补+Y补(X2-X1)Pn+1补=Pn补+Y补(X1-X0)第56页,此课件共102页哦BOOTH乘法规

30、则:(1)Xn+1=0(2)当n0,判别Xn,Xn+1 n=n-1,转(2)。(3)当n=0,判断XnXn+1,其运算规则同上,只是不移位。XnXn+1新部分积00或11上次部分积加上0,然后右移一位01上次部分积加上Y补,然后右移一位10上次部分积加上-Y补,然后右移一位第57页,此课件共102页哦例 Y=-0.1101,X=-0.1011,用布斯乘法计算Y*X。解:Y补=11.0011,X补=11.0101-Y补=00.1101部分积 乘数P0补 00.0000 1.01010 +-Y补 00.1101 00.1101 P1补 00.0110 110101 +Y补 11.0011 11.1

31、001第58页,此课件共102页哦 P2补 11.1100 111010 +-Y补 00.1101 00.1001 P3补 00.0100 111101 +Y补 11.0011 11.0111 P4补 11.1011 111110 +-Y补 00.1101 P补 00.1000所以 Y*X补=00.10001111 Y*X=0.10001111第59页,此课件共102页哦例 Y=-1,X=-1,用布斯乘法计算X*Y解:Y补=11.000,X补=11.000 -Y补=01.000 部分积 乘数 P0补 00.000 1.0000 P1补 00.000 01000 P2补 00.000 00100

32、 P3补 00.000 00010 +-Y补 01.000 01.000因符号位相异,所以Y*X溢出。第60页,此课件共102页哦图 补码一位BOOTH乘法原理框图补码BOOTH乘法的逻辑结构如下图。第61页,此课件共102页哦BOOTH乘法的流程图如下。pp1.0?开始Pp2n+1:00,i0,ryn+1:1,X,tempn:0temp=pp2n+1:n+1pp tempn+1,temp,ppn:1 i i+1in?结束Y00 OR 11N01启动乘法器,i1,ryy,ryn+1=ryn,ppn:1=X,pp0=0temp=pp2n+1:n+1+ry10temp=pp2n+1:n+1+ry+

33、1Booth乘法算法流程图乘法算法流程图p tempn:1,ppn:2 第62页,此课件共102页哦设计实例设计一个二进制定点小数的补码乘法器,其外观图如下。二进制定点小数的补码乘法器的代码如下。complement multiplier y x clk startresetdone poverflow第63页,此课件共102页哦Complement multiplier codemodule c_mult(clk,reset,start,x,y,p,done,overflow);parameter bit_width=4;input clk,reset,start;input bit_wid

34、th-1:0 x,y;/x-?y-?output done,overflow;output(bit_width-1)*2:0 p;reg bit_width:0 ry,temp;reg bit_width*2+1:0 pp;reg(bit_width-1)*2:0 p;reg done,overflow;integer state;always(negedge reset or posedge clk)beginif(reset=0)begin state=0;done=0;overflow=0;ry=0;pp=0;endelse case(state)0:begin done=0;temp=

35、0;pp=temp,x,1b0;ry=ybit_width-1,y;if(start=1)state=1;end第64页,此课件共102页哦 bit_width:begin case(pp1:0)2b01:temp=ppbit_width*2+1:bit_width+1+ry;2b10:temp=ppbit_width*2+1:bit_width+1+ry+1;2b00,2b11:temp=ppbit_width*2+1:bit_width+1;endcase p=tempbit_width-1:0,ppbit_width:2;done=1;overflow=tempbit_widthtemp

36、bit_width-1;state=0;end default:begin case(pp1:0)2b01:temp=ppbit_width*2+1:bit_width+1+ry;2b10:temp=ppbit_width*2+1:bit_width+1+ry+1;2b00,2b11:temp=ppbit_width*2+1:bit_width+1;endcase pp=tempbit_width,temp,ppbit_width:1;/high bit not move state=state+1;end endcase end endmodule第65页,此课件共102页哦Compleme

37、nt multiplier testbench codetimescale 1ns/1nsmodule c_mult_tb;parameter bit_width=4;wire(bit_width-1)*2:0 p;wire done,overflow;reg bit_width-1:0 a,b;reg clk,start,reset;integer i,k;initial begin k=1bit_width;clk=0;start=0;reset=1;a=1;b=1;#100 reset=0;#100 reset=1;start=1;end always#100 clk=clk;alway

38、s(posedge done)begin a=a+1;if(a=0)b=b+1;end c_mult m(.clk(clk),.reset(reset),.start(start),.x(a),.y(b),.p(p),.done(done),.overflow(overflow);endmodule 第66页,此课件共102页哦四、阵列乘法器设计P74设有2个补码表示的8位带符号数A8和B8,试计算Z16=A8*B8。已知X补=X0.X1X2Xn,根据补码性质(3)知:X=XX补补-2X-2X0 0=X=X0 0.X.X1 1X X2 2X Xn n-2X-2X0 0 =0.X =0.X1 1

39、X X2 2X Xn n-X-X0 0若变成正整数,可得:A8=a7a6a5a4a3a2a1a0=-a7*27+a6a5a4a3a2a1a0 =-a7*27+A7B8=b7b6b5b4b3b2b1b0=-b7*27+b6b5b4b3b2b1b0 =-b7*27+B7第67页,此课件共102页哦Z16=A8*B8 =(-a7*27+A7)*(-b7*27+B7)=a7*b7*214+(-a7*B7)*27+(-b7*A7)*27+A7*B7其中a7*b7和A7*B7与无符号数乘法相同,其他2项为负。如下图所示。第68页,此课件共102页哦15 14 13 12 11 10 9 8 7 6 5 4

40、 3 2 1 0 a7b0 a6b0 a5b0 a4b0 a3b0 a2b0 a1b0 a0b0 a7b1 a6b1 a5b1 a4b1 a3b1 a2b1 a1b1 a0b1 a7b2 a6b2 a5b2 a4b2 a3b2 a2b2 a1b2 a0b2 a7b3 a6b3 a5b3 a4b3 a3b3 a2b3 a1b3 a0b3 a7b4 a6b4 a5b4 a4b4 a3b4 a2b4 a1b4 a0b4 a7b5 a6b5 a5b5 a4b5 a3b5 a2b5 a1b5 a0b5 a7b6 a6b6 a5b6 a4b6 a3b6 a2b6 a1b6 a0b6 0 a7b7 a6b7

41、 a5b7 a4b7 a3b7 a2b7 a1b7 a0b7z15 z14 z13 z12 z11 z10 z9 z8 z7 z6 z5 z4 z3 z2 z1 z0(-a7)*B7*27(-a7)*(-b7)*214A7*(-b7)*27第69页,此课件共102页哦写成二进制位的形式:a7*B7=0 0 a7b6 a7b5 a7b4 a7b3 a7b2 a7b1 a7b0b7*A7=0 0 b7a6 b7a5 b7a4 b7a3 b7a2 b7a1 b7a0已经知道-X=/X+1。对这2项同时取反再加1后得到:15 14 13 12 11 10 9 8 7 0 0 a7b6 a7b5 a7b

42、4 a7b3 a7b2 a7b1 a7b00 0 b7a6 b7a5 b7a4 b7a3 b7a2 b7a1 b7a00 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 1第70页,此课件共102页哦化简并1放到适当位置后,得到:15 14 13 12 11 10 9 8 7 0 0 a7b6 a7b5 a7b4 a7b3 a7b2 a7b1 a7b00 0 b7a6 b7a5 b7a4 b7a3 b7a2 b7a1 b7a01 0 0 0 0 0 0 1 0第71页,此课件共102页哦把所有乘积项相加后,得到:15 14 13 12 11 10 9 8 7 6 5 4 3 2

43、1 0 1 a7b0 a6b0 a5b0 a4b0 a3b0 a2b0 a1b0 a0b0 a7b1 a6b1 a5b1 a4b1 a3b1 a2b1 a1b1 a0b1 a7b2 a6b2 a5b2 a4b2 a3b2 a2b2 a1b2 a0b2 a7b3 a6b3 a5b3 a4b3 a3b3 a2b3 a1b3 a0b3 a7b4 a6b4 a5b4 a4b4 a3b4 a2b4 a1b4 a0b4 a7b5 a6b5 a5b5 a4b5 a3b5 a2b5 a1b5 a0b5 a7b6 a6b6 a5b6 a4b6 a3b6 a2b6 a1b6 a0b6 1 a7b7 a6b7 a5

44、b7 a4b7 a3b7 a2b7 a1b7 a0b7z15 z14 z13 z12 z11 z10 z9 z8 z7 z6 z5 z4 z3 z2 z1 z0(-a7)*B7*27(-a7)*(-b7)*214A7*(-b7)*27第72页,此课件共102页哦阵列乘法的Verilog HDL代码V1module mul_signed(a,b,z);input 7:0 a,b;output 15:0 z;wire 7:0 ab0=b0?a:8b0;wire 7:0 ab1=b1?a:8b0;wire 7:0 ab2=b2?a:8b0;wire 7:0 ab3=b3?a:8b0;wire 7:0

45、 ab4=b4?a:8b0;wire 7:0 ab5=b5?a:8b0;wire 7:0 ab6=b6?a:8b0;wire 7:0 ab7=b7?a:8b0;assign z=(8b1,ab07,ab06:0)+7b0,ab17,ab16:0,1b0)+(6b0,ab27,ab26:0,2b0+5b0,ab37,ab36:0,3b0)+(4b0,ab47,ab46:0,4b0+3b0,ab57,ab56:0,5b0)+(2b0,ab67,ab66:0,6b0+1b1,ab77,ab76:0,7b0);endmodule第73页,此课件共102页哦阵列乘法的Verilog HDL代码V2mod

46、ule mul_signed_v2(a,b,z);input 7:0 a,b;output 15:0 z;reg 7:0 a_bi7:0;/二维数组always *begininteger i,j;for(i=0;i7;i=i+1)for(j=0;j7;j=j+1)a_biij=ai&bj;for(i=0;i7;i=i+1)a_bii7=(ai&b7);for(j=0;j7;j=j+1)a_bi7j=(a7&bj);a_bi77=a7*b7;end assign z=(8b1,a_bi07,a_bi6:0)+7b0,a_bi17,a_bi16:0,1b0)+(6b0,a_bi27,a_bi26

47、:0,2b0+5b0,a_bi37,a_bi36:0,3b0)+(4b0,a_bi47,a_bi46:0,4b0+3b0,a_bi57,a_bi56:0,5b0)+(2b0,a_bi67,a_bi66:0,6b0)+1b0,a_bi77,a_bi76:0,7b0);endmodule第74页,此课件共102页哦3.6 逻辑运算定点运算器还用于实现二进制位串的逻辑运算。一、逻辑与运算A、B两个寄存器存放的内容对应位进行逻辑与运算。主要用于数据处理中的“屏蔽”(删去)、“选位置0”操作。例如若将A寄存器的高4位置为全0:A 00110111 B AND 00001111 00000111第75页,

48、此课件共102页哦二、逻辑或运算A、B寄存器存放的内容对应位进行逻辑或运算。主要用于数据处理中“选位置1”、插入和拼组等操作。选位置1是指寄存器中某些位要求置1的操作。如要求A寄存器A5、A3、A0被置1,则使B寄存器中与之对应的那些位为1,其余位为0:A00110111BOR 00101001 00111111第76页,此课件共102页哦插入操作是指寄存器中某些位的内容,用新的数值取代。如要求在A寄存器高4位插入新的数值,首先应将A寄存器的高4位清0,然后再将A寄存器的高4位与要求插入的数值作逻辑或运算:与运算 A 01010111 BAND 00001111 A 00000111第77页,

49、此课件共102页哦然后在A寄存器的前4位插入新值0011:或运算 A00000111 BOR 00110000 A 00110111第78页,此课件共102页哦拼组操作是指将两个或多个二进制编码信息进行组合的操作。如将十进制数串89表示成BCD码(8421码)存放在一个字节中。00111000 8 AND00001111 A 00001000 00111001 9 AND 00001111 B00001001第79页,此课件共102页哦将A寄存器中的值逻辑左移四位得 10000000与B寄存器进行或运算:10000000 OR 00001001 1000100189第80页,此课件共102页哦

50、三、异或操作异或操作是指对应位实现异或操作。主要用于数据处理中“比较”及选位置反。选位置反是指寄存器中某些位要求置反的操作。如要求A寄存器的A 5、A1,A0内容置反,则在B寄存器与之对应的位置放1,其余位放0,通过异或操作即可:A 10100110B XOR 00100011 10000101第81页,此课件共102页哦比较操作是指两个寄存器内容逐位加以比较,如两个寄存器内容相同,则结果为0,否则结果为0。四、同或操作同或操作与异或操作类似。第82页,此课件共102页哦逻辑运算是在二进制位串对应位之间进行的,与相邻的高位和低位的值均无关。用于完成算术和逻辑运算的部件被称为算术与逻辑运算部件A

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁