一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于FPGA的NVDLA人工智能芯片硬件系统的制作方法

2021-12-15 11:44:00 来源:中国专利 TAG:

一种基于fpga的nvdla人工智能芯片硬件系统
技术领域
1.本实用新型涉及人工智能芯片领域,具体涉及一种基于fpga的nvdla人工智能芯片硬件系统。


背景技术:

2.nvdla(nvidia deep learning accelerator)是nvidia在2017年发布的开源深度学习加速器,用于解决卷积神经网络处理数据的问题。
3.它是一种可配置参数功能的硬件加速器,可配置卷积神经网络中各层的参数,其结构十分灵活,因为已经开源所以被用来做广泛研究和商用。
4.但英伟达官方发布的开源加速器只针对于asic,想实用需要经过流片等繁琐步骤。因此有必要提供一种新的硬件系统架构。


技术实现要素:

5.本实用新型的一个目的是解决现有技术的开源加速器仅针对asic,使用较为繁琐的缺陷。
6.根据本实用新型的第一方面,提供了一种基于fpga的nvdla人工智能芯片硬件系统,包括存储模块、主控模块、加速模块、电源模块、晶振模块和总线,其中,存储模块、主控模块以及加速模块均能通过总线进行数据的发送和接收;主控模块和所述加速模块均设置在fpga芯片上;所述电源模块与fpga和存储模块均连接;晶振模块外接于fpga芯片上。
7.优选地,所述主控模块的型号为nios ii嵌入式处理器。
8.优选地,所述存储模块为sdram。
9.优选地,sdram的型号为w9864g6kh

6。
10.优选地,所述加速模块的型号为nvdla。
11.优选地,所述总线为avalon总线。
12.优选地,所述fpga芯片的型号为cycloneiv系列的ep4ce115f29c7。
13.优选地,所述电源模块为tps7a7001电源芯片。
14.优选地,晶振模块为dsb535sg

50m晶振芯片。
15.优选地,系统还包括flash模块,与fpga芯片连接,型号为w25q64。
16.本实用新型的有益效果是,将部分芯片部署在fpga上,提供了一种新的硬件电路系统,使用时无需经过流片等繁琐步骤。
17.通过以下参照附图对本实用新型的示例性实施例的详细描述,本实用新型的其它特征及其优点将会变得清楚。
附图说明
18.被结合在说明书中并构成说明书的一部分的附图示出了本实用新型的实施例,并且连同其说明一起用于解释本实用新型的原理。
19.图1为实用新型一个实施例的电路原理框图;
20.图2为一个小型nvdla系统的连接框图;
21.图3为本实用新型一个实施例的总体电路图;
22.图4为本实用新型一个实施例的电路结构框图;
23.图5为本实用新型一个实施例的sdram芯片管脚图;
24.图6为本实用新型一个实施例的fpga配置电路图;
25.图7为本实用新型一个实施例的fpga的bank1区域的芯片管脚图;
26.图8为本实用新型一个实施例的线性电源模块电路结构图;
27.图9为本实用新型一个实施例的fpga外接flash芯片的外围电路结构图;
28.图10为本实用新型一个实施例的晶振芯片的外围电路结构图;
29.图11为本实用新型一个实施例的pll模块的电压配置区域电路连接图;
30.图12为本实用新型一个实施例的fpga下载器接口的电路连接图;
31.图13为本实用新型一个实施例的bdma接口图;
32.图14为本实用新型一个实施例的mac单元电路图;
33.图15为本实用新型一个实施例的激活函数模块的电路结构图;
34.图16为本实用新型一个实施例的池化模块电路结构图;
35.图17为本实用新型一个实施例的全连接模块电路结构图。
具体实施方式
36.现在将参照附图来详细描述本实用新型的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本实用新型的范围。
37.以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本实用新型及其应用或使用的任何限制。
38.对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
39.在这里示出和讨论的所有例子中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它例子可以具有不同的值。
40.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
41.本实用新型一个实施例的电路原理图如图1所示,包括存储模块、主控模块、加速模块、电源模块、晶振模块和总线,其中,存储模块、主控模块以及加速模块均能通过总线进行数据的发送和接收;主控模块和所述加速模块均设置在fpga芯片上;所述电源模块与fpga和存储模块均连接;晶振模块外接于fpga芯片上。
42.为了能更方便的利用nvdla加速器,在本实施例中,本实用新型将该加速器部署到fpga上来实现,既体现了fpga可重构的特点,也体现了fpga可并行快速运算的特点。
43.本实用新型通过软硬件协同设计来实现该卷积神经网络加速器,搭建组合了一系列电路结构,并搭建了硬件验证平台来加以验证。
44.需要说明的是,本实用新型的目的仅在于提供一种硬件电路系统,这种电路连接
关系本身具有显著的进步,而无需依赖于软件,说明书中关于图像和计算的记载仅为了举例说明使用场景,本实用新型的技术进步不在于软件而在于硬件连接关系。
45.网络中的各权重参数通过tensorflow训练出来然后将数据放到从存储器上。
46.采用letnet

