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除法器设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSH远程访问开发板
- 下一篇: python百度云盘搜索引擎_PHP百度