InSolver 求解器使用方法 教程
求解器使用的步骤如下,首先需要搭建基于电路拓扑的Simulink仿真模型,然后将该模型转换为用于部署到FPGA加速运算的bit文件,接着创建实时仿真模型并链接离线模型,最后即可完成实时运行。

在此教程中,将使用InSolver搭建一个三相并网逆变器的测试demo,来讲解使用流程,使用之前需要先安装Insrealm安装包以及Vivado2018.3。
为了方便,建议后续创建的模型都放在同一个文件夹下,由于下面的内容将讲解一个逆变器模型的搭建,因此我们创建一个文件夹,名字为inverter。
创建离线仿真模型
在matlab中进入前面创建的inverter文件夹。

接着点击simulink,并基于自带的空白模型创建一个新的模型即可。

接着按照逆变器的拓扑,使用黑库模型搭建离线仿真模型如下图所示,需要注意的是模型中要插入一个InSolver Config模块。

在之后的步骤中,我们会将此离线模型转换为FPGA比特流文件,其中需要注意以下几点。
- 模型中必须要有Ground节点。
- 模型中至少要有一个电感元件和一个电容元件。
- 模型中的元件的参数不能使用变量,需要填入具体的数值。
- 模型的电路部分使用
Simscape/specialized power system库的模块,或者使用Insrealm/insolver library中的模块,目前specialized power system库中支持的模块包括:
Source类:
- Three-Phase Programmable Voltage Source
- DC Voltage source
- AC Voltage source
- Controlled current source
- Ground
开关类:
- Half bridge
- Universal Bridge的mosfet模式(单相、两相、三相)
- Breaker
- Three-Phase Breaker
无源器件类:
- Series RLC
- Three-Phase Series RLC Branch
- Linear Transformer
- Three-Phase Transformer(Two Windings)
- Three-Phase Transformer(Three Windings)
测量类:
- Voltage Measurement
- Current Measurement
- Three-Phase V-I Measurement
可以添加相应的控制驱动模型,来检验离线模型搭建是否正确。确保离线仿真没有问题之后可以进入下一步骤。
自动生成bit文件
在离线仿真模型搭建完毕后,首先我们双击InSolver Config模块。这个模块是用来设置额定电压、额定电流和FPGA的步长的。其中,额定电压和额定电流值按照实际需求大概值即可(用于定点数定标,确保实际运行时电流电压不超过额定值的100倍,否则会出现数值溢出)。FPGA步长通常设置为50ns即可。综合模式有两种:Minimum step和Maximum capacity,分别用于实现最小仿真步长(纯并行仿真,无资源复用,仿真规模受限)和最大仿真规模(对资源进行时分复用,步长受限)。这里暂时使用Minimum step模式进行生成。
此外,可通过勾选 Advanced Settings 中的 embed InSolver Params 来使能修改电路参数的功能:若勾选该项,则代表不能修改电路参数,需要重新编译比特流文件;不勾选时,修改电路参数后只需点击 Update FPGA Model 按钮即可生效。

然后点击Generate Bitstream按钮,将会由模型文件直接生成verilog文件。转换结束之后,如果是首次运行,会弹出欢迎界面。此时点击Yes ,然后找到前面安装的vivado软件路径,填写在下图所示的输入框中,比如:C:\Xilinx\Vivado\2018.3

点击OK之后会弹出下图所示的界面。对所有的输入输出端口进行一定的映射。一般情况下,使用默认配置即可。表格中各列说明如下
port_name:端口名字port_type:端口类型,比如cpu, digital等data_type:端口的数据类型direction:端口方向,输入或者输出channel:硬件通道。- 此时需要通过点击
Plugins按钮来进行数字和模拟通道的映射。点击按钮后,在弹出的窗口中点击Add Instance按钮进行配置:数字信号需配置为di_mux,模拟信号需配置为ao_mux。需要注意的是,DI_NUM和AO_NUM参数不能修改,否则可能导致编译失败。

做好数字和模拟通道的映射后,在主界面选中相应的通道,点击鼠标右键即可进行通道的配置和清除,配置完成后点击 Process 按钮即可。

