ar编码matlab仿真_实时仿真之FPGA篇 | Speedgoat的可编程FPGA方案和可配置FPGA方案

c8edb60bfbe25ca9c61b50000fdf1f80.png

1. FPGA是什么?

  • FPGA(现场可编程门阵列):Field Programmable Gate Array, 可重复编程的芯片。
  • 集成逻辑模块和可编辑的布线资源, FPGA以特定的方式配置,实现特定硬件功能;而无需要设计新的PCB板。
  • 基于Verilog或VHDL硬件描述语言开发,以硬件电路方式运行“程序”。
  • 主要应用在通讯、信号处理及超高速仿真中。

87cbdcfb0e71f7f680d1633ebc41dd7a.png

2. 实时仿真为什么需要FPGA板卡

FPGA板卡提供了两部分的资源:

  1. 计算资源。FPGA包含了大量的逻辑单元,可通过编程将这些逻辑单元组合成复杂的算法并运行。从这个层面而言,FPGA本身就是一个类似CPU的处理器,只是它的特性与CPU不太一样,两者擅长不同类别的计算。
  2. 接口资源。计算资源是做计算用,不能与外部的设备交互。FPGA也提供了接口资源,用于和外部设备交互。这些接口资源包括:模拟输入通道、模拟输出通道、数字通道、MGT(Multi-Gigabit Transceiver)等。

2e344f8e802df3625437e0a3d2cd1faf.png

实时仿真可能因为如下两个原因需要FPGA:

  1. 需要FPGA的接口资源。FPGA的数字通道可以通过编程实现PWM in/out、SENT、SPI、I2C、Serial、电机位置传感器模拟/解析等功能。如果在一些应用需求中,需要多种上述接口,那么使用FPGA来实现会比使用专用芯片更加灵活而且便宜。另外,对于有些用户,他可能需要一套设备来去覆盖多种应用,比如应用1需要多个Serial串口通道,应用2需要SPI和I2C通道,应用3需要PWM输出和电机传感器解析通道,那么传统的方法中可能需要多块专用的板卡去实现所有的这些通道;但如果用FPGA,可能只需要一块FPGA板卡就可分时满足这所有的通道,通过编程可以在做不同应用时让FPGA提供满足对应功能的通道。
  2. 需要FPGA的计算资源。CPU因为本身的特性,导致它在实时仿真时的计算速度不可能那么快,一般适用于亚微秒级及毫秒级的应用。对于常规的实时仿真,CPU的计算资源以及计算速度都足够了,不需要专门配备FPGA板卡。对于高速应用,比如电力电子系统的仿真,模型的计算步长在微秒级甚至更小,这时候CPU就无能为力了,而需要FPGA来执行这样的高速计算任务

3. 实时仿真中,FPGA怎么用

有些朋友会有疑问,有了FPGA之后,是不是实时仿真硬件中就不需要CPU了?实际上不是。对于一些应用,会把高速的和低速的模型进行拆分,高速部分运行在FPGA,低速部分运行在CPU,这样也可以减轻FPGA的计算负担。还有一些应用,所有的运算都在FPGA执行,但是像实时在线调参、观测信号、记录数据等功能还是需要运行在CPU中,只是这种情况下,就没必要配备高性能的CPU了,一个低性能的CPU就足以满足需求了。所以一般而言,在实时仿真中,即便配备了FPGA板卡,还是会有CPU,CPU和FPGA共存,而且两者之间会通过总线交互数据。

然后我们正式回归到最核心的部分,实时仿真中的FPGA怎么用。对于CPU,我们可以通过C++/MATLAB/Python等语言进行开发。对于FPGA开发,我们采用的编程语言是HDL( Hardware Description Language,硬件描述语言),典型的HDL是Verilog和VHDL

c6c938bc104b4909ffde72903159f40d.png

FPGA开发,就是通过HDL编程的形式去调用FPGA中的各种资源以构建我们需要的算法或模型。在这方面,Speedgoat提供了两种解决方案帮助用户在实时仿真中使用FPGA。这两种解决方案是可编程的FPGA方案和可配置的FPGA方案,前者是使用一种独特的方法帮助用户非常方便地进行FPGA开发,后者是比前者还要方便的一种方法去使用FPGA。

4. 可编程的FPGA方案

使用硬件描述语言去进行FPGA编程是一件难度不小的事情,因为大多数人熟悉C++/MATLAB/Python等编程语言,但是不熟悉VHDL或者Verilog。纯粹用硬件描述语言编程地方式去进行FPGA开发,不仅入门难度高,而且开发效率并不高。

大部分的学生和工程师都熟悉MATLAB/Simulink,那么我们能不能通过MATLAB/Simulink来进行FPGA编程或者开发呢?答案是可以!

我们可以借鉴下用MATLAB/Simulink进行CPU开发的方式——MBD(Model Based Development,基于模型的开发方式)。我们用Simulink搭建算法模型,然后通过MATLAB Coder、Simulink Coder、Embeded Coder等代码生成工具将Simulink模型生成代码,然后下载运行到CPU中。

那么对于FPGA,我们也可以采用类似的方法,相当于是FPGA开发的MBD模式,MATLAB专门提供了一个叫HDL Coder的代码生成工具来完成这个事情。关于HDL Coder,墙裂推荐观看以下视频——MathWorks HDL Coder产品负责人赵志宏经理的演讲《从MATLAB到FPGA: 视频和图像处理》。

从MATLAB到FPGA: 视频和图像处理 - 视频​www.mathworks.com

