建模和仿真如何将算法开发和SoC设计集成在一起

由Mark芯和Eric Cigan,Mathworks


在本文中,您将了解建模如何帮助一个算法和嵌入式软件工程师小组设计一个电机控制算法,并在可编程的片上系统(SoC)上实现它。我们是这个团队的嵌入式工程师。我们将展示建模如何帮助我们划分设计、平衡功能行为与实现资源,以及在实验室中进行测试。

Xilinx等可编程SOC®Zynq.®soc和英特尔®同一芯片中可编程逻辑和微处理器核心组合的SOC FPGA具有设计团队在各种应用中进行算署的新平台,包括嵌入式视觉,通信和电动机和电力电子设备。这些设计团队通常包括两类工程师:算法工程师,负责概念开发和基于数学或基于规则的算法的制定,以及嵌入式工程师,负责在嵌入式设备上的软件或硬件中实现它们的算法和实现它们。

算法工程师通常在开发过程中常用于型号,以获得信心,即他们的算法在功能上是正确的应用。另一方面,嵌入式工程师并不总是看到建模的好处。但是,当这些团队无法紧密合作时,结果可以延迟错误检测,导致项目延迟;资源过多;或由于设计和测试迭代不足而受到损害的功能。

我们开始研究建模是否可以帮助算法和嵌入式工程师创造一个更高效和协作的设计过程。我们想专注于建模算法组件,我们可以使用仿真来探索。我们将使用模拟来帮助我们做出划分决策,使用模拟和代码生成来平衡功能行为与实现资源,并自动集成和部署生成的代码和手工代码,以更有效地利用实验时间。

建议的工作流程

我们提出了一个工作流,它是由模型和手工代码生成的代码的混合。(在整篇文章中,我们将把设计的手工编码部分称为参考设计.)我们将从算法开发人员提供的模型开始,并通过添加实现细节来迭代地细化模型。在每个迭代中,我们将模拟系统行为,确保功能算法模型的正确性,实现与代码生成算法,获得代码,表现得像模型,然后用我们的参考设计自动化集成确保硬件实现一个可重复的过程(图1)。

图1开发和部署电机控制算法到SoC的工作流

选择硬件平台

在本案例研究中,我们决定使用磁场定向控制(FOC)算法为永磁同步电机设计一个速度控制器,然后将其部署到Zynq-7000 All Programmable SoC Intelligent Drives Kit II上(图2)。我们选择电机控制,是因为这是一个算法工程和嵌入式工程师经常需要协同工作的应用。我们之所以选择Zynq Intelligent Drives Kit II,是因为它提供了我们所需的I/O支持。万博1manbetx

图2。Zynq智能驱动套件II,可选测功系统(来自Avnet Electronics Marketing)。

Zynq Intelligent Drives Kit II是工程师用来测试在Zynq Z-7020 SoC设备上运行的电机控制算法的开发平台。基于ZedBoard开发板,该工具包包括一个模拟设备FMC电机控制模块和24V无刷直流电机,配备1,250 cycles/revolution编码器。因为我们想要在一系列的操作条件下测试电机控制算法,我们使用了Zynq智能驱动套件II和一个可选的测功系统。

分区算法组件

在选择硬件平台后,我们审查了算法工程师提供的初始系统仿真模型,并识别了部署到SoC所需的附加算法组件。该模型包括基于数据表参数的电机的控制器算法。该算法由外部速度控制回路组成,使用FOC调节内部电流控制回路。

虽然该模型捕获了控制器的核心数学,但没有考虑外设(如ADC、编码器和PWM)或其他操作模式(Disabled, Open Loop, and encoder Calibration)所需的算法组件的影响。我们与算法工程师一起确定要对哪些算法组件建模,并决定是在ARM上实现这些组件,还是在SoC上实现可编程逻辑(图3)。

图3。算法组件的划分。

我们详细说明了初始系统模型以包括新算法组件(图4)。为了启用系统仿真,我们创建了与电机模型交互的现有外设的集成参数模型。例如,我们对编码器外设进行了现有的HDL代码,我们计划在部署的设计中重用。编码器外设读取50 MHz的数字脉冲流,并将它们转换为25 kHz的控制器算法读取的计数信号。如果我们直接建模了该脉冲流,我们将在系统模型中引入50 MHz动态,并显着提高模拟时间。相反,我们创建了一个编码器的集成参数模型,该参数模型将理想的转子位置从电机模型转换为由算法组件看到的编码器计数信号。在此级别的保真度下建模使我们能够模拟测试编码器校准部件所需的启动条件以及引入位置量化效果,以测试速度控制部件(图5),同时保持合理的模拟时间。

图4.系统仿真模型。
图5。系统仿真结果用于编码器的标定和速度指令的步进。

如果需要几千赫或更低的速率,我们选择在ARM上实现算法组件。由于我们计划运行Linux,所以设置了几个kHz速率的限制®手臂上的操作系统。需要更快的速率的算法组件将在FPGA上实现。

我们希望尽可能在ARM上实现算法组件,因为我们发现在ARM上的设计迭代比在FPGA上更快。将算法定位到ARM核心更容易,因为它支持本地浮点数学运算。万博1manbetx大多数fpga执行浮点运算效率很低,因此针对可编程逻辑需要额外的步骤将算法转换为定点。此外,我们发现编译ARM的C代码的过程通常比编译FPGA的HDL代码要快。

我们使用仿真来确定算法组件是否能够以ARM足够慢的速度执行,或者是否需要FPGA。例如,算法工程师最初提出了一个以25khz运行的编码器校准程序,该程序必须在FPGA上实现。我们通过仿真测试是否可以在1khz下运行编码器校准组件,发现可以,并决定在ARM上实现。

