基于FPGA的数字信号处理
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 FPGA使数字系统设计方法发生变革

现代的系统设计方法应该是自顶向下(Top-down)的设计方法。由于FPGA设计是一个数百万门的系统设计,因此,在其芯片本身的发展过程中,人们更注重了设计方法和设计工具的发展与应用。

1.3.1 数字系统设计方法的演变

数字系统设计经历了计算机辅助设计(Computer Aided Design,CAD)阶段、计算机辅助工程(Computer Aided Engineering,CAE)阶段和电子设计自动化(Electronic Design Au-tomation,EDA)阶段。EDA阶段最显著的特征是丰富的EDA软件平台和硬件描述语言VHDL/Verilog的支持。这样,可以由计算机自动完成综合、优化、布局布线和仿真,直至对特定目标芯片的编程下载,从而极大地提高了电路设计的效率和可操作性。

EDA阶段提出的设计方法是自顶向下的设计方法,这与传统的自底向上(Bottom-up)的设计方法有很大的不同。自底向上的设计方法是以固定功能元器件为基础的基于电路板的设计方法。这种方法在很大程度上依赖于设计师的经验和现有的通用元器件,因此,设计周期长,灵活性差,效率低下。自顶向下的设计方法基于对系统的整体理解和把握,将系统分解为不同的子系统和模块,若子系统规模较大,则还需要将子系统进一步分解为更小的子系统和模块,层层分解,直至整个系统中各个子系统关系合理,并便于寄存器传输级(Register Transfer Level,RTL)的设计和实现为止。这种方法可逐层描述,逐层仿真,最大限度地保证了系统指标的实现。这也正是目前FPGA设计中层次化设计(Hierarchy Design)方法的由来。Xilinx非常重视层次化设计方法。它是设计保留(Design Preservation)、团队设计(Team De-sign)、部分可重配置和IP复用(IP Reuse)等技术所必须满足的条件。FPGA的层次化设计流程如图1.15所示。从图1.15中可以看出,层次化设计可逐层仿真,以验证每个子系统的功能,进而保证整个系统功能的正确性,并可最快地定位系统所出现的问题。

图1.15 FPGA的层次化设计流程

目前,业界又提出了电子系统级(Electronic System Level,ESL)的发展阶段。ESL设计广义上是指从比目前主流的RTL更高的抽象级别上开始的系统设计与验证方法学。与硬件描述语言VHDL/Verilog相比,ESL设计语言在语法和语义上与流行的ANSI C比较接近。ESL的一个显著特征是出现了高层次综合(High Level Synthesize,HLS)工具,可以将C/C++/SystemC转换为RTL代码。这类工具有Xilinx的AutoPilot(AutoELS公司的产品,Xilinx于201 1年收购了此公司)、Mentor的CatapultC、Cadence的C-to-Silicon和Synfora的PICO等。此外,针对数字信号处理,Xilinx提供了图形化界面的基于模块化的设计开发工具SysGen(System Generator)。

1.3.2 XiIinx FPGA开发环境

针对FPGA设计,Xilinx提供了完备的开发环境,如图1.16所示。在系统级,根据系统性能指标和算法的复杂度,可将系统分解为软件部分和硬件部分。其中,软件部分可采用嵌入式处理器MicroBlaze实现,这时需要利用XPS开发平台;硬件部分可采用SysGen或AutoPilot作为开发平台。搭建好系统架构之后,软件开发平台可采用SDK,硬件开发平台可采用ISE +PlanAhead。此外,Xilinx还提供了丰富的IP核和调试工具——嵌入式逻辑分析仪ChipScope。这里重点介绍一下SysGen和PlanAhead。

图1.16 Xilinx FPGA开发工具

SysGen嵌入在Simulink下[9],以Simulink的一个Blockset形式呈现。SysGen提供了一种系统级模块化设计理念,可实现算法开发、大系统中部分子模块的设计与实现、整个系统的设计与实现。它更胜任于数据路径和控制路径的实现,对于时序要求苛刻的复杂的外围接口电路,建议采用手工编写HDL代码的方式实现。由于SysGen是嵌入在Simulink下的,所以可借助Simulink下的其他Blockset(如Source)产生期望的信号激励(Stimulus)用于仿真验证;同时,可借助各种可视化模块(如Sink下的Scope、Display等)对数据进行观测分析。众所周知,Matlab是业内普遍采用的反应较好的算法开发和验证软件,过去长时间主要应用于系统级的算法仿真和建模。SysGen实现了FPGA与Matlab的无缝连接,这些设计接口使Matlab这一系统设计工具与FPGA设计融为一体直接变为FPGA设计中的顶层设计工具。SysGen不但接受设计师们习惯的Matlab、Simulink、Verilog、VHDL语言,还支持混合使用这些语言进行设计工作,这一点对团队开发尤为重要。

