四位二进制除法器设计李振礼11110820081、设计方法采用移位相减法设计二进制除法器:被除数和除数都是二进制数,采用将除数移位的方法。1)判断除数和被除数是否为零:如果除数为零,返回等待;如果被除数为零,则商和余数都为零。2)被除数和除数都不为零时,判断被除数和除数的大小:如果除数大于被除数,则商为零,余数等于被除数;如果除数小于等于被除数,则对除数进行移位,第一次移位使被除数的最高位和除数的最低位对齐。然后对移位后的除数和被除数进行判断:如果被除数大于等于除数,则用被除数减去除数,并将所得结果做为新的被除数;如果被除数小于除数,则将除数在第一次移位的基础上右移一位,在对被除数和除数进行判断,根据被除数和除数的大小关系进行类似的操作。2、算法流程图开始End=1Start=1?初始化:A=被除数B=除数S=0Y=0C=3B=0?A=0?A=B?BCC←C-1A=B?A←A-BS←S+1C0?Y=A结束S1NYYNYNYNYYNNBC+1图中:被除数和除数分别放在A、B中,商和余数分别放在S、和Y中,C作为移位计数器3、VHDL程序代码:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;---打开可能用到的库entitydedect1isport(A,B:instd_logic_vector(3downto0);S,Y:outstd_logic_vector(3downto0));endentitydedect1;----四位二进制除法器实体定义architecturebehvofdedect1isbegins1:process(A,B)---进程开始敏感信号A、Bvariabletmpa,tmpb:std_logic_vector(7downto0);--中间变量定义variabletmpc:std_logic_vector(3downto0);begintmpa:=00000000;tmpb:=00000000;tmpc:=0000;---中间变量初始化if(B0000)then---B不为零(除数不为零)if(A0000)then----A不为零(被除数不为零)if(AB)then----被除数大于除数时tmpa(3downto0):=A;-----以下四条If语句完成求满足以上tmpb(6downto3):=B;---三个条件时被除数除以除数的商和余数if(tmpa=tmpb)thentmpa:=tmpa-tmpb;tmpc(3):='1';elsetmpc(3):='0';endif;tmpb(5downto2):=B;tmpb(6):='0';if(tmpa=tmpb)thentmpa:=tmpa-tmpb;tmpc(2):='1';elsetmpc(2):='0';endif;tmpb(4downto1):=B;tmpb(5):='0';if(tmpa=tmpb)thentmpa:=tmpa-tmpb;tmpc(1):='1';elsetmpc(1):='0';endif;tmpb(3downto0):=B;tmpb(4):='0';if(tmpa=tmpb)thentmpa:=tmpa-tmpb;tmpc(0):='1';elsetmpc(0):='0';endif;Y=tmpa(3downto0);S=tmpc;elsif(A=B)then---------被除数等于除数S=0001;Y=0000;elseS=0000;---------被除数小于除数Y=A;endif;else----被除数为零时S=0000;Y=0000;endif;else---------除数为零时S=ZZZZ;Y=ZZZZ;endif;endprocess;---进程结束endarchitecturebehv;4、仿真结果:图中:A、B、S、Y分别是被除数、除数、商和余数。被除数为零时,除数为零和不为零时的商和余数;被除数不为零时,除数为零和不为零时的商和余数;被除数等于除数,大于除数及小于除数时的商和余数;