平衡功能行为和实现资源

一旦我们具有所需的组件率的功能正确的模型,我们将用于C代码的所有组件分组为算法C模型和用于HDL代码生成的所有组件到算法HDL模型中(图6)。然后,我们将实现细节迭代地添加到模型和生成的代码,直到我们觉得它会在可接受的内存量内符合,并在组件速率下执行。

图6。用于C和HDL代码生成的控制器算法模型。

我们使用嵌入式编码器®从算法C模型生成C代码,并生成汇总调用接口和估计数据内存使用情况的报告。在查看报告时,我们意识到所有的数据类型都是双精度浮点数。我们希望连接到FPGA的数据是整数或固定点,其余的数学运算是单精度浮点数。我们将这些数据类型应用到模型中,使用仿真来验证行为仍然是可接受的,然后生成改进的代码。此时,我们确信代码适合在ARM上实现。

我们将算法HDL模型实现为固定点,因为固定点操作在fpga上消耗的资源更少。为了实现这一点,我们与算法工程师合作,在设计中识别和限定关键信号范围(电流、电压和速度),然后使用Fixed-Point Designer™定义定点数据类型,以确保计算不会溢出。我们使用HDL Coder™生成代码和摘要报告。

我们回顾了报告的资源估计部分,以确定似乎出乎意料的大的数学运算。例如,我们最初对单词长度的选择导致两个34位数字的多次乘法,我们认为这将不必要地消耗FPGA资源。我们能够在资源利用报告中识别这个问题,降低模型中的精度,使用仿真来验证功能仍然是正确的,然后生成改进的代码。我们使用Xilinx Vivado®设计套件来合成代码并验证它满足时间要求。

实验室测试

一旦我们有了候选算法实现,我们就准备将其与参考设计集成起来。首先,我们手工将生成的C函数与手工编码的ARM嵌入式项目集成,并将生成的HDL实体与手工编码的Vivado项目集成。然而,我们意识到如果我们总是手动执行集成,我们将需要参与实验室中的每个设计迭代。我们使用这个工作流的目标之一是让算法工程师在实验室中自动化集成和部署过程。

我们使用了Xilinx Zynq-7000平万博1manbetx台的HDL编码器支持包,将我们的手工编码的Vivado项目注册为参考设计。然后,我们能够使用我们的手代码进行自动化生成的算法HDL代码的集成,构建比特流,并将其下载到FPGA。我们使用eMbedded编码器支持包为Xilinx Z万博1manbetxynq-7000平台进行自动化生成的算法C代码与Linux操作系统的集成,构建可执行文件,将其下载到ARM,并从Simulink与其交互万博1manbetx®。支持包提万博1manbetx供了AXI互连,使ARM核心中的算法组件和可编程逻辑之间能够通信。

在初始系统设置期间,算法和嵌入式工程师在实验室中共同工作是至关重要的。作为嵌入式工程师,我们必须设置部署配置,并与算法工程师一起验证基本功能。一旦系统建立起来,算法工程师就可以使用Simulink作为SoC的主要接口独立地进行设计迭代。万博1manbetx

算法工程师测试了部署的控制器,并确定它没有提供预期的响应。仿真结果与硬件结果的比较表明,我们错误地计算了ADC计数到电流的映射。算法工程师创建了额外的测试,以更好地表征电机的扭矩常数,并改善仿真和硬件之间的相关性(图7)。

图7。仿真结果与硬件结果的比较。

仿真和硬件测试结果之间的高度相关性让我们有信心在模型级别做出设计决策,并进一步减少实验时间。例如,在实验室中,马达一度在旋转,但在某些条件下变得无法控制。我们推测这个问题与FPGA上实现的定点速度计算中的溢出有关。我们在模拟中复制了这个问题,并在关于电机最大速度的初始假设中发现了一个缺陷。我们能够在模拟中调试和解决问题,只使用实验室时间来验证更改。

这种方法的好处

这里描述的工作流使我们能够更有效地与算法工程师一起工作。通过仿真,我们评估了算法划分对系统性能的影响,并验证了编码器标定组件可以从速率较高的可编程逻辑分区移动到速率较低的ARM分区。

模拟还允许我们在保持函数行为的同时做出节约实现资源的决定,例如减少可编程逻辑中数学操作的字长,或者将要通过axis互连从浮点数据类型转换为定点数据类型的数据转换。最后,我们在实验室的原型测试帮助我们识别ADC计数到电流的映射错误,并使我们的算法工程师能够进行进一步的测试,以表征电机的扭矩常数。

总的来说,工作流支持了我们和算法工程师之间的万博1manbetx密切合作,产生了更有效的实现,同时节省了实验室时间。

想知道更多吗?

有关本文中描述的工作流的更多细节,请查看永磁同步电机的磁场定向控制。该Zynq电机控制示例包括Simulink模型和MATLAB万博1manbetx®在我们的研究中用于运行模拟、生成代码、测试硬件,并将模拟运行与硬件测试结果进行比较的脚本。

如果您对电机控制算法的原型感兴趣,或者想重现本文和示例中显示的结果,请了解更多关于Avnet Zynq Intelligent Drives Kit II来自安万特电子营销。

要将Zynq电机控制示例扩展到不同的硬件配置或Xilinx或英特尔的不同类别的SoC fpga,请参阅示例定义和注册SoC工作流的自定义板和参考设计

为了进一步了解如何生产与Simulink使用的PMSM和无刷直流电机的精确模型,回顾这篇文章万博1manbetx建立电机高保真模型用于控制系统的设计与验证

发布于2016 - 92977v00