SysGen建立在多个软件工具之上,并把系统级和RTL两个设计领域的设计工具连接起来,最大限度地发挥了两种工具的优势。Simulink工具提供了一个可以创建和仿真动态系统的可视化环境,SysGen以一个Xilinx Blockset块包含在Simulink库里,并且作为一个软件把Xilinx的Simulink模型翻译成一个硬件可执行的模型。它具有如下特点。

(1)高效而丰富的IP模块

Xilinx Blockset软件包中含有丰富的IP模块,专门用于数字信号处理的各种运算,这些模块经过反复验证和优化,是保证利用SysGen进行高效率设计的基础。SysGen把在Simu-link中定义的系统参数对应成硬件实现时的实体、结构体、输入/输出端口、信号和属性。在模型的搭建过程中,非Xilinx模块与Xilinx模块之间需要Gateway In或Gateway Out模块过渡,用于实现浮点数与定点数之间的转换,如图1.17所示。此外,SysGen可自动地为FPGA的综合工具、HDL仿真和实现工具生成命令文件。因此,从系统的规范说明到硬件实现,设计师都完全可以在可视化的环境中进行操作。

图1.17 非Xilinx模块与Xilinx模块之间的过渡

(2)按位对齐和按周期对齐

Simulink系统中各模型之间数据流的关系是通过模型自身的采样周期建立的,而FPGA实现的硬件系统则是通过各模型的时钟周期建立的,两者实质是一致的,只是硬件系统工作在绝对的时钟频率下,Simulink系统则工作在相对的时钟关系下。一个正确的Simulink系统周期应该是模型中出现的采样周期的最大公因子,这个最大公因子对应于FPGA系统中的主时钟周期。利用SysGen转换得到的硬件实现是可信任的,因为Simulink中的系统模型与硬件实现之间是保持按位对齐和按周期对齐的。在SysGen中,信号可以用任意精度的定点数据表示,VHDL程序中信号的精度则采用标准逻辑向量(std_logic_vector)表示。Sys-Gen中信号的位宽与自动转换得到的VHDL程序中对应信号的标准逻辑向量位宽一致。因此,SysGen是按位对齐建模的。SysGen使在Simulink中搭建的模型与硬件实现之间保持按周期对齐。Simulink中的信号都有一个相应的采样周期,信号的变化只能发生在采样周期的整倍数上。在硬件实现后的同步时序电路中,信号与主时钟保持同步,其变化也只发生在时钟周期的整倍数上。

利用SysGen进行数字系统开发的流程如图1.18所示。系统建模、系统级功能仿真和HDL协同仿真都可在Simulink下完成。在系统建模阶段,可以利用Xilinx Blockset下的模块,也可以利用已有的HDL代码通过BlackBox模块导入到Simulink工程文件 .mdl中(HDL代码要符合BlackBox模块的要求),也可以利用已有的Matlab代码通过MCode模块导入到Simulink工程文件.mdl中(Matlab代码要符合MCode模块的要求)。SysGen可自动生成HDL代码和相应的测试向量,这对于系统RTL功能验证非常有利。生成RTL代码后即可利用ISE完成其余流程。

图1.18 利用SysGen进行数字系统开发的流程

层次化设计方法同时要求设计工具具有较好的底层设计手段。现代的FPGA设计流程包括RTL代码的编写、对代码进行功能仿真、逻辑综合、布局布线。在上述过程中,布局所采用的算法最具有随机性,从而会影响后续的布线和最终的系统性能。PlanAhead软件工具解决了这一问题。PlanAhead早期主要应用于底层布局,而目前PlanAhead已发展到13.2版本,除了具有底层布局的功能外,还具有更强大的设计分析功能,而且从RTL设计输入到最终生成.bit文件都可在PlanAhead下完成。同时,通过PlanAhead还可以方便地实现设计保留。设计保留技术是建立在层次化设计基础上的一种能在小范围改动情况下节约综合实现时间并继承以往设计成果的设计手段。这极大地提高了设计的可继承性和可移植性。