5网络并用手写数字图片数据集放到该加速器上来验证该加速器是否部署成功。
47.nvdla模型分为大型和小型,小型的更适合人工智能芯片方面的应用,并且能耗较小,因此本实用新型将小型nvdla模型部署到fpga上。
48.该fpga加速系统由主控部分,加速部分,存储部分构成。
49.主控核心用nios ii cpu,片上存储器,外部存储器等部分构成,加速部分由卷积运算各模块构成,存储部分由存储管理模块与存储器构成。
50.加速的大体流程为:
51.nvdla与nios ii处理器协同工作,内部对应着卷积神经网络操作的各个模块,
52.初始向主处理器输入对于卷积各层结构的参数数据,
53.主处理器可以向各个可配置的模块发送所需要的参数,然后这些模块配置完成。
54.每个重构好的模块都有一个专门用于存储参数的双口缓冲器,因此每个模块之间还可以根据要求相互关联。
55.被配置完成的各模块完成各自的操作后会发出中断,给处理器传送任务完成的信号,
56.然后根据处理器的指令执行接下来的操作,不断重复该流程直到卷积操作全部完成。其中一个小型nvdla系统的结构示意图如图2所示。
57.nvdla硬件架构中的硬件模块分为5组,卷积运算模块,激活模块,池化模块,全连接层模块,本地响应规范化模块,每个模块对应不同的特定操作。
58.该系统主要由fpga芯片与一个片外sdram相连,nios ii cpu集成在fpga芯片内部,
59.nios ii本身具有嵌入式cpu的功能特性,因而还可以根据需求进行程序功能的扩展,具有很高的灵活性。
60.在fpga内部通过硬件描述语言verilog来设计了积运算模块,激活模块,池化模块,全连接层模块,本地响应规范化模块。
61.然后通过c语言来使nios ii来调度fpga内各模块与外部sdram的数据传输。
62.图3为该系统总体电路图。芯片选型如下:
63.fpga模块:fpga芯片型号为cycloneiv系列的ep4ce115f29c7,采用altera的de1

115开发板,上面带有50m晶振,epcs(nand flash)芯片及其外围电路。
64.电源模块:主要采用3.3v,2.5v,1.2v做为fpga的bank电压和内核电压(1.2v)。
65.sdram模块:主要为外围滤波电容和sdram芯片构成,sdram芯片型号为w9864g6kh

6。
66.sdram模块简介:
67.主要有13根地址线,2根bank地址线,16根数据线,在加上6根控制线,一根时钟线,一根时钟使能线组成。
68.sdram实现输入输出主要由4根控制线实现,为sdram_cs、sdram_cas、sdram_ras、
sdram_we。图3中的sdram_dq为一个双向端口,既可输入也可输出,当sdram_wr为1时读操作,为0时写操作。
69.图4为顶层总体电路结构框图,图中示出了各个结构单元,包括nios ii处理器,sdram,fpga片内逻辑,avalon总线互联,控制器。
70.控制器挂在avalon总线上,接收卷积层配置信息并控制计算单元与片上缓存有序工作,输入与输出片上缓存分别挂在avalon总线和内存之间进行数据传输,计算单元与片上缓存相连,根据输入缓存图像和权重数据得到对应的输出结果并传输到输出缓存。
71.图5为一个实施例的sdram的芯片管脚图。
72.图6为fpga的配置电路,上面四个端口tdi,tdo,tck,tms是下载接口,中间msel是选择下载模式,nce为片选信号,默认接低,最下面dclk,conf_done,nconf1g,nstatus为ps端配置接口,连接上拉电阻,led为以上配置完成后的指示信号。
73.图7为fpga的bank1区域,该型号fpga共有8个bank区域,每个bank的接口标准由其接口电压vcco决定。bank1的各接口足够可以提供与外部sdram的连接,接口连接大都集中在bank1区域。
74.图8为该给fpga供电的电源模块,一个ido线性电源,采用tps7a7001电源芯片,产生3.3v2.5v1.2v电压。
75.图9为fpga外接的flash芯片,用于保存加载在fpga上的程序,以便下次上电时程序不会丢失,这样每次给fpga上电都可以直接运行加速器。该flash型号为w25q64,容量为64mb,支持标准的spi协议。
76.图10为该fpga的外接晶振芯片,芯片型号为dsb535sg

