欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > php >内容正文

php

php编写除法器程序,Booth除法器设计

发布时间:2024/3/7 php 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 php编写除法器程序,Booth除法器设计 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1.    除法器原理(补码除法运算)

被除数和除数都用补码表示,符号位参加运算,商和余数也用补码表示。

Booth除法需要考虑以下问题:

1. 够减的判断:

当两数同号时,实际应做减法;两数异号时,实际应做加法。

2. 上商规则:

3. 商符的确定:

商符是在求商的过程中自然形成的,第一次得出的商就是实际应得的商符

4. 求新部分余数:

5.末位恒置1

2.   设计思想

程序首先进行判0操作,如果被除数数中为0时,则直接输出结果0,否则进入程序主体。程序主体分成三个模块进行,首先判断第一次应该做加法还是减法,然后计算部分余数和商符;然后进入循环,左移部分余数和商,判断商和加数,依次按算法执行;最后末位置1。

3.   程序设计

module Division(Dx,Dy,Dout,Dre);//补码一位除法(Booth除法)

input [5:0]Dx,Dy;//定义六位数输入,其中前两位为符号位

output reg [4:0]Dout;//定义5位数输出,商

output reg [5:0]Dre;//定义六位数输出,余数

reg [5:0] HDre;//HDre寄存器存放部分余数

reg [5:0] IDy;//IDy寄存器存放 【-除数】补码

reg [3:0] n;//n作为临时变量,用来存放循环次数

always @ (Dx,Dy)

begin

if(Dx==0)//被除数为零

begin

Dout=0;

Dre=0;

end

else

begin

Dout=5'b00000;

Dre=6'b000000;

HDre=6'b000000;

IDy=~Dy+1;

n=4'b1111;

if(Dx[5]==Dy[5])//X补 与 Y补 同号

begin

HDre=Dx+IDy;//加 -Y补

Dout[0]=0;

end

else

begin

HDre=Dx+Dy;//加 Y补

Dout[0]=1;

end

while(n)

begin

HDre=HDre<<1;

Dout=Dout<<1;

begin

if(Dout[1]==1)//商1时加 -Y补

HDre=HDre+IDy;

else//商0时加 Y补

HDre=HDre+Dy;

end

begin

if(Dy[5]==HDre[5])//ri补 与 Y补 同号

Dout[0]=1;//商1

else

Dout[0]=0;

end

n=n>>1;//循环次数减1

end

Dout[0]=1;//末位恒置1(虽然在上面的循环中已将末位置数,但那不是准确的)

Dre=HDre;

end

end

endmodule

4.   设计验证

例:已知X=0.1000,Y=-0.1010,求X/Y:

1.  两数用补码表示  X补=00.1000  Y补=11.0110  -Y补=00.1010

2.  设置输入为001000和110110

3.  仿真得结果为111110和10011,即 商:1.0011  余数:11.1110

4.  最终:[X/Y]补=1.0011+(1.1110*2^(-4)/1.0110)  [X/Y]=……

总结

以上是生活随笔为你收集整理的php编写除法器程序,Booth除法器设计的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。