开发控制系统的中小型团队
与第一类开发者相比,第二类团队所开发的产品相对简单,团队规模相对较小,涉及的行业包括工业自动化和机械、计算机、办公设备、消费品、仪器、医疗、加工业等。Jim表示,这类团队通常不使用模型来进行开发,在开发过程中,像FPGA和DSP算法的开发、控制系统、机械元部件及电子设备的设计等通常用手工代码实现(见图3)。随着系统复杂度的增加,使控制系统正常工作的难度也变得越来越大。
图3 开发控制系统的中小型团队的传统开发流程
Jim介绍说:“复杂度的增加意味着系统中的机械部分变得更加复杂,因此需要更复杂的控制器。而团队要根据系统规范直接对微控制器或PLC进行手工编程,并在样机或真实系统中手动调节控制器算法,这些工作将变得越来越难以完成。最后,系统很可能会在系统集成时出现问题,导致投资回报率下降。”
对这类公司来说,早期验证就意味着系统级建模,通过建模对整个系统进行仿真,并紧密联系系统需求。通过对环境、逻辑、电子和机械部件以及算法的建模,开发者就可以利用模型准确反映需求规范,由此产生的可执行规范即可代替传统的文档。这样,规范的改变可以很快反应出来,并在早期验证阶段完成迭代和测试。而且,开发团队还能够重复利用现有的设计和来自于CAE工具(例如CAD、FEA和SPICE模型)的现有工程数据(见图4)。
图4 采用系统建模的方法对整个系统进行仿真
此外,Jim还指出,一旦模型建立完成,开发者就可以把模型作为测试平台,在此基础上进行硬件仿真及其它测试。既可以从控制算法模型中自动生成代码以测试实时行为,也可以从组件和环境模型中生成代码以测试实际的微控制器、FPGA或PLC的行为。
图5 实时测试
算法集中的信号处理、图像处理以及通信系统设计者
第三类团队属于算法集中型团队,通常使用MATLAB进行算法研究,但在设计系统时却会根据不同的部分采用完全独立的流程,如开发模拟硬件时采用SPICE,开发数字硬件FPGA和ASIC时采用VHDL及Verilog,而开发嵌入式MCU/DSP软件时采用C/C++代码(见图6)。他们涉及的领域包括通信、电子、半导体、计算机、医疗和航空航天。
图6 信号处理、图像处理及通信系统的开发
Jim指出,这类团队所面临的挑战并不集中在单独的流程当中,而在于系统级的整合上,缺少系统级的仿真会导致系统整合出现一些潜在的问题。由于研究和实际设计的脱节,他们在开发时会遇到的挑战包括:算法在真实系统中没有起到预期作用;组件设计工程师没有足够的应用领域的背景知识;软件、数字和模拟工程师使用不同的工具和工作流程;工程师不得不花费50%或更多时间在编写验证代码上,很多错误也只能在系统集成测试时才被发现。
早期验证对这些客户来说就意味着在更高的抽象级别上进行系统设计,这表示需要把各种不同级别的设计,如EDA设计、模拟设计等整合到一个抽象的模型上,在此基础上建立一个更加完整的系统规范。在原型设计之前,团队需要对各个模型(包括操作环境、逻辑、模拟、RF、数字、算法等模型)进行仿真,并利用这个完整的测试环境来进行系统集成测试或单独模块的测试。单个组件的工程师只需要在这个基础上不断细化模型,就可以精确仿真各个组件对系统的影响。而且,这些组件可以将现有的MATLAB、C/C++以及HDL IP集成到Simulink模型中,令系统工程师尽早发现到错误。这就是所谓的多域系统验证(见图7)。
图7 多域系统验证
此外,基于模型的设计还能够将算法设计与软硬件实现的工作流程集成到一起,实现早期算法验证,帮助系统设计达到事半功倍的效果(见图8)。The MathWorks公司提供了一系列的工具来予以支持。比如,用户可以在MATLAB中开发算法的黄金参考模型;在MATLAB或Simulink中开发测试激励(平台)并验证实现;还可以利用多款Link系列工具箱 (如 Embedded IDE Link CC, EDA Simulator Link MQ)实现与业界主流的嵌入式IDE、HDL仿真器、模拟仿真器的联合仿真;以及使用PolySpace系列产品进行代码的可靠性验证。
图8 早期算法验证