32位除法器的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
subdesign divt
( a[31..0],b[31..0],inclk,trig:input; c[31..0],oe : output;
)
variable
ma[32..0],mb[32..0]:dff;
mmc[32..0]:dff;
mc[2..0],md[5..0] :dff;
begin
mmc[].clk=inclk;
ma[].clk=inclk;
mb[].clk=inclk;
md[].clk=inclk;
mc[].clk=inclk;
case mc[] is
when 0=>
mb[]=(0,b[]);ma[]=(0,a[]);
if trig==gnd then
st[]=1;
else
st[]=0;
end if;
md[]=md[];
when 1 =>
ma[]=ma[];md[]=md[]+1;
if mb[31]==gnd then
FOR i IN 31 TO 1 GENERATE
mb[i] =mb[i-1] ;
END GENERATE;
mc[]=1;
else
mb[]=mb[];
mc[]=2;
end if;
when 2=>
mb[]=mb[];
md[]=md[];
if ma[]>=mb[] then
ma[]=ma[]-mb[];
mc[]=4;mmc[]=mmc[]+1; else
mc[]=3;mmc[]=mmc[];
ma[]=ma[];
end if;
when 3=>
mc[]=4;
FOR n IN 32 TO 1 GENERATE ma[n] =ma[n-1] ;
mmc[n]=mmc[n-1];
END GENERATE;
mb[]=mb[];
md[]=md[]-1;
when 4=>
ma[]=ma[];mmc[]=mmc[];
mb[]=mb[];
if md[]==1 then
mc[]=5;md[]=md[];
else
mc[]=2;md[]=md[];
end if;
when 5=>
ma[]=ma[];
if ma[31]==vcc then
mmc[]=mmc[]+1;
else
mmc[]=mmc[];
end if;
mc[]=6;
when 6=>
c[]=mmc[31..0]; mmc[]=mmc[];ma[]=ma[];oe=vcc;
if trig==vcc then
mc[]=0;
else
mc[]=6;
end if;
end case;
end ;