RTScale 产品使用手册数学模型教程(HDLCoder)

数学模型教程(HDLCoder) FPGA模型教程

本章介绍基于 HDLCoder 的 FPGA 模型开发流程,包括 HIL 模型搭建、RTL 代码生成、Bitstream 生成与实时运行四个步骤。通过本章,你将能在不掌握 FPGA 知识的前提下,把自己的数学模型部署到 FPGA 上实时运行。

📝 前言
对于 <1us 级别的仿真模型,比如电路本体仿真模型、电机本体仿真模型等,CPU仿真已经无法满足,因此需要使用FPGA进行模型并行计算加速,从而实现 <1us 的仿真步长。瞬迦基于HDLCoder工具开发了一整套适配RTScale的编译生成工具,仅需要简单的步骤即可实现FPGA模型搭建与仿真,无需用户掌握FPGA知识。

注意使用HDLCoder需要满足如下前置条件

  1. 预先安装Vivado 2018.3版本软件,其他版本不兼容
  2. matlab需要安装HDLCoder模块 完整的使用流程如下

用户需要先基于FPGA模板创建一个FPGA模型(非实时运行,仅用来生成FPGA的比特流文件),然后创建实时模型,并导入FPGA模块,连接端口实现实时运行。

首先启动simulink,选择FPGA模板。

然后模型外部为FPGA模型的输入和输出,内部则是需要用户按照需求自己搭建的数学模型,需要使用HDLCoder支持的基本模块来搭建。

搭建仿真模型之后,需要基于Simulink/HDLCoder支持的模型库搭建数学模型,有如下几点需要注意:

  1. 模型本身需要被放置到一个subsystem内部,并且按照需求创建对应的输入输出端口。
  2. 数据类型规则。
    1. 数据端口的数据类型位宽目前支持最大为32位,比如可以配置为fixdt(1,32,16),表示32位的有符号定点数,小数部分为16位,或者配置为single,即单精度浮点数
    2. 类型为boolean的输入端口将自动映射为digital input类型,可以分配DI (Digital input)端口。
    3. 类型为boolean的输出端口将自动映射为digital output类型,可以分配DO(Digital output)端口。
    4. 类型为 int16的输入端口将自动映射为adc类型,可以分配AI(ADC)端口
    5. 类型为 int16的输出端口将自动映射为dac类型,可以分配AO(DAC)端口。
  3. 由于FPGA模型有可能计算周期不是一个主频周期(10ns),为了防止在计算周期内模型输入发生变化,也为了保证模型输出在计算周期内部保持稳定,需要在模型所有的输入输出端口都添加 unit delay 模块,在子系统的顶层添加即可。
  4. 模型保存的路径不能太长,且不能含有中文路径。否则后续FPGA的比特流生成会出错。推荐路径长度(含模型名字)应该少于40个字符。

如下所示为永磁同步电机模型顶层,输入端口包含PWM输入、直流电压输入、工作模式、转矩输入,输出端口包含三相电流输出、角度、速度输出、电磁转矩输出。

内部模型如下所示:左侧为三相桥臂模型(内部为白盒模型,可以自行查看),接收PWM信号作为输入,产生三相桥臂电压作为输出。右侧为电机本体模型,以三相电压、转矩、运行模式作为输入,输出三相电流、电机角度与速度等。

如下图所示为电机本体模型

电机本体模型基于电方程,比如如下图所示为d轴电方程

d 轴电方程:Ld·did/dt = vd − R·id + Lq·p·ωr·iq

根据此方程即可搭建d轴的电方程模型

机械方程

机械方程:Te − TL = J·dωr/dt + RΩ·ωr

基于此方程即可搭建如下图所示的机械方程模型

其余部分模型可以自行打开进行查看。

模型搭建好了之后,可以在外围接入一定的控制信号以及激励信号。并且按照离线仿真的方式,点击Run看一下波形是否正确。

辅助信息显示设置

如下图所示,勾选调试/叠加信息下面的颜色时间图例基本数据类型等。

这样可以在模型上看到步长、数据类型等信息。如下图所示,右侧的时间图例就写明了每种步长对应的颜色。左侧模型中连线上面则写了数据类型。方便用户debug。

步长设置

由于此模型将运行在FPGA上,因此这里设置的步长为FPGA的仿真步长。与普通的模型仿真略有不同,FPGA的模型推荐使用rate transition模块来手动指定模型路径的步长。本模型中,我们通过rate transition模块设置仿真步长为100ns。

首先选中需要转换为HDL代码的模块,如下图所示。然后点击生成HDL(Generate HDL),等待HDLCoder的代码生成。

RTL代码生成结束之后,会弹框提示是否要继续生成bit文件,点是(yes)继续下一步

此时,第一次使用会弹窗提示输入vivado.bat的路径

需要安装Vivado2018.3版本,安装好后,填入vivado.bat的路径。比如:C:\Xilinx\Vivado\2018.3\bin\vivado.bat

点击OK之后会弹出下图所示的界面。用户只需要修改channel列即可,不需要引出至外部的端口,其channel选择N/A即可。

表格中各列说明如下

各类channel类型说明

配置完了之后点击右下角Process,即可开始bit生成。此过程视电脑性能,大概需要十几分钟到一个小时。综合过程中,命令行窗口中会打印综合过程中vivado软件的输出。

💡 综合过程注意事项
- 综合结束之后,弹出窗口显示综合之后的WNS(worst negative slack),如果这个值是负数,说明FPGA模型时序不满足,则需要调整模型来满足时序。一般造成这个的原因就是计算的链路太长了,可以考虑在适当的地方增加unit delay(即增加锁存器)来满足时序要求。

回到simulink,创建一个CPU模型(实时运行模型)。

保存模型之后,添加FPGA Solver模块,然后点击Link solver,选择刚刚搭建的simulink模型,程序会自动完成链接操作,并创建对应的输入和输出端口。

⚠️ 注意
需要注意的是,为了方便用户使用,实时模型中所有的端口的类型都使用double,并且在模型内部自动完成了类型与对应端口的转换,无需用户手动转换类型。

如下图所示,link之后根据模型的输入输出端口创建了相应的输入输出端口。

双击FPGA Solver模块,打开模块的引脚配置,这里配置三相桥臂PWM信号分别来自1~6通道

为了实现电机的闭环控制,我们可以在此模型中搭建控制算法模型,实现控制算法与电机本体模型同时仿真。如下图所示为我们的闭环控制模型。

如下图所示为FOC控制框图内部模型

点击编译,simulink将自动把模型翻译为可执行文件,随后点击connect连接模型,最后点击开始按钮启动模型。此时点击模型中的scope即可查看波形。

转速为500时的稳态波形:

转速从500加速到2000动态波形:

加载波形:

加速波形

本教程以永磁同步电机模型为例,完整介绍了基于HDLCoder的FPGA实时仿真模型开发流程,主要步骤包括:

  1. HIL模型搭建:基于FPGA模板,使用HDLCoder支持的基本模块搭建电机数学模型,注意数据类型、端口映射规则以及路径长度等限制,并通过离线仿真验证模型正确性。
  2. RTL代码生成:选中目标模块,一键生成HDL代码。
  3. Bitstream生成:配置端口通道映射后,调用Vivado自动完成综合与比特流生成,注意检查综合后的WNS时序指标。
  4. 实时仿真运行:创建CPU实时模型,通过FPGA Solver模块链接FPGA模型,搭建控制算法,实现闭环实时仿真。

整个流程无需用户掌握FPGA开发知识,即可实现高精度模型实时仿真。

ℹ️ 技术支持
使用过程中如遇到任何问题,请联系瞬迦技术支持。