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

一种基于FPGA的脉冲神经形态计算系统的制作方法

2022-02-20 05:07:42 来源:中国专利 TAG:

一种基于fpga的脉冲神经形态计算系统
技术领域
1.本发明涉及神经形态计算架构系统技术领域,具体是指一种基于fpga的脉冲神经形态计算系统。


背景技术:

2.人们对人工智能的追求源自于对思维、对人脑的思考与认识,早在两千多年前的古希腊时期,当时的哲学家们就已经开始思考思维是如何产生的,并将目光聚焦在了人脑上。随着科技的不断进步,生理学的不断发展,人们对人脑的认识越来越精确,这进一步促进了人类对于类脑智能的追求。
3.研究表明,人脑以神经元为基本计算处理单元,突触是人脑记忆和学习的重要结构,此外,对灵长类动物视觉系统研究还发现,此系统为层次化架构,各层之间互相连接,随着层级的逐渐加深,对视觉观察到的物体的表征更加鲁棒,最终达成对物体的视觉识别能力。基于此生物研究,现代深度神经网络正是借鉴采用了此层次化架构。
4.如前所述,国内外各个国家和地区对类脑计算的投入巨大,相继启动了各自的“脑计划”,随着研究的不断推进,各种成果相继涌现出来,其中,最具代表性的是欧盟支持的由曼彻斯特大学研发的spinnaker、海森堡大学研发的brainscales,美国支持的ibm公司研发的truenorth芯片,斯坦福大学的neurogrid和高通公司的zeroth。
5.自2008年起,美国就开始资助ibm公司研发脉冲神经网络芯片,2014年,ibm公司推出了其第二代类脑芯片truenorth,神经元数量达到100万个,突触数量达到2.56亿。在truenorth的网络架构中,其网络节点为神经突触核,其内存、cpu和通信模块集成在一起,信息处理完全在节点上进行处理。并且,由于单一节点上的信息处理量较小,从而避免了传统冯
·
诺伊曼架构上存在的cpu与内存之间的瓶颈。
6.目前,以spinnaker、truenorth等为代表神经形态计算系统设计复杂,而fpga相对更加简单易行,因此,本文的研究内容为以fpga为节点的实现平台,设计并实现一种简单易行的神经形态计算架构系统,对第三代神经网络进行仿真分析


技术实现要素:

7.本发明为了解决上述的各种问题,提供了基于商用fpga平台,设计并实现一种简单易行、可扩展的神经形态计算架构系统,为第三代神经网络即脉冲神经网络的运行计算提供一种低成本平台的一种基于fpga的脉冲神经形态计算系统。
8.为解决上述技术问题,本发明提供的技术方案为:一种基于fpga的脉冲神经形态计算系统,包括拓扑结构及节点结构,所述节点结构包括:通信单元、路由单元、计算单元,所述拓扑结构包括以下特征:
9.1)简单易行。本文实现的系统是有实际应用需求的系统,因此,其方案的实现复杂度是一个重要的评价指标。对于神经形态计算大规模神经网络模拟的场景下,节点数量庞大,如果节点间的拓扑结构十分复杂,势必为系统带来更复杂的路由方案设计,更复杂的物
理连接等成本,因此,简单易行是拓扑结构的一个设计目标;
10.2)可扩展性。神经形态计算的目的是对大规模生物神经系统进行仿真,单节点的仿真能力距离目标可谓是天差地别,必须要有大规模的节点互相连接才能实现。并且,在部分应用场景下,需要对现有的节点网络进行扩展以实现对更大规模网络的仿真。因此,拓扑结构的选择应当具有可扩展性,这也是降低系统实现复杂度的一种方式;
11.3)路由简单易行。路由与拓扑结构紧密联系,同样考虑到实现复杂的问题,路由算法的实现、路由表的大小等等都是至关重要的指标,因而,在进行拓扑结构选择的时候,应当考虑到对应的路由规则是否满足要求;
12.4)高性能成本比。衡量拓扑结构的指标有很多,比如带宽、功耗、拓扑结构的物理面积等等,有的拓扑结构具有很高的带宽,但是同时也有更高的能耗,因此,性能成本比是衡量拓扑结构的一个重要指标。其次关于节点结构,对于单一节点而言,其神经元计算的存储空间、各个通信端口的缓存区等资源的消耗是设计的重要指标。
13.优选的,所述拓扑结构为mesh拓扑结构。
14.优选的,所述通信单元为了最终实现基于fpga的脉冲神经网络应用,必须实现节点与节点之间,以及节点与pc之间的以太网通信。因此,每个节点之上必须包含通信单元,负责与系统中与之相连的其他多个节点之间的通信。更具体的,通信单元应当能够解析以太网数据帧,提取出其中经过编码的神经元id信息,同时,还应当能够对神经元id信息进行打包发送。
15.优选的,所述路由单元与通信单元进行配合,当通信单元接收到脉冲后,路由单元判断是否需要对脉冲进行复制转发以及是否有当前节点上的神经元需要接收此脉冲。路由单元的输入输出接口有5个,包括4个与其他节点通信的接口和1个与本节点计算单元通信的接口。
16.优选的,所述计算单元即所有部署在此节点上的神经元,接收脉冲信息进行计算,当有新的脉冲产生时计算单元负责收集这些脉冲并传递给路由单元。
17.优选的,除通信单元、路由单元、计算单元三个组成部分之外,节点中还有一个重要的成员,即神经元,神经元作为系统模拟生物神经网络计算的基本单元,其结构功能采用的前文提到lif脉冲神经元模型,根据输入积累膜电位,当达到阈值时,产生新的脉冲。
18.本发明与现有技术相比的优点在于:本方案是基于商用fpga平台,设计并实现一种简单易行、可扩展的神经形态计算架构系统,为第三代神经网络即脉冲神经网络的运行计算提供一种低成本平台。
附图说明
19.图1是本发明的节点结构示意图。
20.图2是本发明的以太网帧结构图。
21.图3是本发明的gmii工作状态图。
22.图4是本发明的udp接收模块端口示意图。
23.图5是本发明的udp接收模块状态机转换图。
24.图6是本发明的udp发送模块端口示意图。
25.图7是本发明的udp发送模块状态机转换图。
26.图8是本发明的路由模块端口示意图。
27.图9是本发明的计算单元架构图。
28.图10是本发明的计算单元端口示意图。
29.图11是本发明的神经元模块状态机转换图。
30.图12是本发明的神经元模块端口示意图。
具体实施方式
31.下面结合附图和实施例对本发明做进一步的详细说明。
32.结合附图1至附图12,一种基于fpga的脉冲神经形态计算系统,包括拓扑结构及节点结构,所述节点结构包括:通信单元、路由单元、计算单元,所述拓扑结构包括以下特征:
33.1)简单易行。本文实现的系统是有实际应用需求的系统,因此,其方案的实现复杂度是一个重要的评价指标。对于神经形态计算大规模神经网络模拟的场景下,节点数量庞大,如果节点间的拓扑结构十分复杂,势必为系统带来更复杂的路由方案设计,更复杂的物理连接等成本,因此,简单易行是拓扑结构的一个设计目标;
34.2)可扩展性。神经形态计算的目的是对大规模生物神经系统进行仿真,单节点的仿真能力距离目标可谓是天差地别,必须要有大规模的节点互相连接才能实现。并且,在部分应用场景下,需要对现有的节点网络进行扩展以实现对更大规模网络的仿真。因此,拓扑结构的选择应当具有可扩展性,这也是降低系统实现复杂度的一种方式;
35.3)路由简单易行。路由与拓扑结构紧密联系,同样考虑到实现复杂的问题,路由算法的实现、路由表的大小等等都是至关重要的指标,因而,在进行拓扑结构选择的时候,应当考虑到对应的路由规则是否满足要求;
36.4)高性能成本比。衡量拓扑结构的指标有很多,比如带宽、功耗、拓扑结构的物理面积等等,有的拓扑结构具有很高的带宽,但是同时也有更高的能耗,因此,性能成本比是衡量拓扑结构的一个重要指标。其次关于节点结构,对于单一节点而言,其神经元计算的存储空间、各个通信端口的缓存区等资源的消耗是设计的重要指标。
37.所述拓扑结构为mesh拓扑结构。
38.所述通信单元为了最终实现基于fpga的脉冲神经网络应用,必须实现节点与节点之间,以及节点与pc之间的以太网通信。因此,每个节点之上必须包含通信单元,负责与系统中与之相连的其他多个节点之间的通信。更具体的,通信单元应当能够解析以太网数据帧,提取出其中经过编码的神经元id信息,同时,还应当能够对神经元id信息进行打包发送。
39.所述路由单元与通信单元进行配合,当通信单元接收到脉冲后,路由单元判断是否需要对脉冲进行复制转发以及是否有当前节点上的神经元需要接收此脉冲。路由单元的输入输出接口有5个,包括4个与其他节点通信的接口和1个与本节点计算单元通信的接口。
40.所述计算单元即所有部署在此节点上的神经元,接收脉冲信息进行计算,当有新的脉冲产生时计算单元负责收集这些脉冲并传递给路由单元。
41.除通信单元、路由单元、计算单元三个组成部分之外,节点中还有一个重要的成员,即神经元,神经元作为系统模拟生物神经网络计算的基本单元,其结构功能采用的前文提到lif脉冲神经元模型,根据输入积累膜电位,当达到阈值时,产生新的脉冲。
42.本文采用的具体的通信协议为udp/ip协议。相比较于tcp协议,在本文的应用场景下,udp协议具有更明显的优点。
43.第一,udp协议实现复杂度更低,系统资源占用更少;其次,相对于tcp协议,udp协议传输速度更快,实时性更强;第三,更重要的一点是tcp协议不支持多播通信模式,从而在神经形态计算的应用场景下会带来更大的通信压力。具体的,相关的模块分为串行管理接口、udp接收模块和udp发送模块。
44.(1)串行管理接口
45.介质独立接口(medium independent interface,mii)用于连接mac和phy,通过mii接口,mac可以和任何phy通信。mii包括两种接口:
46.数据接口:顾名思义,数据接口即是mac和phy之间进行通信,传递以太网数据的接口,发送和接收采用独立的信道。本文采用的具体数据接口位gmii(gigabit media independent interface),采用8位数据接口,工作时钟125mhz,从而实现千兆以太网通信;
47.串行管理接口(serial management interface,smi):smi包括mdc(management data clock)和mdio(management data input output)两条信号线,其中mdio信号线为双向,既可以通过读方式来获取phy的状态信息,又可以通过写方式控制phy的行为,mdc是由mac提供,为mdio提供时钟。
48.(2)udp接收模块
49.udp接收模块实现千兆以太网接收功能,负责接收以太网数据包,即脉冲数据,将接收到的16位数据写入fifo中,等待路由单元读取,由路由单元负责将数据进行复制转。具体的,udp接收模块的内部为8状态的状态机。
50.主要输入输出端口包括:
51.gmii_rxd:输入端口,8位,gmii数据线,即接收到的数据;
52.gmii_rxdv:输入端口,1位,gmii使能线,当有udp数据包到达时,此信号有效;
53.fifo_wr:输出信号,1位,udp数据包被解析之后,真正的数据内容被写入fifo中,此信号为fifo的写使能信号;
54.fifo_din:输出信号,8位,数据以8位为单位写入fifo,因此一个脉冲信息需要两个时钟周期写入fifo;
55.clk125m_o:输出信号,1位,fifo的写时钟。
56.除以上关键信号外,还包括接收完成、gmii时钟信号等等。
57.具体的状态转移及每个状态的功能为:
58.idle:挂起状态,在此状态,一直监听gmii_rxdv端口,当gmii_rxdv信号有效时,即有udp数据包到达时,进入rx_preamble状态,否则保持在idle状态;
59.rx_preamble:前导码接收状态,以太网前导码为8个字节,固定为7个连续的8’h55和1个8’hd5,若接收到的确实为此固定的8个字节,则进入rx_eth_header状态,若接收错误,则进入idle状态;
60.rx_eth_header:以太网首部接收状态,以太网首部固定为14个字节,因此14个时钟周期之后进入rx_ip_header状态;
61.rx_ip_header:ip首部接收状态,ip首部固定为20个字节,因此此状态持续20个时钟周期,前两个时钟周期同时还需要对上一状态接收到的以太网首部中的mac地址以及协
议类型进行检查,若与本地mac地址不符,或协议类型不是ip协议,则代表传输出错,转入idle状态,若检查正确,则20个时钟周期完成后进入rx_udp_header状态;
62.rx_udp_header:udp首部接收状态,udp首部固定为8个字节,因此此状态持续8个时钟周期,前两个时钟周期要对前一状态接收到的ip首部中的ip地址等相关内容进行检查,若检查出错则进入idle状态,若检查正确,则在倒数第二个时钟周期判断udp首部中的端口信息是否正确,若出错则进入idle状态,若正确,则完成全部8个时钟周期之后进入rx_data状态;
63.rx_data:数据接收状态,此状态下fifo_wr信号会被置为有效,同时数据也写入fifo_din端口,数据接收完成后,进入rx_crc状态;
64.rx_crc:crc数据接收状态,接收以太网帧中的crc校验信息,固定为4个字节,完成接收后进入pkt_check状态;
65.pkt_check:以太网帧检查状态,在此状态,判断接收到的crc数据与根据接收到的数据计算出来的crc结果是否相同,若不同则代表接收出错,结束后,回到idle状态。
66.(3)udp发送模块
67.路由单元将需要发送的数据写入对应网口的发送缓存区(fifo)中,udp发送模块则不停地访问这个缓存区,当缓存区内存在数据时,则将其读出,并发起一次发送流程。与udp接收模块类似,udp发送模块内部是由7个状态形成的状态机。
68.主要的输入输出端口包括:
69.tx_en_pulse:输入端口,1位,当此信号有效时,意味着有一个脉冲信号需要发送,状态机开始转换;
70.payload_data:输入信号,16位,需要发送的数据,当tx_en_pulse有效时,此信号会被写入内部寄存器,等以太网帧发送到数据部分时读取;
71.gmii_txen:输出信号,1位,gmii发送使能信号;
72.gmii_txd:输出信号,8位,gmii发送数据信号。
73.此外,还包括ip地址、端口等相关的必要信息。
74.具体的状态转移及每个状态的功能为:
75.idle:挂起状态,在此状态下,监听tx_en_pulse信号,当tx_en_pulse信号有效,即需要发起一次发送流程时,进入tx_preamble状态,否则保持在idle状态;
76.tx_preamble:前导码发送状态,与udp接收状态机的rx_preamble状态相对应,发送以太网帧的前导码,共计8个字节,即8个时钟周期,发送完成后进入tx_eth_header状态;
77.tx_eth_header:以太网首部发送状态,与udp接收状态机的rx_eth_header状态相对应,发送以太网首部,共计14个字节,即14个时钟周期,发送完成后进入tx_ip_header状态;
78.tx_ip_header:ip首部发送状态,与udp接收状态机的rx_ip_header状态相对应,发送ip数据报的首部,共计20个字节,即20个时钟周期,发送完成后进入tx_udp_header状态;
79.tx_udp_header:udp首部发送状态,与udp接收状态机的rx_udp_header状态相对应,发送udp首部,共计8个字节,即8个时钟周期,发送完成后进入tx_data状态;
80.tx_data:数据发送状态,与udp接收状态机的rx_data状态相对应,发送16位脉冲
id,共计2个字节,即2个时钟周期,发送完成后进入tx_crc状态;
81.tx_crc:crc校验位发送状态,与udp接收状态机的rx_crc状态相对应,发送以太网帧的crc校验,发送完成后回到idle状态,等待下次发送请求
82.路由单元的具体实现为简单的选择器,根据输入脉冲的id和设定好的路由规则,判断上下左右四个网口和本地计算单元共计五个去向是否需要此脉冲,将脉冲信息写入对应的出口的fifo中。因此,路由端
83.new_packet:输入端口,1位,代表有一个新的脉冲需要经过路由;
84.pulse_id:输入端口,16位,代表需要路由的脉冲的id;
85.cal_unit_fifo_wr:输出端口,1位,若部署在当前节点的一个或多个神经元,以此次进行路由判决的脉冲作为输入,那么此信号有效,将此脉冲id写入计算单元对应的fifo中,等待计算单元进行读取和相应的计算处理;
86.port_1_fifo_wr:输出端口,1位,若经过路由判决,判断此脉冲需要通过当前节点的1号网口进行转发,那么,port_1_fifo_wr信号有效,将此脉冲id写入1号网口的发送缓存区(fifo)中,等待1号网口的通信单元进行读取和发送;
87.port_2_fifo_wr:与port_1_fifo_wr类似,对应2号网口;
88.port_3_fifo_wr:与port_1_fifo_wr类似,对应3号网口;
89.port_4_fifo_wr:与port_1_fifo_wr类似,对应4号网口。
90.路由单元在整体设计中多次被用到,4个网口中任意一个网口的接收端接收到脉冲之后都需要对其进行路由判决。此外,当部署在当前节点上的任意一个神经元产生新的脉冲时,此脉冲也要经过路由单元进行路由判决,将产生的脉冲发送到相应的节点上。
91.计算单元上实现了当前节点上所有的神经元的实例化,一方面负责收集当前节点神经元所需要的所有脉冲,各个神经元获取脉冲之后进行计算,另一方面计算单元还需要监控所有当前节点的神经元是否产生了新的脉冲,若有新的脉冲产生,则将其收集起来发送给路由单元进行路由判决,进而对新脉冲进行复制转发。在具体的实现中,路由单元也在计算单元中进行了实例化。
92.new_packet:输入端口,1位,代表有一个与当前节点神经元相关的脉冲出现;
93.pulse_id:输入端口,16位,代表脉冲的id;
94.cal_unit_fifo_wr:输出端口,1位,当前节点的任一神经元产生脉冲之后,都需要经过路由单元进行路由判决,若判决结果判断此新脉冲仍是当前节点上部分神经元的输入,那么将此脉冲的id写入计算单元对应的fifo中,等待计算单元进行读取和相应的计算处理;
95.port_1_fifo_wr:输出端口,1位,与cal_unit_fifo_wr端口类似,若当前节点产生的新脉冲经过路由判决判断此脉冲需要通过当前节点的1号网口进行转发,那么,port_1_fifo_wr信号有效,将此脉冲id写入1号网口的发送缓存区(fifo)中,等待1号网口的通信单元进行读取和发送;
96.port_2_fifo_wr:与port_1_fifo_wr类似,对应2号网口;
97.port_3_fifo_wr:与port_1_fifo_wr类似,对应3号网口;
98.port_4_fifo_wr:与port_1_fifo_wr类似,对应4号网口;
99.output_id:输出端口,16位,当有部署在当前节点的神经元产生的脉冲经过路由
判决使得上述5个fifo写使能中的任意一个或多个有效时,此端口就对应产生的新脉冲的id,等待写入fifo。
100.神经元负责的功能是接收脉冲输入,判断脉冲的id,并根据对应的权重更新膜电位,当膜电位大于阈值时产生自身id的脉冲传递给路由单元,具体的,神经元内部为3状态的状态机。
101.具体的状态转移及每个状态的功能为:
102.idle:挂起状态,当没有脉冲到达时神经元处于idle状态,当有脉冲到达后进入cal状态,否则保持在idle状态;
103.cal:计算状态,根据接收到的脉冲代表的神经元信息,将相应的权重加在膜电位上,计算完成后转入acitvate状态,否则保持在cal状态;
104.activate:激活判断状态,cal状态会对膜电位进行更新,在activate状态需要判断此时膜电位的状态是否大于设定的阈值,若是,则产生新的脉冲,膜电位减去阈值大小的电位,然后进入idle状态,否则进入idle状态。
105.为了实现上述神经元的功能,主要输入输出端口包括:
106.input_pulse:输入端口,1位,当有脉冲到达时,此信号有效;
107.input_id:输入端口,16位,代表到达的脉冲的id;
108.pulse_num:输出端口,16位,代表此神经元尚未输出的脉冲个数,当有新的脉冲出现时,pulse_num计数加一;
109.pulse_read:输入端口,1位,当pulse_read有效时,代表此神经元输出一个脉冲,pulse_num计数减一。
110.除以上三个端口外,还包括时钟信号、此神经元的id等端口
111.以上对本发明及其实施方式进行了描述,这种描述没有限制性,附图中所示的也只是本发明的实施方式之一,实际的结构并不局限于此。总而言之如果本领域的普通技术人员受其启示,在不脱离本发明创造宗旨的情况下,不经创造性的设计出与该技术方案相似的结构方式及实施例,均应属于本发明的保护范围。
再多了解一些

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

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

相关文献