牛斌凯 雍少为 张 建 陈 亮
(国防科技大学电子科学与工程学院卫星导航定位研发中心 长沙 410073)
最近几年,FPGA已经成为数字信号处理系统的核心器件,其高速并行运算能力使得它成为高性能数字信号处理的理想平台[1]。然而,数字信号处理设计者往往使用MATLAB或C/C++语言来进行系统建模,而FPGA设计者却使用的是硬件描述语言(HDL)—VHDL或Verilog,所以如何将两种设计方法相结合,具有一定挑战。
SysGen是一种系统级(或算法级)的设计工具。较传统的数字信号处理系统开发方式,它有着突出的优点:首先,SysGen能够在Matlab/Sim ulink提供的高水平运行环境中对所需的硬件系统进行图形化建模,这种建模方式扩展了传统的HDL设计方式,提高了开发效率[2];其次,在Simulink环境下建模的数字系统可自动转换成ISE、FPGA工程,大大减少了系统控制逻辑设计用时及具体硬件实现用时,降低了出错概率;再次,对Sys-Gen系统仿真时,Matlab强大的数据生成、处理功能与Modlsim等基础仿真工具很好的结合了起来,取代了编写复杂 testbench的困难;另外,Sys-Gen的硬件联合仿真功能,可以让FPGA作为系统设计的一部分,实现已经验证了的大规模并行计算,以此来加快系统其他部分仿真的速度。
本文通过分析数字系统设计传统方法与Sys-Gen的技术特点,总结了基于SysGen的数字系统开发方法和一般流程,并应用该方法设计验证了一套数字下变频(DDC)系统,通过系统仿真结果及分析,证明了该方法对于数字系统的建模优势明显。
在传统设计方法中,系统级建模时往往使用Matlab、C++语言来描述各功能模块,而在寄存器传输级则使用硬件描述语言(VHDL/Verilog)描述各模块。传统的系统设计方法流程如图1所示[3]。
图1 传统设计方法流程图
从图中不难看出,传统的设计方法会出现如下弊端:首先,算法设计人员需要使用Matlab/C++语言来建立系统级模型,并验证模型的正确性,在算法实现阶段,原始的Matlab/C++描述必须手工转换为VHDL或Verilog HDL描述。设计人员必须同时掌握高层抽象的Matlab/C++语言和低层细节的VHDL或Verilog语言,这两个层次转换过程中会花费大量的时间,并可能产生一些错误;其次,当使用C语言描述的模块转换成HDL描述的模块之后,后者将会成为今后设计的焦点,而设计人员花费大量时间建立起来的C模型将再没有什么用处[3];再次,不同层次的设计需要使用多个测试平台,因为在系统级建立起来的针对C语言描述的模块测试平台无法直接转换成针对 HDL语言描述的模块所需要的测试平台;同时,对于规模大、复杂度高的系统,软件与RTL模型联合仿真的速度过于缓慢,很难进行有效的仿真,验证结果难以满足一致性要求。
使用SysGen可以避免以上问题。这种工具可以在同一环境下(Matlab/Simu link)完成数字系统算法的模型设计,算法模型向ISE工程的自动转换,以及测试向量的自动生成等[3]。其硬件联合仿真(Hardware Co-sim)功能能够提升系统仿真验证速度。
SysGen继承了Simulink的模块化建模方式及其动态系统建模、仿真、和分析功能,同时,它还可以将功能模块定义的系统参数映射为硬件实现中的实体、结构、端口、信号和属性,并能够自动生成FPGA综合、仿真和实现工具所需的命令文件。由此可见,SysGen是数字信号处理系统设计与XILINX FPGA 实现之间的“桥梁”[7]。
在SysGen的基本元件库中,有几个重要模块值得提出。System Generator模块:该模块可以配置SysGen系统的采样时间,硬件相关程序的生成,它是每个SysGen系统的必备模块;Gateway模块:该模块用于双精度运算与定点运算之间的数据格式转换,是XILINX模块与非XILINX模块之间的链接模块;BlackBox模块:该模块用于装载设计师自行定义的 HDL模型,当HDL描述被载入BlackBox时,SysGen可以自动生成HDL代码与Simulink相链接的.m文件,文件确保了HDL功能模块与Simulink的有效通信,载入HDL代码后的BlaxkBox模块与该HDL描述有着相同的输入、输出端口和功能;ModelSim HDL co-simulation模块[1]:当设计中含有BlackBox加载的HDL功能模块时,ModelSim HDL co-sim u lation模块用来配置一个或几个BlackBox,该模块的功能就是将HDL代码放到ModelSim中运行,然后将ModelSim得到的结果再导入到系统模块中。
通过这一工具,用户可以:1)用Sim ulink开发DSP;2)用System Generator for DSP自动将Simulink模型转成面向Xilinx FPGA的VHDL/Verilog代码;3)使用Xilinx公司提供的IP核。
应用SysGen设计数字信号处理系统时,设计者可应用Matlab对系统进行算法建模,同时确定软硬件划分及各功能模块划分;SysGen的模型库中提供了相当丰富的数字信号处理模块,如FFT、FIR、DDS等等,这些模块模型对应着IP核库组件,设计者只需按照算法要求拖拽、配置所需模块就可完成功能模块设计。当然,设计者还可以针对具体需求自行编写.m/.v/.vhd类型的代码模块,然后通过载体模块(BlackBox、MCode)将代码模块加载到系统中去,从而实现软硬件协同设计;将各模块相互连接实现系统模型搭建后,SysGen能够将系统模型自动转换成ISE工程、FPGA工程,同时为系统的 HDL仿真、综合、布线生成了脚本文件、约束文件;Simu link提供的各种信号源模型、示波器模型能够用来完善验证环境搭建,为系统级仿真提供了条件。应用自动生成的testbench测试代码、测试文件,SysGen系统模型能够在Sim ulink环境下完成系统仿真验证;SysGen可最终将设计系统编译综合成可上板调试的FPGA工程。
图2 应用SysGen的一般建模方法流程图
这种系统级建模方式不需要开发人员自行编写代码,不存在算法设计向 HDL描述手工转换的问题,甚至不必对算法和FPGA结构有相当的了解。系统设计和硬件设计之间反复而便捷的迭代验证极大地提高了开发效率。Sys-Gen的一般建模方法流程图如图2所示。
一般来说,从使用SysGen进行系统建模到完成设计包括以下几个步骤[6]:1)用数字语言来描述算法;2)在设计环境中实现算法,开始时使用双精度;3)把双精度算法转换成定点算法;4)把设计转换成有效的硬件。
数字下变频是无线电或移动通信系统的重要组成部分。数字接收系统(如GPS接收机)采用下变频,将接收到的射频信号搬移到中频上,或者由中频变为零中频信号。从工作原理讲,下变频就是输入信号与一个本地振荡信号的乘法运算。设输入信号为a(t)cos(ωct),本地振荡信号为 A coscos(ωc-ωL)t。利用滤波器滤除和频(ωc+ωL)保留差频(ωc-ωL)就是下变频。若 ωc=ωL就得到了零中频信号。变频器主要功能有:1)降低数据速率,从而降低后续电路的复杂度;2)将中频信号变至基带信号;3)滤除有效信号带外的干扰信号。
本文设计的DDC系统由数字混频器、数控振荡器和低通滤波器三部分组成,其基本流程如图3。
图3 数字下变频流程示意图
该设计输入为两个频率(42MHz、48MH z)混合后的单载波,混频频率 ωL为40MH z,输入信号与数控振荡器混频后完成频谱迁移,混频信号通过两级低通滤波,8MHz的单载波被抑制,最后输出I/Q两支路信号。滤波处理的过程设计为第一级低通滤波的同时完成5倍的降采样操作,第二级滤波为同频输入输出。该系统设计框图如图4所示。
图4 DDC系统设计框图
按照上述的SysGen系统设计方法和流程,在明确算法设计后可展开各模块的建模。该DDC系统信号源采用两个Simulink提供的信号发生器(SineWave)模块,混频模块为SysGen模型库中的数控振荡器模块(DDS)、乘法器模块(Mult)也由SysGen模型库提供,各模块参量配置如前所述。设计FIR滤波器模块时,我们尝试了两种实现方式。第一种方式应用IP core生成两个不同参量的FIR滤波器的HDL描述,将这两个HDL描述各自例化两次(I/Q两支路)后,载入两个BlackBox模块中,链接两级黑盒子形成图5所示的DDC系统;第二种方式应用SysGen模型库中的FIR模型(滤波器系数与第一种方式相同),其他模块相同。由于两种建模方式结果相同,第二种方式的建模与仿真过程不再给出。
图5 基于SysGen设计的 DDC系统
为了验证应用SysGen设计出来的数字系统与该系统算法级描述在输出结果上的一致性,我们应用Sim ulink与SysGen并行地搭建了上述讨论的DDC系统(省略5倍降采样部分),同时要求两者的结果误差不超过百分之一。SysGen系统参量设置如下:系统的采样率为100MH z,FPGA时钟频率为10ns,仿真时间250μs。在仿真环境相同的情况下,仿真数据如图6所示。比较两组数据可见,SysGen系统满足算法一致性要求,由量化和字长效应产生的误差不超过百分之一,可以忽略。
图6 Simu link与SysGen仿真结果比较图
在SysGen设计满足算法一致性要求的基础上,我们对该DDC系统进行SysGen与ModelSim的联合仿真(SysGen参量设置不变,仿真时间仍为250μs),仿真用时82s,然后把系统编译综合成可上板调试状态(如图7所示),并进行调试。实际电路板上时钟晶振为50MH z,仿真时间250μs,所用的FPGA芯片型号为Spartan3 xc3s2000-4fg676,数据由FPGA下载线缆与PC进行传输。Hardware Co-Sim结果与SysGen、ModelSim联合仿真结果一致,如图8所示,仿真用时46s,仿真速度有近44%的提高。
由上述仿真结果可见,SysGen建模满足算法与系统模型的一致性要求,仿真过程无需使用多个测试平台,简洁高效。SysGen系统上板调试的仿真用时较软件与RTL模型联合仿真的仿真用时有很大程度的缩减,这一优势是应用SysGen的Hardware Co-Sim功能实现硬件加速的基础。今后可以在SysGen建模的大系统中直接加入适合在FPGA中实现的运算(如大型并行计算)模块,这种半实物仿真可以更迅速地验证系统是否满足功能要求。
本文首先分析了传统的数字信号处理系统设计流程,针对传统方法中算法设计与软硬件设计脱节及联合仿真速度慢的弊端,提出了应用Simulink/SysGen设计数字信号处理系统的相关方法。应用新方法,本文设计、验证了一套数字下变频系统。在DDC系统实现过程中,我们应用SysGen提供BlackBox载入了自行设计的功能模块,完成了Simulink、ModelSim的联合仿真与硬件联合仿真,各项仿真结果一致,硬件联合仿真速度较纯软件系统执行速度有明显提高。
该DDC系统实现过程中,应用到的方法和积累下的经验为下一步工作奠定了必要的实践基础,应用硬件联合仿真实现大系统中复杂运算部分的硬件加速将是下一步研究的重点。
[1]纪志成,高春能.FPGA数字信号处理设计教程[M].西安:西安电子科技大学出版社,2008,2
[2]Shashikala Narasimha Murthy,Wendy Alvis,Rakesh Shirodkar,et al.Methodology for Imp lementation of UnmannedVehicle Control on FPGA Using System Generator[J].978-1-4244-1957-9/08/$25.00 2008 IEEE
[3]刘强.基于SystemC的系统级芯片设计方法研究[J].现代电子技术,1004-373X(2005)09-033-03
[4]张公礼.全数字接收机理论与技术[M].北京:科学出版社,2005,1
[5]Xilinx.System Generator Manual[Z]
[6]徐欣,于红旗,易凡,等.基于FPGA的嵌入式系统设计[M].北京:机械工业出版社,2005,1
[7]纪志成,陈娅冰,周治平.基于SG/Simulink无印直流电机混合建模与仿真研究[J].系统仿真学报,1004-731X(2005)03-0525-04
[8]陈永春.从Matlab/Simu link模型到代码实现[M].北京:清华大学出版社,2002,1