VHDL中Loop动态条件的可综合转化
尽管这种方法可以处理未知边界和未定表达式的情况,但十分消耗空间,特别是当MyLen相对MAX比较小的时候,代价非常大。此时,可以利用时间换空间的方法进行转换。
图1 For语句的综合示例
4 计数器法
本文链接地址:http://www.oyaya.net/fanwen/view/148739.html
图1 For语句的综合示例
4 计数器法
计数器法是指引入时钟和计数器,用计数器对边界条件进行控制,也可以将动态表达式直接代入转化相应的静态表达式。例如,上述代码的For条件可以用下列代码替换:
if(Reset='1')then
I:=2;
Elsif clk='1'and clk'event then
Temp:=MyList(I);
J:=2;
While(j>1)and MyList(j-1)<Temp loop
MyList(j):=MyList(j-1);
j:=j-1;
End loop;
MyList(j):=Temp;
I:=(I+1);
If(I=MyLen+1)then I:=2;end if;
End if;
相比原来的代码,引入了1个时钟和1个复位。但综合开销最大的循环语句却被取代了,因此,综合产生门的数目将大幅度下降,但处理时间将相应延长到原来循环条件范围。
本刊网络补充版(http://fanwen.oyaya.net收集整理)中发表了四个源代码,分别为不可综合例子、直接代换法、边界扩充法和计算
器法,内部都有相应注释。其中计数器法改进为双计数器方法。
结语
以上三种方法各有优缺点,不可一概而论,可以根据实际情况处理。直接代换法一般用于循环次数少的情况;边界扩充法一般用于循环次数接近最大边界时;计数器方法一般用于芯片内部时钟相对信号时钟快许多的情况。
《VHDL中Loop动态条件的可综合转化(第3页)》