生成端口名规则
表格中的port_name由离线模型自动生成,主要包含三类
- 电源输入类
离线仿真中的所有电源都被转换为受控电压源,并接收外部信号的控制。其名字的命名规则为直流电压源会转换为Vdc开头,交流电压源会转换为Vac开头,再根据元件的后缀名字生成一定的后缀。
上图中的Vdc_0就是离线模型中的直流电压源,Vac_3p_0A, Vac_3p_0B,Vac_3p_0C就是三相的交流受控电压源。
- 桥臂IO输入类
离线仿真模型中的所有桥(包括Universal Bridge、ANPC等),都会自动产生相应维度的pwm输入端口,输入端口引脚信息可在FPGA Solver模块中查看。如上图所示的S_0_A_0就是指三相桥A相的上管PWM通道,以此类推。
- 信号输出类
离线仿真中的电压测量、电流测量,会生成相应的输出端口。其中电压测量生成的端口名前缀为Vm,电流测量生成的端口名前缀为Im,如上图所示。
开始编译
点击Process按钮,即可自动开始编译FPGA固件,Build Log会显示编译过程,并且提示编译进度。

完成综合之后,会弹出资源占用的窗口。如果使用的资源超过 80%,会导致比特流文件编译变慢;如果超过 100%,则会编译失败。

完成编译
当编译完成之后,将显示如下图所示的窗口。其中,WNS是FPGA中的时序约束结果,意思是最差的建立时间裕度,如果这个值大于0时,综合出来的结果才是正确的,否则表明编译失败,需要联系客户支持排查问题。

以上步骤完成之后,下面的步骤则需要搭建实时运行的模型,并导入此步骤中创建的模型文件,实现实时运行。
创建实时仿真模型
基于模板创建空白模型
实时模型运行时,电路部分可以用外部控制器来控制(需要连接对应的数字IO和模拟IO,并且设置数字IO的方向为输入);也可以由RTScale同时完成自己的控制(无需外部接线,将数字IO方向设置为输出即可)。
我们这里以RTScale中同时运行FPGA模型以及CPU控制模型为例,讲解使用流程。首先点击Simulink,然后选择RTScale CPU model template模板创建CPU模型。

添加FPGA模块并链接
然后在模型中添加FPGA Solver模块,选中该模块,点击INSREALM控件组的Link Solver(链接模型)按钮,选择前面步骤中搭建的离线仿真模型,FPGA Solver模块自动完成链接操作并生成相应的输入输出端口,可以在输出侧(out)接口后加一个 bus select 模块查看相应信号,如下图所示。

此时将输入输出的连线部分完善:
- 比如输入直流电压源通过一个
constant模块设置电压值 - 交流电压源可以通过sin wave模块设置正弦电压
- 输出则可以插入scope模块查看波形,也可以连接到控制环路上做闭环控制。
- 数字IO的输入输出,直接双击FPGA Solver进行通道的修改,比如这里把六个桥臂的信号引脚依次设置为1/2/3/4/5/6。pwm信号需要使用
insrealm/rtscale库中的PWM模块来产生PWM波,且需要设置pwm的输出引脚对应的1/2/3/4/5/6。
完整模型如下图所示,搭建了一个三相开环调试的模型,通过给定一个开环的abc调制电压信号,并将输出的调制波分别连接到PWM1控制A相桥臂,连接到PWM2控制B相桥臂以及连接到PWM3控制C相桥臂。而FPGA Solver模块则接受400V的直流电压输入以及三个正弦波作为三相电网电压输入。

除此之外还需要设置RTScale的数字IO引脚方向,在System模块中进行配置,如下图所示。RTScale带有50个双向IO,每5个IO一组,可以在GPIO Direction Setting里面配置为输入或者输出,下图代表GPIO1~GPIO30为输出,GPIO31~GPIO50为输入。需要注意的是,只有配置为输出引脚,PWM模块产生的信号才能连接到管脚上,否则接收来自外部控制器的信号。由于本教程中将使用自己控制自己的模式,因此保持下图配置即可。

实时运行
当模型搭建完成后,点击INSREALM插件下的Build for Monitoring(编译以监控)按钮,此时将执行模型的编译工作,由于此时编译的是纯CPU模型,因此大概只需要十几秒即可,当提示如下界面时表明编译成功。

此时点击connect连接模型,连接成功之后,右下角时间会显示T=0,等待运行模型。此时点击Start即可实时运行模型。

通过双击scope即可查看实时的三相电流波形,如下图所示。这里需要注意的是,由于模型本身的波形是在FPGA以50ns计算的,但是上传到CPU的采样率则没有这么高,默认为10k采样率(在system模块中设置上传速率,推荐不要设置太高,否则通讯量太大会导致波形断续,但不影响模型仿真计算)。因此下图所示的波形中看不到电感电流 纹波,只能看到平均值,这是正常的现象。如果需要看到真实的纹波,则需要借助示波器连接到DAC通道上进行观测。
