HDL代码自动生成模型设计
扫描二维码
随时随地手机看文章
引 言
面对我国航天型号任务发展与需求的快速变化,空间站、深空探测、北斗导航等软件密集型系统迅速扩大,智能化、网络化需求越来越多。由于系统复杂度提高,设计难度变大、周期变长、文档复杂度提高,代码规模的快速膨胀给设计和验证都带来了巨大的挑战。通常意义的软件又可以分为应用软件、嵌入式软件和可编程逻辑代码,现场可编程门阵列(FPGA)即是可编程逻辑代码的载体,FPGA因其设计周期短、并行处理能力强、稳定性好等优势,在系统中承担了越来越多的控制、算法、处理任务,相应的硬件描述语言HDL代码量也成倍甚至指数级增长。使用编程语言直接建模存在代码冗长和在不同设计阶段重新利用模型时很难更改的问题,在团队间用于交流的需求、技术规范、测试等其他文档也可能引起歧义和误解。
基于高层次抽象的建模和可综合的逻辑代码自动生成技术成为被重点关注和研究的领域。基于模型的设计方法从设计阶段进行系统建模,自顶而下展开设计,开发过程中迭代验证并通过工具实现代码自动生成,国外相关领域在上个世纪八十年代开始相关研究,相应的陆续有成熟的应用案例产生,涉及到航天、汽车、通信、医疗、大数据等各个领域,国内在近十年也开始开展基于模型的设计方法的理论研究和工程实践,但目前较多的成熟应用都是基于模型设计后自动生成C代码等嵌入式软件方面,由于现场可编程门阵列的特殊性,导致对自动代码生成有可综合性的要求,因此在自动生成HDL代码方面的应用还很有限。本文分析了国内外近几年基于模型的设计及HDL代码自动生成技术使用到的工具及工程应用情况,在调研了大量的理论、应用案例的基础上,总结了基于模型的设计自动生成的HDL代码和传统手动编写HDL代码的效率、优势,比较了较成熟的工具和方法,阐述了HDL代码自动生成的应用需求和现状,为航天型号系统开发设计人员开展相关工作提供参考。
01、基于模型设计的HDL代码自动生成技术应用需求
近年来,现场可编程门阵列(FPGA)被广泛应用于航空航天、汽车、通信、工业自动化、电机控制、医学成像等嵌入式应用领域。传统的FPGA上的数字设计实现依赖于硬件描述语言(VHDL和Verilog),并使用相应的工具生成FPGA目标代码。这种方法仍然是当今各行业应用中使用最广泛的方法。然而随着半导体技术的进步和系统复杂性的不断增加,代码规模指数级增长,给开发和验证工作都带来了巨大的挑战,基于模型的系统级设计方法成为更理想的选择。
传统的FPGA软件开发方法为算法工程师编写算法文档,程序员根据算法文档手写代码,代码完成之后下载到硬件中验证算法、软件是否正确,根据相关文献报道,有60%的错误是在编制技术规范阶段引入的,而这时能够发现的错误仅有8%,大部分的错误需要到测试阶段才能发现。系统设计过程中分为若干个阶段,每个阶段都会有对应的工程师,每个工程师在开发过程中会针对性地解决某几个关键的技术问题,当前系统的开发主要有以下几个方面的问题主要存在以下几方面问题:
1) 开发的盲目性:对系统实现细节缺乏把握的情况下已经完成的硬件电路的设计,此阶段无法明确先前的设计能否满足实际应用需求,而此时已经投入了较大的硬件成本。
2) 不同开发环节对文档的描述和理解的偏差问题:在设计开发过程中会涉及到大量用文字描述的文档。文字本身就是人对于一种事物,一个概念的抽象,难免不同工程师对于文字的理解出现差错,造成工程师之间产生分歧,从而导致整个系统的功能与实际目标功能出现偏差。
3) 手工编程会产生代码不可靠的问题:在设计后期集中测试过程中一旦测出问题,就很难排查是方案不理想还是软件代码编写的错误。手工编程费时费力,调试周期较长,开发风险很高;即使软件编程不存在问题,如果想要在后期修改方案,则又要开始新的一轮改进工作将耗费时间在软件的手工修改和调试上。
4) 设计缺陷发现过晚而产生重大损失的问题:设计过程中的缺陷发现得越早,则修正的难度越低,花费的成本越少。比如汽车的设计缺陷有可能给公司带来几亿甚至与上百亿美元的损失,而在汽车投放市场之前即可修正各种缺陷,那么可以将损失降低到最小。
5) 真实样件测试的高成本和低效率:成功开发一个产品必然要经过大量的测试和实验,需要大量的实验台架,而这些工作必然会花费大量的人力和金钱。产品中存在错误和缺陷往往是测试的不充分,因为有些情况在系统的实际工作中没有出现,出现了就是灾难性的,要在实验室条件下完成这些极端条件的测试,使得实验测试费用异常的昂贵,甚至于高达上亿美元。
为了很好的解决上述开发过程中遇到的问题,先进完善的开发流程起到了关键的作用。国外的控制系统开发的主流模式已由上世纪六七十年代的“瀑布式”开发流程过渡到了自上世纪八十年代才开始的“基于模型”的开发流程,且在各个行业推广开来。本世纪初,应用实施仿真系统运行大规模系统模型的开发测试模式开始普及,而国内的“基于模型”的开发模式和实施仿真技术同时自本世纪初开始起步,经过了十余年的推广,也被广大的企业和科研院所接受[9]。基于模型的设计通过早期验证,消除了在测试中发现的问题并回归修正,在开发的过程中进行持续验证,降低了最后系统集成后再进行测试的复杂性。当模型发生变化时,可以通过模型比对进行分析,提升了对需求变更的适应性,同时使变更点易于比对,降低了设计遗漏的可能性。
02、基于模型的设计
基于模型的设计流程,亦称为“V”模式,依托计算机辅助控制系统设计(CACSD:
Computer-Aided Control System Design),将计算机支持工具贯穿于控制系统开发测试的全过程。该流程以模型为核心,流程中每一个步骤的开展都依赖于模型,其中“V”代表着“Verification”(验证)和“Validation”(确认)。这样一套完整的系统开发流程,一般包含几个步骤:
图2-1 V流程设计步骤
从整个基于模型的现代控制系统设计开发流程看,主要有两大特点:
第一,以系统数学模型为核心,充分发挥仿真技术的优势。该流程可以分为离线仿真 → 快速原型 → 代码生成 → 半实物测试 → 标定,每一个步骤都依赖于系统模型。由于采用了仿真技术,控制器在实物测试之前所有的开发测试工作均可在虚拟环境下进行,在实验室条件下完成关键的开发测试工作。
第二,设计和确认至始至终贯穿于整个开发流程。该流程的每一个步骤中,开发和测试是并重的。每一个步骤中的开发成果只有经过完整可靠的测试才能进入下一步,将各种错误缺陷尽可能多的在早期发现,避免带入后期的开发环节。
其基本思想是让具体开发工作从编程转移到高级别的模型抽象中去,模型本身就是一个可执行的规格书,开发人员修改优化模型就是对设计的修改完善,同时可以开展设计验证,无须到编码实现之后再通过测试进行系统验证。由于具有图形化设计、早期验证、代码自动生成、文档自动化等优势,成为解决FPGA代码规模快速膨胀问题的手段。利用开发验证一体化套件及兼容的第三方工具能够完成基于模型的产品开发流程,包括建立基于需求的系统模型,并通过仿真验证和系统的设计,然后自动将模型生成代码,进行代码测试和软硬件集成后的系统级测试和验证。
03、HDL代码自动生成
通过对基于模型设计方法的分析,可以看到该方法中的重要一环就是将模型直接转换为可执行代码,把高级抽象语言描述的系统转换为可综合的逻辑代码是近年来被广泛研究的一个领域,目前有很多工具能够将C/C++和Matlab描述的模型或代码转换为VHDL和Verilog代码,工程师们可以很容易的通过这些工具从更高抽象层次的系统层面进行模型的设计和仿真,并生成代码。通过工具对模型的翻译自动生成代码有效的减少了人为引入的理解误差及错误实现的可能性,同时自动化的验证和确认使测试工程师能够开发完整的、基于需求并可在自动产生的代码上重用的测试用例。产品的代码生成和验证过程留给工具软件自动完成,可以大大缩短开发周期和成本,降低开发难度,并且软件的一致性好,软硬件整合简单,可靠性高。
目前市场上,建模工具和代码生成工具都很多,但能够提供一体化建模、仿真和代码生成解决方案的很少,能够生成FPGA可用的可综合逻辑代码的更少[6]。目前,HDL代码自动生成,常用的工具包括Catapult CSPARK、ROCCC and DWARV(C to VHDL)、Xilinx为MATLAB定制的System Generator、AccelDSP 等。这些方法非常受系统工程师的青睐,因为他们不必深入实际的硬件描述细节,可以从高级规范开始构建系统,把关注点更多的投入到系统设计上。
3.1 基于Matlab/Simulink的HDL代码自动生成
二十一世纪以来随着应用的不断深入,高速复杂控制系统开发的需求日益增大,因此FPGA和“模型”的联系越来越紧密。本世纪初Matlab便已应用于控制器的开发,利用模型的离线仿真来保证控制算法在设计初期就有较好的正确性[10]。之后Matlab工具软件对FPGA的支持力度日益增强,Mathworks和各大FPGA生产商合作推出了直接利用模型生成FPGA代码的System Generator(支持Xilinx公司FPGA)和DSP Builder(支持Ahera 公司 FPGA)等工具包很大程度上推进了FPGA在基于模型的设计流程中的使用率。从 2007年的Matlab2007a开始,Mathwork 提供了一个 Simulink 工具HDL Coder,可以实现从Simulink 模型生成可综合的HDL代码,并提供从模型到具体变量的追踪,实现代码控制,HDL Coder技术使FPGA和Matlab的配合使用更加广泛 ,相对于前面两种工具包,它摆脱了FPGA制造厂商的束缚,使软硬件接口更加通用化。
Matlab/Simulink基于模型设计的工具流程系统框图如图3-1所示。
图3-1 Matlab/Simulink基于模型的设计流程图
Simulink是建立在Matlab之上的系统级建模仿真基本环境,是一个图形化的建模工具,从某种意义上讲,凡是能够用数学方式描述的系统,都可以用Simulink建模,容易搭建的包括:通信系统物理层和数据链路层,控制系统,数字信号处理系统,动力学系统。Real-Time Workshop(RTW)是基于Simulink的目标代码生成工具。HDL Verifier是用于验证的工具套件,提供的验证功能主要关注在模型仿真与生成HDL代码的仿真结果一致性比对。在MATLAB开发环境中,要自动生成面向FPGA的目标代码,需要使用simulink搭建算法或者系统的模型,然后通过RTW或者RTW提供给第三方代码自动生成工具(如HDL Coder、Xilinx System Generator、Altera DSP Builder等)的开放接口。
3.2 基于UML/MARTE模型的VHDL代码生成方法
近年来,模型驱动设计和统一建模语言(UML :Unified Modeling Language)作为一种与平台无关的建模方法,在电子系统设计中得到了广泛的关注。现存的几种UML配置文件在UML级别建模硬件组件,并自动生成代码。其中实时和嵌入式系统的建模和分析[15](MARTE:Modeling and Analysis of Real-time and Embedded Systems),在UML图中使用了时序的属性。在实时嵌入式系统建模中最常用的UML图之一是序列图。序列图表示应用程序功能、不同组件之间的交互,并允许指定“时间不变量”。图3-2中为基于UML/MARTE建模、验证和代码生成流程。起点是UML/MARTE序列图,它描述了系统的行为(在组件之间的数据交换)和时序约束。从这个描述中,生成了SystemC/TLM和VHDL模型,包含检查约束的断言调用。因为序列图指定实体之间的数据交换,但不指定实体内部的处理代码;因此,生成的代码要用于仿真还需要链接到可用的知识产权(IP)核心库。仿真输入一组合适的测试台,并生成一个约束报告。验证过程产生的结果,一方面,将仿真中获得的新的信息反馈,用于细化UML模型及其约束。另一方面,将生成的VHDL代码合成为硬件组件(如FPGA),从而获得UML应用的实际实现。GenERTiCA工具支持从UML模型自动生成VHDL代码[6]。
图3-2 基于UML/MARTE建模、验证和代码生成流程
3.3 基于Web的VHDL代码自动生成工具DiaHDL[5]
DiaHDL是一款基于Web的VHDL代码自动生成工具,旨在寻找一种快速的直接方法,基于Web将可视化设计转换为可综合的VHDL代码,设计实现了特殊图形用户界面(GUI),允许用户选择数字组建、定制参数并生成VHDL代码,基于GUI的库包含基本数字器件,基本的门电路,也包括复杂的FIR滤波器和DCT,同时支持用户自定义的复杂电路系统。软件通过JAVA脚本提取VHDL代码参数。成功的案例包括图像的JPEG编码器等,完成从组件到比特文件的完整设计流程。图3-3是工具的用户界面截图。
图3-3 DiaHDL用户界面
04、基于Matlab/Simulink的建模和HDL代码自动生成应用现状
Matlab/Simulink是目前在对全流程支持最完整的一套工具,能够提供高性能动态系统的仿真、分析和测试,并能够完成从模型到代码的转换。通过图形界面和基于语言的方法,使系统设计变得灵活易懂,易于开发和测试人员设计和调试,在国内也有大量的技术支持并提供解决方案,因此本章节重点介绍基于Matlab/Simulink的建模和HDL代码自动生成应用技术。目前,基于Matlab/Simulink的模型驱动开发和HDL代码生成技术已成功应用于航天、航空、航海、医疗、电力、红外成像、固态存储、机器人控制等众多领域,具体应用包括无线数字收发器、音视频处理、编解码器、雷达信号处理、闪存控制器等,从原型设计到代码实现平均开发时间缩短50%,典型的成功应用情况如下:
1) Reutech 雷达系统公司采用基于模型的设计流程,开发舰载海空搜索雷达核心信号处理子系统,完成系统级的仿真,自动生成75,000多行HDL代码,节省了两个工程师人年,该雷达系统最后完成了探索性的海上试验。
2)美国的红外热成像技术领导企业FLIR在红外摄像机的热成像算法中应用了模型驱动开发的方法,从概念到现场可测试原型的时间减少了60%,重大算法更改从重新部署到代码实现,由几周缩短为几小时,HDL代码重用从零增加到30%。
3) Semtech通过基于模型的设计生成VHDL代码,加快了无线RF设备优化的数字接收器链的开发,验证时间从数周缩短为几天,并且最终交付的代码性能更佳。
4)日本半导体生产商Siglead使用HDL Coder从定点Simulink模型生成VHDL代码,并将其部署在Xilinx Spartan-6FPGA上,开发时间由4个月变为1个月,缩短了75%,设计迭代修改从三天变为三个多小时,设计人员能够把更多的时间花在富有成效的算法开发和探索优化设计上。
5)为了帮助心脏病学家检测脂质核心斑块LCP(患有LCP更容易罹患冠心病),红外线公司开发了TVC成像系统。美国的Infraredx使用Matlab/Simulink和HDL编码器加速TVC成像系统中IVUS信号和图像处理算法的开发和FPGA实现,自动生成的代码与手写的代码使用了相同数量的乘法器,同时使用的逻辑减少了9%,使用的内存减少了3%。
6) Philips Healthcare的工程师使用Simulink来建模由数字RF接收机、比较器、RF波形发生器和放大器组成的架构。引入基于模型的设计方案后,使设计问题能够早发现早解决,由于HDL Coder生成代码具有很好的规范性,使代码生成相对于手工编写代码的不一致性风险降低。
7)Renesas半导体的工程师为图像处理算法开发和实施采用了基于模型的设计,探索了多个设计优化和替代方案并生成了高效的HDL代码,该公司的工程师称:“在进行优化后,自动生成的代码与我们最好的手工编写代码相比,基本上具有相同的区域和速度特性。由 HDL Coder生成的HDL代码与手工编写的同等HDL代码相比,在120 MHz和275 MHz目标时钟频率上使用的资源稍微少一些。并且,通过使用Simulink和HDL Coder,早前没有硬件经验的工程师在大概六个月内学会了RTL设计。”
05、结论与展望
基于模型设计的HDL代码生成技术目前还有很多有待研究和解决的技术问题,包括模型的建立、与系统代码的融合、模型和自动生成代码的验证等等,虽然目前相关的方法和工具很多,比如Matlab/Simulink作为一套流程相对完整、友好的工具套件,已经在各个领域有了成功的应用案例,但是目前还存在很多应用的局限性,相信通过不断的学习和探索,并结合实际应用进行研究,一定能够基于模型设计的HDL代码自动生成技术使得到更广阔、深入的应用。