50m,该芯片十分稳定并适用于通信,有利于加速器的运行,常见频率为50mhz,10mhz。
77.图11为该fpga的pll区域的接口与电压连接情况,pll可以从一个时钟输入信号生成多个时钟信号,由于加速器中包含了一些跨时钟域的设计部分,数据在不同时钟域下有各自的运算传输,因此一个稳定的pll配置是十分必要的。
78.图12为fpga的下载器接口模块,5x2表示有两排针,每排有5针,将他们外接到一个串口电路上,实现fpga与外部的串行通信,将程序配置加载到fpga上。
79.nvdla有四个接口分别csb:用于与处理器之间通信来驱动nvdla
80.irq:中断信号,当nvdla运算完成或者内部错误时发送信号
81.ddbif:主干总线,用于nvdla通过dma方式访问各存储器
82.sramif:可选的ram接口,用于连接系统外部的sram,主要用于片上cache的缓存系统。
83.在fpga上再设计一个用于连接内外部数据通信的控制器,即bdma,它包括csb,mcif,sramif三个接口,csb由cpu配置寄存器,mcif和sramif负责读写外部存储器。
84.bdma:输入图像和处理结果存储在外部dram中,但外部dram带宽和延迟通常不足以使nvdla充分利用其mac阵列。因此,nvdla配置有片上sram的内部存储器接口。为了利用片上sram,nvdla需要在外部dram和内部sram之间移动数据。bdma就是用来达到此目的。有两个方向的数据路径传输,一条是从外部dram复制数据到内部sram,另一条是从内部sram到复制数据外部dram。两个方向都不能同时工作。bdma还可以将数据从外部dram移动到外部dram,或从内部sram移动到内部sram。bdma接口模块如图13所示。
85.nvdla的核心逻辑是其卷积流水线也就是其卷积运算模块,卷积运算的核心是就mac操作,用于加速卷积过程,它支持可变卷积各层的参数,以及提高mac效率来提升整体性能。mac模块先从sdram上读取要进行卷积操作的数据和权值然后,在mac模块上进行相应的操作。
86.mac电路图如图14所示,以3x3卷积运算为例。在图中,二维卷积计算被分解为若干个移位卷积计算的累加和,也就是在对3x3大小的卷积核和卷积窗口内的输入像素做卷积时,先计算输入图像中每行像素的一维卷积,然后将3行的计算结果进行累加就能得到二维卷积的输出结果。因此,对二维卷积进行计算加速时,需要同时获取卷积窗口中的3行输入像素,将其存储在ram中。同时,由于卷积窗口的移动步长为1,不同卷积窗口之间有重叠,这使得在对输入图像进行二维卷积计算时,存在大量的数据重用。数据重用可以减少下一个卷积窗口内的重叠数据在存储器中的访问次数以及提高二维卷积计算的速度。因此,由图左侧的ram构成的行缓存结构用于实现图像的行列对齐,并且搭配卷积转置后的流水线结构组成了一种高效的并行流水线卷积计算基本电路。卷积转置后的流水线结构在计算完一个数据后会将结果寄存在结果寄存器中,以便为下一级计算提供前一个时钟周期的部分累加结果。该电路结构可以充分开发数据重用,数据重用存在于一级一级的流水线中。
87.激活函数模块采用sigmoid函数,sigmoid函数的主要表现是在进入非常小的负数时,输出0,在进入非常大的正数时,输出1。要用fpga实现sigmoid激活函数,要使用分段线性函数逼近法,这种方法将非线性激活函数分成若干个区间,然后将每一个区间上的曲线用一条线段近似等效。因此,这种方法实现的精度和分成的区间个数有关,区间个数越多越多,实现的精度也越高。采用这种方法在fpga上实现时,只需要将各个区间的端点,以及各个区间的斜率以及截距存储到fpga的ram中,只消耗少量的查找表资源,同时,只需要一次乘法和加法运算,消耗的乘法器和加法器的数量也很少。这种实现方法不仅逻辑资源占用较少,而且运算速度也较快。
88.分段线性函数的在硬件实现过程中需要考虑三个方面的内容。第一个方面,确定输入自变量所在的区间,其主要操作是数据的比较,对应于硬件实现时需要用到比较器。第二个方面是分段线性函数从输入映射到输出的计算过程,对于每一个区间来说,计算过程包含乘法和加法运算,用硬件来实现这些操作时,就需要用到乘法器和加法器。第三个方面是要确保各个硬件模块的工作时钟节拍以及数据传递协调一致,对应的硬件结构就是数据寄存模块。
89.激活整体模块的rtl视图如图15所示,数据x先输入到比较模块中,通过与存储在比较模块ram中的值的对比,找到其所在的分段线段函数上,然后输出该函数y=ax b的a和b值将其分别送到乘法模块和数据寄存模块,因为数据经过乘法器需要经过一定的延时,因此b值要经过相同的延时与乘法结果一起送到加法器中,最后得到sigmoid的函数值。
90.池化层模块采用最大池化法,最大池化法可以把最具有特征意义的像素点进行输出,将像素特征最大化,并且其资源占用也要少于平均池化方法且逻辑较为简单。最大池化法为对池化核内的数据逐一进行比较,找出最大的那个值作为输出结果。对于大小为n x n的池化核一般实现该最大池化需要用到n*n

