计算机算法课件.ppt
《计算机算法课件.ppt》由会员分享,可在线阅读,更多相关《计算机算法课件.ppt(102页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 算法 课件
限制150内