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]=……


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值