Simulink代码生成技术详解
17.1 基于模型的设计
基于模型设计是一种流程,较之传统软件开发流程而言,使开发者能够更快捷、更高效地进行开发。适用范围包括汽车电子信号处理、控制系统、通信行业和半导体行业。
V字模型开发流程整体描述:
模型本身就是一个可执行的规划书,开发者修改优化模型就是对设计的修缮,修缮之时立刻可以进行设计的验证,无需到编码实现之后通过测试再进行系统验证。
使用基于模型设计流程开发软件有以下优势:
- 在整个项目开发过程中使用统一的设计环境;
- 可以直接将需求与设计链接起来,易于对比变更点,降低设计遗漏的可能性;
- 将测试集成到设计中以持续验证并纠正错误;
- 通过多域仿真优化算法;
- 自动产生嵌入式软件代码;
- 开发标准模块库便于重用;
- 自动生成文档;
- 支持针对硬件目标的设计重用。
17.1.1 需求文档
Requirements for a fast filter
1. Two input
One for signal input and the other for filter coefficient.
2. One output
The output for signals filterd by the filter.
3. Title
There should be a title in the model.
4. Alogrithm
The calculation equation should be display in the model.
17.1.2 根据需求进行设计
17.1.3 需求与设计的挂接
通常需求文档使用Word或者Doors管理,MATLAB为了能将设计规划书与模型关联起来,通过rmi setup注册Active-X controls后Simulink Model菜单栏增加了需求追踪功能,通过这个功能追加Simulink链接到需求设计规划书的Word文档中,在每一项需求设计条目后都会出现Simulink的小图标,能够从需求文档链接到模型;可通过链接检查需求变更是否及时反映到所设计的模型中,以保持设计文档和模型的一致性。
17.1.4 模型的仿真
17.1.5 模型的性能分析及修正
使用模型生成代码,特别是产品级代码生成时,所用模型必须按照特定规则进行审查。在工业自动化生产、汽车电子开发过程中,随着模型复杂度的提高,人工检查模型属性、配置及对于MAAB标准的遵守度逐渐成为负担,使用Simulink工具栏中的Model Advisor工具可以自动进行标准及模型参数配置和属性的检查,并产生检查报告。
检查的内容有:
- 是否会导致系统仿真出错;
- 是否会导致生成的代码无效;
- 生成的代码是否符合安全标准。
17.1.6 模型效率分析与优化
使用Profile Report了解模型每个环节的时间消耗和各种子方法的调用次数。
17.1.7 模型的代码生成
Simulink的Simulink Coder工具箱提供了将模型转换为可优化的嵌入式C代码的功能,将模型的信号源和信号接收部分模块替换为输入/输出端口,系统文件使用ert.tlc,负责统筹调用代码生成的整个过程,将模块转换为相应的C代码,只不过这时的C代码并非专门面向某种嵌入式芯片的,而是未经过优化的通用性嵌入式代码,可读性不强。
17.1.8 模型生成代码的优化
Simulink的Embedded Coder工具箱提供了两方面的优化,一是通过对信号线的存储类型进行设置改变代码生成时的变量生成方式,二是通过结构化的思想将算法模型构成一个原子子系统,并将代码生成在指定文件的指定函数内,便于移植或重用。
17.1.9 代码的有效性验证
Processor In the Loop Simulation(PILS,处理器在环仿真)提供了验证算法有效性的方法。
17.2 Simulink代码生成流程及技巧
在Simulink环境中,嵌入式代码是由Embedded Coder、Simulink Coder为主导,MATLAB Coder辅助器进行生成代码优化。主要应用目标为嵌入式MCU,片上快速原型开发板,以及应用于民生电子、工业领域的MCU微处理器等。
17.2.1 代码生成时的模型配置方法
example.slx
Configuration Parameter中集中管理着模型的代码生成方法、格式等约束条件。为了生成嵌入式代码,至少需要配置3部分:解算器Solver、系统目标文件(如ert.tlc)、硬件实现规定Hardware Implementation。
solver
解算器必须采用固定点类型,没有连续状态时可选discrete,步长默认为auto,在简单通用嵌入式代码生成过程中此参数没有实际作用。
当模型中使用参数变量,如Gain的增益值,在生成代码是,如果希望使用该参数的值直接展开到代码中,就需要设置参数内联选项,在Code Generation→Optimization中有Default parameter behavior选项。
可调:
P_example_T example_P = {
5.0 /* Variable: k
* Referenced by: '<Root>/Gain'
*/
};
void example_step(void)
{
example_Y.Out1 = (example_P.k * example_U.In1 + example_U.In2) * example_U.In3;
}
内联:(此时缺少model_data.c文件)
void example_step(void)
{
example_Y.Out1 = (5.0 * example_U.In1 + example_U.In2) * example_U.In3;
}
当选择Inlined后,代码生成时模型的参数将以常数方式直接生成到代码逻辑中,不再以一个参数变量的形式生成。当模型中的参数需要作为实时可以调节的参数生成到代码中时,选择Tunable,参数将作为变量生成。如果不需要实时调节参数,可以选择节省存储空间的方式Inlined。
MATLAB2014a中该选项以勾选框的形式给出。
Hardware Implementation
Hardware Implementation选项是规定目标硬件规格的选项。在这个选项卡中可以配置芯片的厂商和类型,设置芯片的字长、字节顺序等。
另一个关键的设置选项是控制整个代码生成过程的系统目标文件System Target File,ert.tlc文件是Embedded Coder提供的能够生成专门用于嵌入式系统C代码的系统目标文件。在Code Generation页面中的Browser按钮可以选择系统目标文件。
Code Generation对比:
另外2018a拥有搜索功能:
Report
在Report子标签中有关于生成代码报告的页面,通过勾选框可以选择是否在模型编译结束后自动打开。
在Advanced parameters中可以选择是否在代码报告中追加模型与代码的双向追踪,并选择追踪的内容
勾选Metrics中的Static code metrics时,将会在代码生成报告中包含静态代码的参数指标。