您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

VHDL中Loop动态条件的可综合转化

时间:2007-1-20栏目:电子通信论文

摘要:论述VHDL中Loop语句动态表达式的可综合性问题,提出三种解决方法:直接代入法、边界扩充法和计数器法,并对比这三类方法的适用性。

    关键词:VHDL Loop动态条件 综合子集 直接代入法 边界扩充法 计数器法

引言

VHDL是一种硬件描述语言,于1983年被IEEE制定为国际标准IEEE1076。近年来国内引进和出版了不少教材,使其在国内得到迅速推广。由于VHDL最初目的是为了实现硬件的建模而被提出的,所以其措施能力超越了数字逻辑集成电路的范围。而现有的EDA工具基本上只能支持VHDL的子集,特别是针对FPGA/CPLD器件进行的不同的综合工具,其综合子集并非统一,不少初学者很难掌握。即使是部分有经验的设计者,对于通常高级语言中都会涉及的循环语句,在VHDL中往往也不能运用自如,甚至无法表达此类逻辑,从而限制了VHDL的应用水平。例如,VHDL的并行堆排序描述就是一个比较典型的例子。该实例十分类似通常数据结构的描述,推广前景诱人;但只能通过仿真,却不能在目前任何一个EDA工具进行综合,导致无实用价值。

本文从高级语言涉及最多的Loop语句出发,讨论如何在VHDL中解决这类问题。

1 无法综合的Loop动态条件

VHDL中Loop表达式有三种体现形式:While……Loop、For……Loop和单独的Loop语句。它还支持Next、Exit和标号,因此,循环语句的表达能力大于常规的C或PASCAL语言。程序1是利用For语句和While语句描述插入算法的部分代码。

程序1 不可综合的VHDL循环语句

……

for I in 2 to Length loop ---Length为一个变量

Temp:=MyList(I);

J:=I;

While(j>1)and MyList(j-1)<Temp loop

MyList(j):=MyList(j-1);

j:=j-1;

End loop;

MyList(j):=Temp;

End loop;

……

对于第一个For语句,EDA工具Synplify综合时将会给出无边界的范围错误提示。

@E:"H:.vhd"|for loops with unbound ranges should contain w wait statement

即使部分优秀的综合工具,例如ORCAD Express、Mentor Grpahs QuickHDL等能够综合第一个For语句,也无法支持第二个While条例表达式。ORCAD Express将给出表达式不可静态计算的错误提示。

..vhd(45):Error,expression does not evaluate to a constant.

由于程序1在C程序员看来是没有问题的,因此,初学者往往不能解决好此类问题,从而使学习陷入困境,无法充分利用VHDL来表述逻辑。

2 直接代换法

对于第一类无边界的范围错误问题,可以用循环的综合机制转化为相应的语句。例如下面代码:

for I in 0 to 1 loop

Out_Bus(i)<=In_Bus(i);

End loop;

[1] [2] [3] 下一页

下页更精彩:1 2 3 4 下一页