1个比较器。如图所示为一个池化核大小为3*3的最大池化计算单元。先将缓冲区内的数据缓冲到移位寄存器中,然后同时将数据送入到比较器中进行比较,将比较结果再两两进行比较,最后得出结果。图16为池化模块电路结构
图。
91.全连接层:全连接层与卷积乘累加运算模式连接结构不同,全连接层乘累加运算不对特征图进行处理,权值和输入特征值存储在缓冲区内,mac单元的输入连接至缓冲区的输出,乘累加控制模块负责各个模块的读写传输过程。全连接模块的电路图如图17所示。
92.硬件设计验证:
93.硬件结构设计完成后,接下来开始验证该设计是否正确。卷积神经网络的结构由输入层、隐含层和输出层构成。输入层能够处理多维图像数据,在将学习数据传递给网络前,需要对输入图像归一化处理,完成输入特征的标准化,更好的提升网络的学习效率与表达能力。隐含层由多个卷积层、池化层和全连接层搭建构成,能够有效的对图像中的特征信息进行提取。输出层的上一层网络一般是全连接层,所以其结构和原理与前馈神经网络的输出层相同,输出结果直接为分类的结果、标签等。
94.首先将lenet

5网络的的形状参数输入到fpga上,fpga开始根据输入的参数将相应的各层架构逻辑映射在fpga上。
95.采用mnist数据集对该网络进行测试,每张图片是一个28*28的矩阵,像素值为0~255,首先在tensorflow将其归一化,然后转化成16为二进制定点数,因为fpga只能识别定点数。然后将像素值和tensorflow训练出来的权重值都存放到fpga及其外设的相应存储器上。通过modelsim观察波形输出结果,与输入数据对比。modelsim波形如下图所示。xin为从片外sdram输入到fpga上的输入像素数据,y为输出的最后的分类结果,采用独热码形式表示数字0~9,sure输出信号表示将输出的y值与针对各输入像素矩阵的所对应的数字进行比较的结果,输出y若与输入数据的标签相等则sure输出高电平1,若不相等则输出低电平0,如图所示部分波形图均符合要求。
96.由此可见,本实用新型实现了一个基于开源的卷积神经网络加速器,借鉴了硬件加速nvdla的低功耗,可配置的模块化设计特点,设计了卷积,池化等各模块并将其部署到fpga上进行实现,以de2

115开发板作为实验与验证平台,通过nios ii软核采用软硬件协同方式进行设计,通过nios ii调动了fpga与外部sdram的数据通信过程,以及各个接口的通信。最后仿真电路测试正常。该卷积神经网络加速器可通过部署不同的神经网络来实现例如手写数字识别,图片识别,人脸识别等应用,极其适合卷积神经网络在移动端的应用。
97.虽然已经通过例子对本实用新型的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上例子仅是为了进行说明,而不是为了限制本实用新型的范围。本领域的技术人员应该理解,可在不脱离本实用新型的范围和精神的情况下,对以上实施例进行修改。本实用新型的范围由所附权利要求来限定。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献