VHDL中Loop动态条件的可综合转化
其对应综合后的电路见图1。
相应的,也可以用下列语句直接代入代换:
Out_Bus(0)<=In_Bus(0);
Out_Bus(1)<=In_Bus(1);
程序1可以采用下列VHDL代码表示:
K:=2;
Temp:=MyList(2);
If(MyList(1)<Temp then
MyList(2):=MyLi
st(1);
J:=1;
End if;
MyList(J):=Temp;
J:=3;
Temp:=MyList(3);
If(MyList(2)<Temp then
MyList(3):=MyList(2);
J:=2;
End if;
If(MyList(1)<Temp then
MyList(2):=MyList(1);
J:=1;
End if;
MyList(J):=Temp;
……
然而,这种使用方法要求设计者清楚循环条件一定会执行的次数,否则将无法实施。当循环次数比较大时,代码编写工作量将十分庞大,因此可以采用第二种方法——边界扩充法。
3 边界扩充法
边界扩充法是指在边界未定时,可以将边界定为最大可能的范围,即用静态表达来替代。例如程序1的代码可以改写为:
constant MAX:integer=100; --MAX必须大于MyLen所有可能的取值
……
Out_loop:for I in 2 to MAX loop
Exit out_loop when I>MyLen; --MyLen为变量
Temp:=MyList(I);
countj:=I;
inter_loop:for j in I downto 2 loop
countj:=j;
exit inter_loop when MyList(j-1)<Temp; --退出循环
MyList(j):=MyList(j-1);
End loop;
MyList(countj):=Temp;
End loop;
《VHDL中Loop动态条件的可综合转化(第2页)》