高 峰,周永川
(中国电子科技集团公司第五十四研究所,河北 石家庄 050081)
在目前的大规模集成电路设计中,系统级设计和逻辑设计往往是分开进行的。系统设计人员使用诸如C/C++、Matlab、COSSAP、SPW等系统设计语言和软件进行系统描述和算法仿真,并书写系统设计书,然后移交给电路设计部门。电路设计人员,首先要花大量的时间理解系统设计书后,才能利用VHDL或者Verilog HDL硬件描述语言进行电路设计。根据有关统计从系统级设计到电路级设计所花费的时间一般是系统级设计所花时间的3倍左右。因此在系统级设计与电路级设计之间架设一座桥梁已经成为电路设计领域极为迫切的任务。对于片上系统设计而言,除了上述问题以外,还面对着如何处理嵌入式CPU或DSP与大规模逻辑电路的软硬件协同设计问题。由于CPU或DSP多用C/C++或汇编语言来仿真和验证,而逻辑电路则使用VHDL或者Verilog-HDL硬件描述语言进行仿真和验证。因此,需要2种不同的仿真工具和仿真环境来支持设计工作。这2种不同的仿真和验证环境,不仅增加了设计周期和设计成本,而且容易造成设计错误。
为了实现系统级与电路级设计的融合,同时解决硬软件协同设计问题,最好的办法是寻求一个既能兼容系统级设计和逻辑设计,又能兼容逻辑电路软硬件仿真与验证的综合集成环境。基于MATLAB集成环境下的多EDA软件联合设计便可以很好地解决这个问题。
MATLAB结合第3方软硬件产品组成了在不同领域内的完整解决方案,实现了从算法开发到实时仿真再到代码生成与最终产品实现的完整过程。
主要的典型应用包括:
控制系统的应用与开发——快速控制原型与硬件在回路仿真的统一平台dSPACE;
信号处理系统的设计与开发——全系统仿真与快速原型验证,TI DSP、Lyrtech等信号处理产品软硬件平台;
通信系统设计与开发——结合RadioLab 3G和Candence等产品;
机电一体化设计与开发——全系统的联合仿真,结合Easy 5、Adams等。
MATLAB开放的产品体系使MATLAB成为了诸多领域的开发首选软件,并且,MATLAB还具有300余家第3方合作伙伴,分布在科学计算、机械动力、化工、计算机通讯、汽车、金融等领域。接口方式包括了联合建模、数据共享、开发流程衔接等等。
传统的DSP系统开发人员在设计一个DSP系统时,一般先研究算法,再使用MATLAB或C语言验证算法,最后由硬件工程师在FPGA或DSP上实现并验证。在MATLAB集成环境下使用多EDA软件的典型DSP系统设计流程如下:
①用数学语言描述算法;②设计环境中使用双精度数实现算法;③将双精度运算变为定点运算;④将设计转换为有效的硬件描述语言实现。
设计人员先在MATLAB中对系统进行建模和算法验证,经过仿真后便可以直接将系统映射为基于FPGA的底层硬件实现方案。可用Simulink提供的图形化环境对系统进行建模,代码转换工具可自动生成FPGA综合、仿真和实现工具所需的命令文件,因此用户可以在图形化环境中完成系统模型的硬件开发。
1.2.1 建模
Simulink、Stateflow和Simulink Blocksets提供了一个集成的交互图形化动态建模环境。强大的仿真能力能够对离散、连续、条件执行、事件驱动、多速率、混杂系统等进行分析。通过使用Simulink、Stateflow、DSP Blocksets,可以快速、准确地仿真系统中每一部分的行为,包括实时DSP算法,数字、模拟和混合信号处理硬件,控制逻辑,通信协议和同步循环,还可以考虑信道、声学和其他物理效应。利用Simulink可视化的建模方式,可迅速地建立动态系统的框图模型,Simulink的分级建模能力使得体积庞大,结构复杂的模型构建也简便易行。
1.2.2 实时仿真[1,2]
为了完成仿真的实时性,要用到一个Simulink的配套工具 Real-Time Workshop(RTW),它和C或C++编译器编译,可将程序生成独立于MATLAB环境的应用程序,运行到实时的工业过程中。Real-Time Windows Target使用一个很小的实时内核来保证它开发出来的应用程序可以实时运行。实时核心运行在Ring0级,使用内置PC时钟作为它的时钟来源,该内核在Windows获取之前截取PC时钟的中断,程序无法调用Windows系统提供的函数。正因如此,在C语言S函数中不允许使用Win32 API。内核使用时钟中断触发已编译模型执行,并能唯实时应用程序最高的优先级。
利用Simulink及其工具集运行仿真模型,调试控制参数。Simulink的示波器可以动画和图形显示数据,能够在仿真运算进行时监视仿真结果。
1.2.3 代码生成
在MATLAB产品族中,自动化的代码生成工具主要有Real-Time Workshop(RTW)和Stateflow Coder,这2种代码生成工具可以直接将Simulink的模型框图和Stateflow的状态图转换成高效优化的程序代码。利用RTW生成的代码简洁、可靠、易读。目前RTW支持生成标准的C语言代码,并且具备了生成其他语言代码的能力。整个代码的生成、编译以及相应的目标下载过程都可以自动完成的,用户需要做的仅仅使用鼠标点击几个按钮即可。MathWorks公司针对不同的实时或非实时操作系统平台,开发了相应的目标选项,配合不同的软硬件系统,可以完成快速控制原型(Rapid Control Prototype)开发、硬件在回路的实时仿真(Hardware-in-Loop)、产品代码生成等工作。另外,MATLAB开放性的可扩充体系允许用户开发自定义的嵌入式系统目标,利用Real-Time Workshop Embedded Coder能够直接将Simulink的模型转变成效率优化的产品级代码。代码不仅可以是浮点的,还可以是定点的。
对于FPGA设计,Xilinx公司的System Generator和Altera公司的DSP Builder允许用户建立位真实、周期精确的IP模型,将浮点模型调整为定点模型并在FPGA模块上实现这些模型。然后,所得的HDL将直接进入后序的综合流程。System Generator和DSP Builder软件是由MathWorks分别与Xilinx公司和Altera公司合作开发而成,DSP设计人员可使用MATLAB和Simulink工具在FPGA内进行开发和仿真来完善DSP设计。该2种软件为系统级DSP设计与FPGA硬件实现的融合起到了桥梁作用,而这一点对于高性能DSP系统的设计者来说,正是至关重要的。
另外,用户可以使用FDATool或命令行函数调用的方式来设计滤波器,然后利用Filter Design HDL Coder来生成VHDL或Verilog代码。Filter Design HDL Coder扩充了MATLAB的硬件实现能力。在Filter Design Toolbox中设计的定点滤波器利用FilterDesign HDL Coder可以生成有效的、可综合和可移植的VHDL、Verilog代码,这些代码可以最终在ASIC和FPGA芯片上实现。利用Filter DesignHDL Coder同样可以自动生成用于快速仿真、测试和验证生成代码的VHDL、Verilog、ModelSim测试基准程序。
Link for ModelSim可以和Xilinx System Generator或Altera DSP Builder协同工作。这意味着你可以使用Xilinx System Generator以及Altera DSP Builder来完成你的部分系统设计。因此你可以在一个完整的环境下进行 MATLAB、C/C++、Simulink blocks、自己设计的HDL实体、以及Xilinx System Generator所提供的模块或Altera DSP Builder blocks所提供模块的联合仿真。Link for ModelSim是一个把MATLAB、Simulink和针对FPGA、ASIC的硬件设计流程无缝连结起来的联合仿真的接口扩展模块。它提供一个快速的双向连接将MATLAB、Simulink和硬件描述语言仿真器Modelsim连接起来。使二者之间直接的联合仿真成为可能,并且让你更高效地在MATLAB/Simulink中验证ModelSim中的寄存器传输级(RTL)模型。
为了更加清楚地说明MATLAB环境下多EDA软件联合设计的优势,下面结合工程实践,介绍一个数字上变频器(DUC)的FPGA开发实例。设计在Simulink环境下建模、仿真、代码生成,自动调用System Generator软件、ISE软件,大大节省了开发时间[3]。
设计用System Generator实现DUC,DUC是调用Xilinx公司开发的IP Core。在Simulink环境下创建的模型如图1所示。
图1 DUC的Simulink模型框图
信号源是由正弦波发生器提供一个低频率的单频信号,它是由MATLAB/Simulink本身提供的,不属于Xilinx模块。信号源之后使Gateway In模块,它将浮点数转换成指定宽度的定点数,因为FPGA里面不能直接实现浮点运算。中间是Xilinx的DUC IP Core,主要是完成数字上变频的功能,也是进行代码转换的对象。Gateway Out模块的作用刚好与Gateway In模块的作用相反,是将定点数转换成Simulink能识别的浮点数,以便将信号送往示波器上显示。最后一级是信宿和示波器,主要是对上变频后的信号进行时域波形显示和频谱分析。
运行Simulink进行仿真,可以看到输出的波形及其频谱图,如图2所示。图2所示信号是将100kHz信号上变频到10MHz的结果。
图2 DUC变换后的频谱图
确认DUC在Simulink环境下的仿真结果正确后,就可以通过System Generator生成已创建模型的VHDL等项目文件。用ISE软件打开生成的工程,分别执行翻译后仿真、映射后仿真、布局布线后仿真,在Modelsim窗口中可以看到,3个进程仿真后的结果与期待响应是完全匹配的,即System Generator生成的VHDL代码经过综合、翻译、映射和布局布线后得到的FPGA实现完全能实现Simulink模型的功能。确认布局布线没有出现错误后,生成FPGA编程文件,下载到硬件电路后验证,结果是正确的。
MATLAB是全球使用最广泛的算法开发产品之一,它长期服务于自己的领域,与EDA和硬件实现相距甚远。但随着它的开发商MathWorks公司与第3方供应商携手合作将MATLAB带入FPGA和ASIC设计领域,这种状况正在发生改变,MATLAB正迈向电子设计自动化的领域。
[1]边新迎,刘亮,刘君.基于MATLAB环境的实时仿真研究[J].微计算机信息,2006(22):250-252.
[2]史维佳,何鹏举,李杰.Matlab/RTW实时仿真与嵌入式系统开发[J].单片机与嵌入式系统应用,2009(10):42-44.
[3]陈春章,艾霞,王国雄.数字集成电路物理设计[M].北京:科学出版社,2008.