本发明属于计算机工程领域,与SoC密切相关。具体涉及一种FPGA配置电路及实现方法。
背景技术:
随着大数据的发展,计算能力的提升,人工智能近两年迎来了新一轮的爆发。2016年谷歌AlphaGo赢得了围棋大战后,人工智能在产业界和资本圈引起了高度关注,成为新的风口。
在人工智能时代,人们对计算能力的需求有指数级的提高,计算能力的要求超过了摩尔定律。随着互联网用户的快速增长,数据体量的急剧膨胀,数据中心对计算的需求也在迅猛上涨。诸如深度学习在线预测、直播中的视频转码、图片压缩解压缩以及HTTPS加密等各类应用对计算的需求已远远超出了传统CPU处理器的能力所及。除此之外,未来在激光雷达、无人机、无人驾驶、智能机器人等终端设备方面对计算能力也会有极大的提升。
另一方面,摩尔定律正在失效,传统CPU架构下计算能力的提升开始滞后于摩尔定律。近几年半导体技术改进达到了物理极限,电路越来越复杂,每一个设计的开发成本高达数百万美元,数十亿美元才能形成新产品投产能力。
因此,计算能力的需求供给出现了一个巨大的缺口。一方面处理器性能再无法按照摩尔定律进行增长,另一方面数据增长对计算性能要求超过了按“摩尔定律”增长的速度。处理器本身无法满足高性能计算应用软件的性能需求。
目前,为了弥补计算能力的缺口,许多公司正在积极开发能够实现人工智能的高效硬件平台。在这个背景下CPU+FPGA架构应运而生。这种异构架构融合了CPU和FPGA各自的优点,以CPU为核心的SoC为FPGA提供高性能的硬核资源,特别是CPU处理能力。而FPGA作为并行架构的处理器非常适合大规模数据的处理,极大地提升了硬件平台的计算能力。同时FPGA的可编程性也为CPU提供扩展空间和可重构资源,使其拥有更高的单位功耗性能、更低时延和更快加速性能,因此在包括智能视觉分析、大数据以及云计算等领域得到了大规模应用。
在CPU+FPGA架构中,一般通过CPU以及相应的配置电路来对一块或多块FPGA进行配置。然而伴随着FPGA内实现的算法的复杂度日益增加,FPGA的配置时间也越来越长。目前云计算平台中的FPGA配置甚至需要多个小时才能完成。因此CPU+FPGA中的FPGA配置时间问题日益严重地制约着人工智能、大数据和云计算等新型领域的发展。
技术实现要素:
针对技术背景中提到的FPGA配置时间过长这一问题,设计了一种可配置的,并且能够显著提高FPGA配置速度的配置电路,该配置电路具有高性能,高可靠性等特点,并且其功能已经在原型验证平台和后仿真平台上通过了验证。
本发明的另一个目的在于提供基于SELECTMAP的可配置且高速的FPGA配置电路的实现方法。
本发明的技术方案如下:
一种基于SELECTMAP的可配置且高速的FPGA配置电路,由以下模块实现:
(1)、高速AMBAAHB接口模块,该模块用以采样AHB总线上的控制、地址和数据信号,并返回相应的控制信号和数据信号。
(2)、寄存器配置模块,该模块由多个配置寄存器和状态寄存器构成。其中配置寄存器用以配置主控制器的各项功能,使得本发明可以适用于各种不同的应用场景。状态寄存器用以寄存主控制模块中的各个状态所对应的数值,通过读取这些寄存器,方便模块的调试与信息的打印。
(3)、缓存模块,该模块作为核心模块之一,用来缓存从AHB系统中输入的FPGA配置数据,使得SELECTMAP接口和AHB系统可以进行异步操作,提高了配置电路的灵活性和稳定性。
(4)、主控制模块,该模块为本配置电路的核心模块,用于产生满足SELECTMAP时序要求的PROGRAM_B、INIT_B、CSI_B、RW_B信号,同时读取缓存模块中的数据并进行移位输出并根据相应的数据信号生成CCLK信号,使得总线的宽度可以灵活配置,并实现配置数据的非连续传输,节省芯片引脚并增加配置电路的可靠性。
基于SELECTMAP的可配置且高速的FPGA配置电路的实现方法中,包含以下步骤:
(1)、上电后配置电路的初始态为空闲状态,在此状态下缓存模块的状态为空状态。主配置模块循环检测配置寄存器模块中PROGRAM_B状态使能寄存器的值,若检测到此寄存器的值为1,则进入步骤(2)。
(2)、配置电路的主控制器读取配置寄存器模块中PROGRAM_B计数寄存器,通过此寄存器中的数值决定PROGRAM_B低电平负脉冲信号的宽度。信号宽度为PROGRAM_B计数寄存器的数值与时钟周期的乘积。同时,进入步骤(3)。
(3)、主控制器模块从FPGA接收INIT_B信号,并做出判断:若检测到INIT_B信号为低电平,则进入步骤(4);否则继续执行步骤(3)。同时INIT_B超时计数寄存器中的数值,并对此数值在每个时钟周期下减1,当此数值为0且INIT_B信号仍然为1时,将TIME_OUT_FLAG信号拉高,并输出到配置寄存器模块中相应的状态寄存器中。此步骤的目的是为了确保所配置的FPGA初始化成功。
(4)、主控制器读取等待状态计数寄存器,通过此计数器的数值与时钟周期决定在等待状态的停留时间。在等待状态停留一段时间之后,执行步骤(5)。
(5)、配置电路进入数据移位状态,主控制模块将从AHB系统中输入并存储在缓存模块的数据位宽为32bit的FPGA配置数据以字为单位读入相应的32bit寄存器中,并将此寄存器中的数据分四次移位输出到FPGA的SELECTMAP从接口,每次数据大小为1字节。同时配合CCLK产生状态机生成符合要求的CCLK信号,信号上升沿位于每字节数据信号的中间。当没有数据输出到FPGA中时,不产生CCLK信号,从而保证了FPGA的非连续配置。当进行完4次移位输出后,进入步骤(6)。
(6)、配置电路进入数据检查状态。在此状态下,检查缓存模块的状态并进行判断。若缓存模块处于非空状态,则重复步骤(5)。若缓存模块处于空状态,则停留在步骤(6)。
附图说明
图1为本发明配置电路的结构示意图。
图2为本发明配置电路的实现方法流程图。
具体实施方式
下面结合附图对本发明的较佳实施例进行详细阐述,以使本发明的优点和特征能更易于被本领域技术人员理解,从而对本发明的保护范围做出更为清楚明确的界定。
如图1所示为本发明配置电路的结构示意图。本配置电路内部包含四个模块:高速AMBAAHB接口模块、寄存器配置模块、缓存模块和主控制模块。其中,寄存器配置模块中的配置寄存器种类包括:软复位寄存器、数据寄存器、Program_B状态使能寄存器、Program_B计数寄存器、CCLK分频寄存器、INIT_B超时计数寄存器、CCLK等待计数寄存器、设备ID寄存器。由图可知配置电路通过高速AMBAAHB接口模块与已CPU为核心的AHB系统相连接,同时通过主控制模块输出符合SELECTMAP时序要求的控制信号和数据信号。
应用时,配置电路通过高速AMBA AHB接口模块与已CPU为核心的AHB系统相连接,从而使得用户可以通过CPU对配置电路中的寄存器配置模块中的配置寄存器和状态寄存器进行写入和读取。
应用时,配置电路通过FPGA的SELECTMAP从设备管脚对FPGA进行配置。应用时,配置电路通过时钟管脚接受AHB系统的时钟信号,并进入工作状态。如图2所示为本发明配置电路实现方法流程图。本发明配置电路主要包括6中工作状态,包括空闲状态、PROGRAM_B状态、INIT_B状态、等待状态、移位输出状态和数据检查状态。本发明屏配置电路的实现方式通过状态机实现,具体实现过程如下:
步骤(一)、上电后配置电路的状态处于空闲状态。此时根据FPGA的时序手册以及具体使用情况,通过CPU对配置电路中的寄存器配置模块的各个相应寄存器进行配置。通过配置PROGRAM_B状态使能寄存器,使得配置电路的状态可以从空闲状态进入PROGRAM_B状态。通过配置PROGRAM_B计数寄存器,产生满足FPGA要求的负脉冲初始化信号。通过配置CCLK分频寄存器,产生满足芯片PAD频率要求的配置时钟信号。通过配置INIT_B超时计数寄存器,若配置电路从FPGA接收的INIT_B信号在规定时间内不拉低,则拉高TIME_OUT_FLAG信号拉高,并输出到配置寄存器模块中相应的状态寄存器中。当CPU从状态寄存器中读取到TIME_OUT_FLAG信号为高电平时,则表示FPGA没有初始化成功,便于用户调试。通过配置等待计数寄存器,确定等待状态的持续时间,满足应用需求。本配置电路可以同时配置多达8块FPGA,通过配置设备ID寄存器,选定要配置的FPGA的编号。在此状态下缓存模块的状态为空状态。主配置模块循环检测配置寄存器模块中PROGRAM_B状态使能寄存器的值,若检测到此寄存器的值为1,则进入步骤(二)。
步骤(二)、配置电路的主控制器读取配置寄存器模块中PROGRAM_B计数寄存器,通过此寄存器中的数值决定PROGRAM_B低电平负脉冲信号的宽度。信号宽度为PROGRAM_B计数寄存器的数值与时钟周期的乘积。当完成PROGRAM_B低电平负脉冲信号的发送时,进入步骤(三)。
步骤(三)、配置电路进入INIT_B状态。在此状态下主控制器模块通过专用引脚从FPGA接收INIT_B信号,并做出判断:若检测到INIT_B信号为低电平,则进入步骤(四)。否则继续执行步骤(三)。同时INIT_B超时计数寄存器中的数值,并对此数值在每个时钟周期下减1,当此数值为0且INIT_B信号仍然为1时,产生TIME_OUT_FLAG信号并将此信号拉高,并输出到配置寄存器模块中相应的状态寄存器中。CPU在传输配置数据之前先循环读取此状态寄存器中的值,若此状态寄存器的值为1,则报错。此步骤的目的是为了确保所配置的FPGA初始化成功。
步骤(四)、配置电路进入等待状态,在此状态下主控制模块读取等待状态计数寄存器中的数值,通过此计数器的数值与时钟周期决定在等待状态的停留时间。在等待状态停留一段时间之后,执行步骤(五)。此步骤的目的是为了确保满足不同应用场景的要求。
步骤(五)、配置电路进入数据移位状态,通过CPU将配置数据写入寄存器配置模块中的数据寄存器,一个周期后寄存在数据寄存器中的配置数据被写入缓存模块中,缓存模块的状态变为非空状态。检测到缓存模块的状态为非空状态后,配置电路进入数据移位状态,将从AHB系统中输入并存储在缓存模块的数据位宽为32bit的FPGA配置数据以字为单位写入相应的32bit寄存器中,并将此寄存器中的数据分四次移位输出到FPGA的SELECTMAP从接口,每次数据大小为1字节。同时配合CCLK产生状态机生成符合要求的CCLK信号,CCLK信号上升沿位于数据信号的中间。当没有数据输出到FPGA中时,不产生CCLK信号,从而保证了FPGA的非连续配置。当进行完4次移位输出后,进入步骤(六)。
步骤(六)、当主控制器对长度为32bit的配置数据移位输出完成后,配置电路进入数据检查状态。在此状态下,检查缓存模块的状态并进行判断。若缓存模块处于非空状态,则重复步骤(五)。否则,若缓存模块处于空状态,则停留在步骤(六)。FPGA产生的DONE信号通过专用引脚写入寄存器配置模块中相应的状态寄存器中,CPU循环读取此状态寄存器中的值。
以上所述,仅为本发明最佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
本发明说明书中未作详细描述的内容属于本领域专业技术人员的公知技术。