Speedgoat可编程的FPGA方案正是:用户按照传统的Simulink建模方式搭建模型,调用MATLAB的HDL Coder将Simuink模型生成VHDL或Verilog代码,然后综合部署到Speedgoat实时仿真系统中的FPGA板卡上。有没有发现这种开发方式最大的特点:

从头到尾,竟然无需编写一行代码!

f8dc1505526c3310f3dc0d647c10ac84.png

这个方案用简便的Simulink建模方式代替了晦涩的硬件描述语言编程方式,使得FPGA算法开发回归到了我们熟悉的Simulink建模

8a27b61587277e9cc915f7d6e90d6c4a.png

开发环境就是上图的Simulink,这样的FPGA开发方式是不是很嗨嗨皮皮??!!

5. 可配置的FPGA方案

第二节中我们提到,实时仿真需要FPGA,可能是因为需要FPGA的计算资源或者接口资源。上文提到的可编程FPGA的方案,适用于用户需要做FPGA开发,即需要把相关的算法或者模型运行在FPGA中,比如电力电子的硬件在环仿真,需要把电力电子模型在FPGA中高速运行,这就是实时仿真需要FPGA的计算资源的典型案例。

但是对于其他的一些应用,用户需要的不是FPGA的计算资源,而是FPGA灵活的接口资源。这些应用包括但不仅限于:

  • 用户同时需要PWM in/out、SENT、SPI、I2C、Serial、电机位置传感器模拟/解析等多种接口,如果使用专用芯片去实现,那么可能需要多块专用芯片,成本较高。而如果使用FPGA,可能只需要1块FPGA板卡就可以解决,性价比高。
  • 用户可能需要一套设备来去覆盖多种应用,比如应用1需要多个Serial串口通道,应用2需要SPI通道,应用3需要PWM输出和电机传感器解析通道,那么传统的方法中可能需要多块专用的板卡去实现所有的这些通道;但如果用FPGA,可能只需要一块FPGA板卡就可分时满足这所有的通道,通过编程可以在做不同应用时让FPGA提供满足对应功能的通道
  • 用户当前的使用需求是确定的,但是未来可能会承接新的项目,会有新的接口需求,如果使用FPGA板卡,当遇到未来的需求时,可以通过编程实现不同的接口来满足对应的应用。

对于上述的这些应用,用户不需要做第四节提到的FPGA开发,不需要把算法/模型运行在FPGA中,但是他需要FPGA灵活的接口。这种情况下,如果再让客户去使用可编程的FPGA方案,明显是大材小用、耗时费力。

针对这种需求,Speedgoat提供了可配置的FPGA解决方案:用户提提出接口需求,由Speedgoat公司工程师进行FPGA编程来实现对应的接口功能,编程的结果是以位流文件(bitstream file)的形式交付给用户,用户只要在Speedgoat提供的Simulink驱动模块中加载该位流文件,就可以获得对应的接口功能。在这个方案中,最大的特点就是:

用户主要工作是提接口需求,由Speedgoat编程实现该接口需求,用户无需做FPGA相关的编程或者建模

所以相比可编程的FPGA方案,可配置的FPGA方案让客户更省事,客户连进行FPGA相关的Simulink建模也不需要了,主要工作就是提接口需求。

以Speedgoat的一款资源较少的FPGA板卡为例,它有14个数字通道,这14个数字通道可以由Speedgoat编程提供位流文件来实现不同的接口功能。

比如针对电机控制的应用,可以配置成如下接口,这些接口包括PWM输出、光电编码器解析等,如下图。

d6160b11b12fd57f0e27c4e093c79748.png

针对电机控制器硬件在环仿真的应用,可以配置成如下接口,这些接口包括PWM信号采集、光电编码器模拟等,如下图。

b4217babf45052af9dd58daf72712505.png

对于I2C通讯的应用,还可以配置成如下图。

f67fb7e88c1b889dbb40272ba417cfa3.png

上面三种配置的接口,实际上都是在同一块FPGA板卡上实现的,FPGA灵活的特性使得它能够实现多种多样的接口功能。

6. 小结

  • 可编程的FPGA方案需要使用到FPGA的计算资源和接口资源;可配置的FPGA方案几乎只使用FPGA的接口资源。所以在使用可编程FPGA方案时,用户会把模型/算法部署到FPGA运行;而使用可配置的FPGA方案时,模型/算法是运行在CPU中。
  • 同一张FPGA板卡,可以做成可编程的方案,也可以做成可配置的方案,只是大部分情况下,计算资源多的FPGA板卡会做成可编程方案,计算资源少的FPGA板卡会做成可配置方案。
  • 可编程的FPGA方案,用户自己用过Simulink搭建算法/模型,最终这些算法/模型运行在FPGA,适合对计算速度有较高要求的应用。
  • 可编程的FPGA方案,结合MATLAB的HDL Coder,用Simulink建模的方式实现FPGA开发,用户无需编程。
  • 可配置的FPGA方案,用户主要用FPGA的接口资源,用户提接口需求,由Speedgoat公司编程实现这些接口功能。
  • 可配置的的FPGA方案,接口灵活,适用于对接口丰富程度要求高以及希望一张FPGA板卡覆盖多个需求以及考虑覆盖未来需求的应用。
  • 无论是可编程的FPGA方案还是可配置的FPGA,都是需要编程的,只是可编程方案是由用户自己编程,可配置的方案是由Speedgoat公司工程师编程
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值