时间:2024-12-22
卞永明,申睿章
(同济大学 机械与能源工程学院,上海 201804)
当前嵌入式系统的传统开发方式中,对于高级RISC微处理器(Advanced RISC Microprocessor,ARM)平台无论是直接操作寄存器还是使用官方提供的库函数,都是利用标准C/C++语言编写源代码,然后经C/C++编译器、汇编器和链接器进行编译链接,最后生成目标可执行代码.对于现场可编程门阵列(Field-Programmable Gate Array,FPGA)平台也需先编写VHDL/Verilog HDL硬件描述语言,然后经仿真综合、布局布线和比特流生成.ARM和FPGA的传统开发方法需开发者手工编制对应规范的嵌入式系统产品代码,增大了产品开发难度,延长了产品的开发周期,从而影响了开发效率.
基于模型的设计方法是一种设计复杂系统的可视化方法,其核心技术是代码自动生成技术.采用MATLAB进行算法开发、系统建模和仿真验证,可以方便地修改模型设计,能够在产品设计的早期阶段评估产品的工作性能,发现设计缺陷并能够及时纠正,避免在开发后期发现问题而造成更大的损失.该方法可以避免传统方式下手写代码难度大、效率低、错误多的弊病,带来更低的研发成本、更短的研发周期和更高的产品质量.
本文采用MATLAB对车灯控制系统进行系统建模、算法开发和仿真,并分别在以ARM和FPGA为核心的硬件平台中验证.
基于模型的开发流程如图1所示.确定需求后,在MATLAB/Simulink平台下搭建系统模型(.mdl),仿真满意后通过MATLAB生成工程文件代码 (.c.h 或 hdl),在 集 成 开 发 环 境 (Integrated Development Environment,IDE)中进一步完成代码的编译、链接,或综合、实现,生成可执行的文件(.hex或.elf),最后下载到目标板上运行验证.
图1 基于模型的开发流程Fig.1 Model-based development process
设计一个控制软件,用于控制轿车车厢灯.用车门的状态(开门或关门)来控制轿车车灯的状态(灯亮或灯灭).
系统功能要求:
(1)当一个或多个车站被打开时,车厢灯被点亮.
(2)在车厢里有一个手动开关,可以选择如下3种亮灯模式:① 灯暗模式——门开时灯也不会亮;② 门模式——由门的传感器决定灯是否亮;③灯亮模式——灯被点亮.
(3)当车门从外面锁上时,关灯.
系统建模、算法开发和仿真均使用MATLAB2011a,其中针对ARM平台MATLAB需正确安装RapidSTM32模块集.RapidSTM32是一种针对STM32系列微控制器开发的Simulink目标模块库和设备驱动程序的工具套件[1-2].STM32系列微控制器基于ARM Cortex-M3内核,是一款专为嵌入式应用而开发的内核,具有高性能、低成本、低功耗的特点.
ARM与FPGA开发平台的比较如表1所示.
系统建模使用MATLAB中的Simulink与Stateflow模块.Simulink是 MATLAB最重要的组件之一,它提供一个动态系统建模、仿真和综合分析的集成环境.在该环境中,无需大量书写程序,而只需要通过简单直观的鼠标操作,就可构造出复杂的系统.Stateflow是有限状态机的图形工具,它可以用于解决复杂的逻辑问题,用户可以通过图形化工具实现在不同状态之间的转换.Stateflow可以直接嵌入到Simulink仿真模型中,并且在仿真的初始化阶段,Simulink会把Stateflow绘制的逻辑图形通过编译程序转换成C语言,使二者有机地结合在一起.
表1 ARM与FPGA开发平台比较Tab.1 ARM and FPGA development platform
完整的模型如图2所示,分别使用两个脉冲发生器来模拟锁门(解锁)和开门(关门)的动作.脉冲发生器1的周期为20ms,脉冲宽度为10ms,延迟设为5ms;脉冲发生器2的周期为10ms,脉冲宽度为5ms,延迟设为3ms.由于状态图中定义的锁门(LockDoor)、开门(OpenDoor)为布尔型变量,故采用数据类型转换(Data Type Conversion)模块对数据类型进行转换.
图2 仿真模型Fig.2 Simulation model
模型中Chart(Stateflow的状态图)用图形化的方式完成控制系统的内部逻辑,如图3所示.状态图可分解为3大模块:车门控制模块(DoorControl)完成对车门的有关控制;开关模式控制模块(SwitchControl)对手动开关的状态识别,判断系统的当前模式;灯控制模块(LightControl)完成车灯开关状态的切换.
在仿真的过程中,系统运行的当前状态会高亮显示,方便检查逻辑是否正确[3].图4为将手动开关置于门模式时的仿真输出波形.电平为1表示高,电平为0表示低.由输出波形可观察到,当车门未锁并打开时灯亮,当车锁或车门关闭灯不亮,这符合控制逻辑.
图3 状态图Fig.3 StateFlow Chart
图4 测试输出波形Fig.4 Output waveform
在传统的开发流程中,算法经仿真验证可行后,需由人工用C语言或硬件描述语言重新在硬件上实现,加大了工作量,延长了开发周期.但在基于模型的设计中,可由上述仿真模型自动生成代码[4].
仿真通过后,将控制输入与输出用实际目标板所使用的硬件端口替换,设置系统时钟等参数,建立如图5所示的模型.主要工作是定义对应硬件平台的输入、输出端口和系统工作的时钟频率.
自动代码生成之前需针对硬件平台配置代码生 成 (Code Generation),进 入 Simulink 的Simulink Configuration Parameters,单 击 Code Generation进入配置界面.具体配置如下:
图5 与ARM硬件相关联的模型Fig.5 real hardware model for ARM
图6 自动生成的ARM工程文件Fig.6 ARM project file automatically generated
在Code Generation界面点击Build.Matlab将根据设置自动生成STM32相关源文件与链接文件.
在MDK软件中新建工程并添加上述生成的代码,直接编译、链接,即生成可在目标板执行HEX文件.下载HEX到目标板上,测试通过.
同理对于FPGA平台,在仿真模型中进入Simulink的仿真配置参数(Simulink Configuration Parameters),单击 HDL 代 码 生 成 (HDL Code Generation)进入配置界面.具体配置如下:
选定生成代码的目标文件夹,单击Generate即可在指定目录生成.v和.do文件.
上述模型生成的.v文件可以直接加入FPGA工程中使用,.do文件可用于modelsim仿真.在Quartus II中建立工程,经检验可行.
通过实验验证了应用MATLAB软件进行系统建模,并在此基础上进行程序开发的可行性.其优势如下:
首先,设计者可以利用SIMULINK友好的可视化建模环境和MATLAB强大的仿真功能对设计的系统进行建模仿真验证,降低了应用门槛.
其次,经过仿真验证的算法不需使用手工重新编码,减少了重复劳动,工程师可以将主要精力放在模型的建立上而不是代码的编写上,提升了效率,节省了时间.
第三,同一模型可针对不同硬件平台生成对应代码,软件设计可与硬件设计同步并行开发,提高了设计的灵活性.
[1]余新栓.基于MATLAB的STM32软件快速开发方法[J].单片机与嵌入式系统应用,2011,11(10):46-48.
YU Xinshuan.Rapid development of STM32software based on MATLAB modeling[J].Microcontrollers & Embedded Systems,2011,11(10):46-48.
[2]高炜,张江滨.基于Simulink与硬件的实时数据采集系统的实现[J].电网与清洁能源,2012,28(3):36-39.
GAO Wei,ZHANG Jiangbin.Realization of real-time data acquisition system based on Simulink and hardware[J].Advances of Power System & Hydroelectric Engineering,2012,28(3):36-39.
[3]张威.Stateflow逻辑系统建模[M].西安:西安电子科技大学出版社,2007.
ZHANG Wei.Stateflow logic system modeling[M].Xi’an:Xidian University Press,2007.
[4]胥京宇.消除隔阂,提升效率——MATHWORKS推出基于MATLAB生成HDL代码的产品[J].世界电子元器件,2012(5):66-67.
XU Jingyu.Eliminate barriers,improve efficiency—The MATHWORKS launched generate HDL code based on MATLAB[J].Global Electronics China,2012(5):66-67.
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!