新书预告
由小梅哥编写,Intel FPGA大学计划经理推荐,骏龙科技大力支持的基于Intel SoC FPGA 器件的设计和开发教程已经上线预售,京东天猫均已上架,欢迎小伙伴围观。
得益于Intel SoC FPGA差异化的器件结构设计,当设计者掌握了其中一种器件的开发方法后,即可类比应用到其他系列的器件上。在满足设计需求的同时,合理选择功耗、成本和性能平衡的器件应用到实际系统中。作为SoC FPGA家族中功耗和成本最具优势的系列,掌握Cyclone V SoC FPGA的开发方法,不仅可以熟悉整个SoC FPGA系列器件的开发流程,还可以学有所用。很多没有实际高端应用需求的读者,也能够将Cyclone V SoC FPGA作为一个简单的ARM+FPGA二合一的产品进行使用,因此本书以Cyclone V SoC FPGA器件为基础进行讲解。
Intel Cyclone VSoC FPGA是英特尔FPGA部门(原Altera)于2013年发布的一款在单一芯片上集成了双核的ARM Cortex-A9处理器和现场可编程逻辑门阵列(FPGA)的新型SoC芯片。相较于传统的仅有ARM处理器或FPGA的嵌入式芯片,Intel Cyclone V SoC FPGA既拥有ARM处理器灵活高效的数据运算和事务处理能力,又拥有FPGA的高速并行数据处理优势。同时,基于两者独特的片上互联结构,设计者在使用时可以将FPGA上的通用逻辑资源经过配置,映射为ARM处理器的一个或多个具有特定功能的外设,并通过高达128位位宽的AXI高速总线进行通信以完成控制命令和高速数据的交互。
在SoC FPGA技术推出之前,各大FPGA厂家已经推广了十多年的SOPC技术。从架构角度来说,SOPC和SoC FPGA是统一的,都是使用FPGA和CPU共同完成系统的设计。但是与SoC FPGA不相同的是,SOPC是在单纯的FPGA芯片上使用FPGA的可编程逻辑资源和嵌入式存储器资源搭建一个软核CPU系统,由该软核CPU实现所需处理器的完整功能,该CPU是由FPGA通用逻辑资源和存储器通过配置实现的,其本质依旧只是一个复杂的FPGA设计模块。
得益于FPGA的现场可配置特性,使用FPGA的通用逻辑资源搭建的CPU,在结构资源上具有一定的灵活性。用户可以根据自己的需求对CPU进行定制裁剪,增加一些专用功能,例如除法或浮点运算单元,用于提升CPU在某些专用运算方面的性能。或者删除一些在系统中使用不到的功能,以节约逻辑资源。另外用户也可以根据自己的实际需求,为CPU添加各种标准或定制的外设,例如UART,SPI,I2C等标准接口外设,或者编写各种专用的外设,然后连接到CPU总线上,由CPU进行控制,以实现软硬件的协同工作。基于该结构的设计在保证系统性能的同时,增加了系统的灵活性。另外,如果单个软核CPU无法满足用户需求,则可以添加多个CPU软核,搭建多核系统,通过多核CPU协同工作,让系统拥有更加灵活便捷的控制和运算能力。
但是,由于CPU是使用FPGA的通用逻辑资源搭建的,所以相较使用经过布局布线优化的硬核处理器来说,软核处理器够运行的最高时钟主频要低一些,而且搭建软核CPU也会消耗较多的FPGA逻辑资源以及片上存储器资源。因此SOPC方案仅适用于对处理器整体性能要求不高的应用,例如整个系统的初始化配置、人机交互、多个功能模块间的协调控制等方面。
从架构的角度来说,SOPC和SoC FPGA是统一的,都是由FPGA和处理器组成。在SoC FPGA 中,嵌入的是ARM公司32位的Cortex-A9硬核处理器,简称HPS(Hardware Processor System)。而SOPC技术中,嵌入的是由Intel自己开发的32位NIOS II 软核处理器,两者指令集与处理器性能均有差异。Cortex-A9硬核处理器性能远远高于NIOS II 软核处理器。
Cyclone V SoCFPGA 片上的HPS部分,不仅集成了双核的Cortex-A9硬核处理器,还集成了各种高性能外设,如MMU、DDR3控制器、NAND FLASH控制器等,有这些外设,HPS部分就可以运行成熟的Linux操作系统,提供统一的系统API,降低开发者的软件开发难度。而NIOS II软核CPU虽然可以通过配置,用逻辑资源来搭建相应的控制器以支持相应功能,但是从性能和开发难度上来说,无法与之媲美。因此,采用基于SoC FPGA架构进行设计开发是比较好的选择。
此外,虽然SoC FPGA芯片上既包含了有ARM,又包含了有FPGA,但是两者一定程度上是相互独立的,SoC芯片上的ARM处理器核并非是包含于FPGA逻辑单元内部的,而是与FPGA一同封装到同一个芯片中,JTAG接口、电源引脚和外设的接口引脚都是独立的。因此,如果使用SoC FPGA芯片进行设计,即使不用片上的ARM处理器,ARM处理器部分占用的芯片资源也无法释放出来,不能用作通用的FPGA资源。而SOPC则是使用FPGA通用逻辑和存储器资源搭建的CPU,当不使用CPU时,CPU占用的资源可以被释放,重新用作通用FPGA资源。
嵌入式处理器开发人员面对的一个最大挑战就是如何选择一个满足应用要求的处理器。现在已有数百种嵌入式处理器,每种处理器都具备一组不同的外设、存储器、接口和性能特性,用户很难做出一个合理的选择:要么为了匹配实际应用所需的外设和接口要求而不得不选择在某些性能上多余的处理器;要么为了保持成本的需求而达不到原先预计的理想方案。
在SoC FPGA架构出现之前,一般的嵌入式系统通常使用各种处理器或单片机作为系统核心,如基于ARM架构的CPU、基于因特尔X86架构的CPU、基于IBM PowerPC架构的CPU等。这些处理器的最大局限在于其芯片上的外设数量是确定的,一旦选定一款特定的处理器,则其本身能够提供的各种功能也就确定了,例如选择S3C2410这款处理器,则该芯片本身有且仅有3个UART串口,当系统所需的串口数量大于3个时,不得不采用另外的方法来扩展实现,例如使用各种串口扩展芯片。另外,由于这些处理器芯片片上外设功能都是固定的,仅支持在一定程度上设置其工作模式,所以无法实现非常灵活的个性化定制,例如S3C2410处理器的片上UART控制器带有16个字节的FIFO缓冲,但是在某些大数据量的应用中,希望有更大容量的FIFO来满足功能开发需求,则片上的UART控制器不能完全满足要求,只能通过软件的方式处理。
由于SoC FPGA由于芯片上包含现场可编程逻辑门阵列,可以根据实际应用需求设计相应的逻辑电路,如带有256个字节的FIFO的UART控制器。得益于SoC FPGA芯片上FPGA和HPS部分独特的高速互联架构,FPGA侧设计的功能电路可以直接连接到HPS的总线上,从而映射为HPS的一个外设,由HPS对其进行读/写操作,该操作就像处理器操作本身片上含有的外设一样简单方便。
相较于传统的硬件功能固定的处理器,SoC FPGA能够突破硬件功能的限制,实现定制化的片上系统。
FPGA作为一种可以随时更改其实现的逻辑电路功能的器件,在高速并行数据处理方面有天然的优势。由于FPGA实现的是硬件逻辑功能,其执行效率相较于使用程序指令实现功能的处理器来说要高很多,例如执行3个数据的乘加运算,FPGA可以使用两个乘法器和一个加法器,在一个时钟周期内完成运算并输出结果,而CPU则可能需要将将该操作拆分成1条乘加指令和1条乘法指令,即使高性能的CPU,也需要2个指令周期才能完成该操作。同时,FPGA也可以利用功能复制的方式,在一个芯片上实现大量相同的功能,例如设计好一个高速数据采集+FIR数字滤波功能模块,然后可以直接将其例化多次,实现一个高速多路数据采集处理系统。
然而,单独的FPGA设计的系统也有其不足之处,由于FPGA实现功能都是通过功能固定的逻辑电路实现的,那么当应用中需要灵活的控制和人机交互或者复杂的以太网协议通信时,使用FPGA实现就会有较大的难度,即使使用复杂的状态机能够勉强实现功能,也面临着功能固定、修改难度大的问题。例如在上述多路采集系统之中,当需要将多路采集到的数据在液晶显示屏上绘制为波形,或者使用TCP/IP协议传输到远端服务器时,单纯的FPGA就难以胜任了,而ARM处理器,尤其是运行了嵌入式操作系统的ARM处理器,在图形界面显示和网络传输方面有较大的优势,如果将FPGA实现的多路高速数据采集系统的采集结果交给ARM处理器来实现波形显示或者网络传输,那么只需要简单的软件编程即可实现。
SoC FPGA作为一种在单一芯片上集成了FPGA和高性能处理器的新型芯片架构,即拥有FPGA高速并行处理和定制灵活的优势,又拥有ARM处理器实现灵活控制、图形界面显示和网络传输方面的优势。而且,这两者在芯片上并不是相互独立的存在,而是通过片上的高速互联架构有机的连接到了一起。FPGA采集的数据可以通过F2HBridge直接写入HPS侧的存储器中,然后由HPS读取数据,使用高级的图形界面编程工具,例如Mini GUI或者Qt来设计图形界面并显示波形,也可以使用Web Server网络服务器将数据组织起来并传递给远端计算机接收。
前文介绍了处理器在灵活控制和用户界面、网络传输方面的优势,也介绍了FPGA在高速并行处理方面的优势,同时还介绍了基于FPGA和软核处理器协同工作的SOPC技术。综上可知,处理器和FPGA协同工作是比较理想的方案,但是由于软核在性能上还是有所欠缺,且实现一些特定的功能不如MCU或处理器具有性价比,因此,相较于软核实现方案,有相当一部分的技术人员更倾向于选择使用独立的处理器加FPGA的方案。例如低端领域使用Cortex-M系列单片机加FPGA,中端应用使用Cortex-A系列处理器加FPGA,高端领域使用X86 CPU甚至Xeon系列处理器加FPGA。这些架构,从一定程度上来讲确实有很大的优势,例如性价比,开发的便捷性等。但是,因为使用了独立器件,所以电路板设计相对复杂一点。另外,除了高端CPU能够使用PCIe这种高速通信接口以外,常见的Cortex-M系列单片机和FPGA连接时,相互间的通信速率会有较大的限制,首先,是两者间的通信数据线受硬件电路板限制,一般不超过32位宽度,其次,就是器件间使用高位宽的并行总线,存在竞争冒险的情况,因此数据线翻转速率有较大的限制,通信频率无法做到很高。这两方因素的共同限制了FPGA和处理器之间的通信带宽。而SoCFPGA使用的是片上集成的方式,在同一个芯片上集成FPGA和HPS系统,两者之间设计了高达128位数据的位宽,运行频率高达200MHz的通信总线,为两者通信提供了较高的数据带宽,大大提高了两者的通信带宽和通信效率。
采用ARM+FPGA集成架构的SoC FPGA芯片,用户将不会局限于预先制造的处理器技术,而是根据自己的要求定制处理器,按照需要选择合适的外设、存储器和接口。此外,用户还可以轻松集成自己专有的功能(如DSP,用户逻辑),创建一款“完美”的处理器,如图 1.2–1所示,使用户的设计具有独特的竞争优势。
图 1.2–1SoC简化系统硬件设计
用户所需要的嵌入式设备主控制器应该能够满足当前和今后的设计功能及性能需求。由于发展具有不确定性,因此,设计人员必须能够更改其设计,例如为处理器加入新的功能电路,定制硬件加速器,或者加入协处理器,以达到新的性能目标,而基于SoC FPGA的系统能够满足以上要求。
采用SoC FPGA芯片,用户不仅可以使用ARM Cortex-A9处理器的高性能运算和事务处理能力,还可以根据需要定制功能。在单个SoC FPGA芯片中实现高性能处理器、外设、存储器和I/O接口功能,降低用户的系统总体成本。
开发人员希望能快速将产品推向市场并保持一个较长的产品生命周期,避免更新换代。基于SoC FPGA的系统在以下几个方面可以帮助用户实现此目标:
1 缩短产品的上市时间,FPGA可编程的特性使其具有最快的产品上市速度。许多设计通过简单的修改都可以在FPGA上快速实现。ARM Cortex-A9处理器能够运行成熟的Linux操作系统,基于Linux操作系统,用户能够非常简单高效地编写Linux应用程序,加快软件开发速度,缩短软件开发周期。而系统的灵活性和快速上市的特性源于Intel提供的完整的开发套件、众多的参考设计、强大的硬件开发工具(Platform Designer)和软件开发工具(SoC EDS套件)。用户可以借助厂商提供的参考设计和易用的开发工具,在几个小时内就完成自己的设计原型。
2 建立有竞争性的优势,维持一个基于通用硬件平台的产品的竞争优势是非常困难的。而SoC FPGA器件,能够充分发挥FPGA的可编程特性,设计独有的硬件加速和协处理逻辑,与ARM处理器协同工作。具备硬件加速,定制的、可裁剪的外设SoC系统,将更具竞争优势。
3 延长了产品的生存时间,使用SoC FPGA器件的产品的独特优势能够对硬件进行升级。即使产品已经交付给客户,仍可以定期升级。这些特性可以解决很多问题:
延长产品的生存时间,随着时间的增加,可以不断将新的特性添加到硬件中。
减小由于标准的制定和改变而带来的硬件上的风险。
简化了硬件缺陷的修复和排除。