在FPGA中实现波束形成算法
来源:用户上传
作者: 周小华
摘要:本文以在LATTICE公司的EDA环境下对波束形成的算法整个设计为例,对使用VHDL设计FPGA的流程作了全面的介绍。
关键词:EDA、现场可编程逻辑陈列(FPGA)、硬件描述语言(VHDL)、PLD(可编辑逻辑器件)、ASIC
1、引言
随着EDA技术的高速发展,现场可编程门阵列器件(FPGA)及可编辑逻辑器件(PLD)的出现,给工程设计人员带来了极大的方便,大大缩短了产品的研发周期。而VHDL而作为一种新型硬件描述语言与其他传统集成电路描述语言相比,具有明显优势。功能强大,描述力强。可用于门级、电路级甚至系统级的描述、仿真和设计。这样设计师将在自上而下设计的全过程中均可方便地使用同一种语言。而且,对设计的描述具有相对独立性,语言标准、规范,可移植性较好。因此,VHDL设计技术对可编程专用集成电路(ASIC)的发展起着极为重要的作用。
本文以在LATTICE公司的EDA环境下对波束形成的算法整个设计为例,对用FPGA实现波束形成算法过程作了全面的介绍。
2、波束形成的算法简介
2.1 数字波束形成的基本算法
波束形成的基本算法用下述公式加以说明。例中,基阵为一个基元数为N的圆形阵,N个基元用相连的Jp个基元输出信号X(j+k)modN(n),(j=0,1,…,Jp-1),形成一个宽带波束输出Bk(n) :
1 Jp-1
Bk(n)=―∑WjX(j+k)modN(nM+τj)
Jp j=0
式中:k是形成波束的Jp个基元的起始基元号;τj是数字化的第j个基元信号的时延值;Wj是第j个基元的加权值。
该公式的物理含义是:形成波束输出的是Jp个基元输出信号进行了时延补偿后的加权和。
2.2 波束处理特殊的时延处理电路框图
波束形成处理的核心部分是基元延时的实现,这也是波束形成处理有别于其他信号处理的地方。而基元延时处理,在数字波束形成处理中,可以通过输入数据存储器的输出地址的处理来实现。
波束控制参数寄存器用来寄存形成的其始基元号和对时延参数的选择;M累加器实现的是每产生一个时刻的波束值后累加上一个M值,从而完成时间域波束处理运算后的降采样抽取;M累加器的输出和时延值相加实现了(nM+τj ),给出的是形成波束的某个基元某时刻的值;波束控制参数寄存器(2)中的启始基元值与DSP读数据存储器地址相加得到形成某波束的基元号值。
DSP器件和用此框图构成的电路以及数据输入存储器,即可构成一个专用的波束形成处理电路。这里,DSP器件对数据输入存储器读数时利用了“流水寄存器”的方法,使其能够无等待地全速运行。
3、设计过程
设计过程包括以下几个基本设计阶段:设计输入程序、编译源代码、仿真、综合、门级仿真、物理设计、时序仿真、设计实现及设计验证。设计过程中将循环地进行以上几个过程,直到最后的仿真设计结果能够达到预期设计的要求。
3.1VHDL代码编写
在编写VHDL代码过程中,良好代码编写风格可以满足信、达、雅的要求。而不恰当的VHDL代码编写风格将使FPGA设计中增加不必要的门和可配置逻辑单元(CLB)。因此VHDL代码的编写风格将直接影响到设计的结果。所以在编写VHDL代码时必须做到以下几点:
(1)对所有的信号名、变量名和端口名都用小写,对常量名和用户定义的类型用大写;
(2)避免采用内部三态电路,建议用多路选择电路代替内部三态电路。
(3)在例化模块时,使用名字相关的显式映射而不要采用位置相关的映射,这样可以提高代码的可读性和方便debug连线错误;
(4)尽可能使用循环语句和寄存器组来提高源代码的可读性,这样可以有效地减少代码行数;
(5)避免冗长的逻辑和子表达式;
(6)在设计中避免实例化具体的门级电路。门级电路可读性差,且难于理解和维护,如果使用特定工艺的门电路,设计将变得不可移植。如果必须实例化门电路,我们建议采用独立于工艺库的门电路,如SYNOPSYS公司提供的GTECH库包含了高质量的常用的门级电路。
根据上面的公式可以得知,波束形成的核心就是延时后的数相乘累加所得到的结果。
说明:在程序中两个输入a,b分别代表公式中的Wj和X(j+k),后面的累加器、加法器是nM+τj 的结果。而后面的移位则是信号的归一化处理的结果。
在VHDL程序输入完成后,经ispEXPERT的Compiler编译,编译通过后,可用Stimulator进行仿真,查看仿真结果。如果仿真的结果没有达到预期的要求就必须修改完善VHDL程序,只有在所有的仿真结果正确后就可以进行设计综合了。
3.2设计综合
在VHDL代码编译完后,使用LATTICE公司的EDA工具对设计进行进一步综合,为了使设计尽量完美从以下几方面考虑了这个问题:RTL综合:它包括状态机RTL设计和组合逻辑设计。在RTL综合中,信号和变量的初始值被忽略。速度和面积的优化:速度和面积在FPGA设计中是相互矛盾的。我们应该根据目标器件的特点对面积和速度的优化进行合理的设计。
3.3 设计实现
设计的实现过程是利用LATTICE开发工具将设计综合中逻辑网表转化为物理网表的过程,并将其成功地适配进所选的目标器件。如果适配过程不能满足给出的时序约束,必须回到开始重新进行综合甚至重新编写部分代码。一旦目标器件适配成功,则就可以进行下一步功能和时序仿真。
3.4 设计验证
FPGA设计中的验证,包括功能验证和时序验证。在验证之前,应该对验证的事项写出对应的测试向量,根据所写的测试向量,就可以得到对应的验证波形。下面就给出了波束形成的时序仿真的激励波形和验证波形。在功能验证完成之后就可以进行时序验证。
3.5 时序仿真
时序仿真的激励波形和验证波形编写完后就应该进行时序仿真。
由上面的波形图可知,时序的波形图基本达到了设计的要求。如果时序的波形图不正确,就用修改程序的方法来解决它,以使他达到正确的结果。一旦所有的仿真结果都正确,就达到了要求。
4、总结
本设计是采用EDA的设计手段,采用VHDL硬件描述语言编程在FPGA芯片实现波束形成处理算法的电路。选用了LATTICE公司的FPGA芯片,运用ispEXPERT开发工具进行设计输入、编辑、综合、仿真等设计流程。在此设计过程中我深刻体会到以下几点对设计至关重要:1)必须熟悉ispEXPERT开发工具的功能和使用,并对整个设计过程进行合理控制;2)必须深入了解波束形成处理板设计算法规范;3)必须熟练掌握所选目标器件的性能;4)必须熟悉VHDL语言在FPGA设计中的应用,选择合适的代码风格以实现预期的逻辑功能和时序要求。
参考资料:
1) ispEXPERT System User Manual,1996
2) ispEXPERT System Simulation User Manual,1996
3) Waveform Tools Manual,1996
4)曾繁泰、陈美金等编著,《VHDL程序设计》,清华大学出版社,2001年。
转载注明来源:https://www.xzbu.com/2/view-421628.htm