![c8edb60bfbe25ca9c61b50000fdf1f80.png](https://i-blog.csdnimg.cn/blog_migrate/951e787cfd2ea3f3f25c5e6ee438afd1.jpeg)
1. FPGA是什么?
- FPGA(现场可编程门阵列):Field Programmable Gate Array, 可重复编程的芯片。
- 集成逻辑模块和可编辑的布线资源, FPGA以特定的方式配置,实现特定硬件功能;而无需要设计新的PCB板。
- 基于Verilog或VHDL硬件描述语言开发,以硬件电路方式运行“程序”。
- 主要应用在通讯、信号处理及超高速仿真中。
![87cbdcfb0e71f7f680d1633ebc41dd7a.png](https://i-blog.csdnimg.cn/blog_migrate/08438d7d73831885ed7019d7f52cfedb.jpeg)
2. 实时仿真为什么需要FPGA板卡
FPGA板卡提供了两部分的资源:
- 计算资源。FPGA包含了大量的逻辑单元,可通过编程将这些逻辑单元组合成复杂的算法并运行。从这个层面而言,FPGA本身就是一个类似CPU的处理器,只是它的特性与CPU不太一样,两者擅长不同类别的计算。
- 接口资源。计算资源是做计算用,不能与外部的设备交互。FPGA也提供了接口资源,用于和外部设备交互。这些接口资源包括:模拟输入通道、模拟输出通道、数字通道、MGT(Multi-Gigabit Transceiver)等。
![2e344f8e802df3625437e0a3d2cd1faf.png](https://i-blog.csdnimg.cn/blog_migrate/235d070ae711907864f6df3380d774cf.jpeg)
实时仿真可能因为如下两个原因需要FPGA:
- 需要FPGA的接口资源。FPGA的数字通道可以通过编程实现PWM in/out、SENT、SPI、I2C、Serial、电机位置传感器模拟/解析等功能。如果在一些应用需求中,需要多种上述接口,那么使用FPGA来实现会比使用专用芯片更加灵活而且便宜。另外,对于有些用户,他可能需要一套设备来去覆盖多种应用,比如应用1需要多个Serial串口通道,应用2需要SPI和I2C通道,应用3需要PWM输出和电机传感器解析通道,那么传统的方法中可能需要多块专用的板卡去实现所有的这些通道;但如果用FPGA,可能只需要一块FPGA板卡就可分时满足这所有的通道,通过编程可以在做不同应用时让FPGA提供满足对应功能的通道。
- 需要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](https://i-blog.csdnimg.cn/blog_migrate/7074f6a20b766a006e2a273847a203fd.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.comSpeedgoat可编程的FPGA方案正是:用户按照传统的Simulink建模方式搭建模型,调用MATLAB的HDL Coder将Simuink模型生成VHDL或Verilog代码,然后综合部署到Speedgoat实时仿真系统中的FPGA板卡上。有没有发现这种开发方式最大的特点:
从头到尾,竟然无需编写一行代码!
![f8dc1505526c3310f3dc0d647c10ac84.png](https://i-blog.csdnimg.cn/blog_migrate/34f0d0e740e80e99a2259d0ad312dfed.png)
这个方案用简便的Simulink建模方式代替了晦涩的硬件描述语言编程方式,使得FPGA算法开发回归到了我们熟悉的Simulink建模。
![8a27b61587277e9cc915f7d6e90d6c4a.png](https://i-blog.csdnimg.cn/blog_migrate/544ee3ef45dee5bf63266041d7b038be.jpeg)
开发环境就是上图的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](https://i-blog.csdnimg.cn/blog_migrate/00e9e528642f13d209799149b8776797.jpeg)
针对电机控制器硬件在环仿真的应用,可以配置成如下接口,这些接口包括PWM信号采集、光电编码器模拟等,如下图。
![b4217babf45052af9dd58daf72712505.png](https://i-blog.csdnimg.cn/blog_migrate/e384958410cc2df75950a3ee4745941c.jpeg)
对于I2C通讯的应用,还可以配置成如下图。
![f67fb7e88c1b889dbb40272ba417cfa3.png](https://i-blog.csdnimg.cn/blog_migrate/7ad56977b9709509e8c4293c07f7e5f8.jpeg)
上面三种配置的接口,实际上都是在同一块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公司工程师编程。