一种数据加载系统的制作方法

文档序号:12363031阅读:231来源:国知局
一种数据加载系统的制作方法与工艺

本申请涉及通信技术领域,更具体的说是涉及通用处理器和加速器组成的新处理架构中的数据加载技术。



背景技术:

随着互联网业务的快速发展,对通信系统的处理能力的要求也越来越高。而由通用处理器与软件构成的传统处理架构已经不能满足通信系统的处理要求,因此,传统的处理架构正逐渐被由通用处理器与通过可编程逻辑器件实现的加速器组成的新处理架构替代。

在通用处理器与加速器构成的新处理架构中,当承载有该新处理架构的单板上电复位后,处理器需要从非易失性存储器中加载启动代码,该加速器也需要从非易失性存储器中加载配置数据。然而目前从非易失性存储器向处理器以及加速器中加载数据的过程耗时较长,从而影响到单板的启动速度;而且很容易出现由于处理器或加速器中某一个加载失败而导致另一个无法加载的情况,从而使得处理器和加速器均无法正常工作,进而导致单板的可靠性差。



技术实现要素:

本申请提供了一种数据加载系统,以提高数据加载的速度以及可靠性,进而提高单板的启动速度和可靠性。

为了实现上述目的,一方面,本申请实施例提供了一种数据加载系统。该数据加载系统包括:处理模块、非易失性存储器以及可编程逻辑器件;该处理模块以及可编程逻辑器件分别与非易失性存储器的不同数据接口相连;其中,非易失性存储器中存储有该处理模块的启动代码以及该可编程逻辑器件的配置数据;该处理模块和可编程逻辑器件在第一同步时钟作用下,同时从该非易失性存储器中分别获取启动代码以及配置数据,这样,处理模块以及可编程逻辑器件均会同时获取到加载所需的启动代码或者配置数据,从而处理模块和可编程逻辑器件可以在第一同步时钟的触发下并行进行数据加载,有利于减少加载处理模块和可编程逻辑器件所需的耗时,提高了承载处理模块和加速器的单板的启动速度。

同时,由于处理模块和可编程逻辑器件可以同时进行数据加载,而不是逐个进行数据加载,这样,即使处理模块或者某个可编程逻辑器件出现故障,也不会影响未出现故障的处理模块或可编程逻辑器件的数据加载,有利于提高数据加载的可靠性。

在一个可能的设计中,非易失性存储器使用串行外设接口SPI,且该数据加载系统还包括与处理模块相连的串行外设接口模块。其中,该串行外设接口模块的一个输入/输出管脚与该非易失性存储器的SPI接口的输入/输出管脚DQ0相连,相应的,该可编程逻辑器件与非易失性存储器的SPI接口中除该DQ0外的一个输入/输出管脚相连。由于非易失性存储器的SPI接口可以引出多个输入/输出管脚,且非易失性存储器可以通过SPI接口的两个或多个输入/输出管脚同时向外输出数据,这样,非易失性存储器可以同时向DQ0管脚以及连接可编程逻辑器件的输入/输出管脚同时向外输出数据,使得在处理模块从DQ0接收到启动代码的同时,可编程逻辑器件也可以从与非易失性存储器相连的输入/输出管脚获取配置数据。

在一个可能的设计中,数据加载系统还可以包括:时钟处理逻辑电路以及外置SPI时钟模块;这样,在处理模块未获取完所有的启动代码时,该处理模块可以控制串行外设接口模块向时钟处理逻辑电路输出第一同步时钟,以使得时钟逻辑电路将第一同步时钟分成两路后同时输出给非易失性存储器和可编程逻辑器件;当处理模块获取完所有的启动代码,处理模块控制该串行外设接口模块停止输出该第一同步时钟,这样,如果处理模块当前时刻判断出可编程逻辑器件没有加载完配置数据,则时钟处理逻辑电路可以接收来自外置SPI时钟模块输出的第二同步时钟,并将第二同步时钟分成两路后同时输出给可编程逻辑器件和非易失性存储器,从而使得可编程逻辑器件和非易失性存储器仍可以获取到同步时钟,这样,该非易失性存储器在同步时钟触发下仍可以输出的配置数据,使得可编程逻辑器件可以完成配置数据的加载。

在一个可能的设计中,触发时钟处理逻辑电路接收来自外置SPI时钟模块的第二同步时钟方式可以为:处理模块在判断出可编程逻辑器件没有加载完配置数据后,向时钟输出指示信号,以通过指示信号触发时钟处理逻辑电路接收来自外置SPI时钟模块的第二同步时钟。

或者,时钟处理逻辑电路在无法检测到与处理模块相连的串行外设接口模块输出的第一同步时钟时,且确定出可编程逻辑器件没有加载完配置数据时,切换为接收来自外置SPI时钟模块的第二同步时钟。

在一种可能的设计中,时钟处理逻辑电路将第一同步时钟分成两路与第一同步时钟相同时钟频率的同步时钟后,将分成两路的同步时钟分别输出给非易失性存储器和可编程逻辑器件,以使得非易失性存储器和可编程逻辑器件均存在一路同步时钟输入。

在一种可能的设计中,时钟处理逻辑电路将第二同步时钟分成两路与第二同步时钟相同时钟频率的同步时钟后,将分成两路的同步时钟分别输出给非易失性存储器和可编程逻辑器件,以使得非易失性存储器和可编程逻辑器件均存在一路同步时钟输入。

在一个可能的设计中,处理模块还用于先控制串行外设接口模块向非易失性存储器的DQ0发送读命令以及起始地址,使得非易失性存储器根据读命令以及起始地址从DQ0输出启动代码以及从该第二管脚输出所述配置数据,从而在处理模块从DQ0管脚获取启动代码的同时,该可编程逻辑器件可以从第二管脚获取配置数据。

在一个可能的设计中,该非易失性存储器工作在SPI的扩展协议模式下,该读命令为双输出快速读取dual output fast read命令,或者四输出快速读取quad output fast read命令,以使得非易失性存储器可以同时从SPI接口的两个或四个输入/输出管脚输出数据。

在一个可能的设计中,该读命令为dual output fast read命令,非易失性存储器连接有一个所述可编程逻辑器件,即除了该可编辑逻辑器件外,没有跟其他可编辑逻辑器件相连,该非易失性存储器中存储的每个字节的比特位7,5,3,1用于存放配置数据,且比特位6,4,2,0用于存放启动代码,这样,在同步时钟的触发下,非易失性存储器中每个字节的比特位7、5、3和比特位1可以从SPI接口中DQ1管脚依次输出,而每个字节的比特位6、4、2和比特位0可以从SPI接口中的DQ0管脚依次输出,这样,在同步时钟的触发下,在DQ0管脚输出启动代码的同时,DQ1可以输出配置数据,使得处理模块从DQ0获取启动代码的同时,非易失性存储器也可以从DQ1管脚获取配置数据。

或者,该读命令为quad output fast read命令,非易失性存储器中存储的每个字节的比特位4,0用于存放启动代码,每个字节中对应于所述第二管脚的比特位用于存放配置数据,这样,在同步时钟的触发下,在同步时钟的下降沿到达时,非易失性存储器会从SPI接口的输入/输出管脚DQ3、DQ2、DQ1和DQ0同时输出数据。同时,由于非易失性存储器中每个字节的比特位4和比特位0内的启动代码会固定从DQ0输出,这样,在同步时钟的触发下,在同步时钟的每个上升沿到达时,处理模块可以从DQ获取启动代码;而非易失性存储器存储的每个字节中其他比特位也分别对应着一个输入/输出管脚,这样,在该第二管脚所对应的比特位存储配置数据之后,在同步时钟的每个上升沿到达时,非易失性存储器会将该第二管脚对应的比特位内的配置数据从第二管脚输出,以使得可编程逻辑器件从第二管脚获取到配置数据。

在一个可能的设计中,该串行外设接口模块与所述处理模块封装成一个芯片;或者,所述串行外设接口模块被封装在南桥芯片中。

在一个可能的设计中,该时钟处理逻辑电路在接收到第一同步时钟之前,向可编程逻辑器件发送配置清空指示,该配置清空指示用于指示可编程逻辑器件清空该可编程逻辑器件中的配置数据。

在一种可能的设计中,逻辑电路在检测到承载有处理模块和可编程逻辑器件所在的单板出现冷启动时,向该可编程逻辑器件发送配置清空指示。如果单板只是热启动,可编程逻辑器件中的配置数据不会丢失,因此,在单板热启动时,不需要重新可编程逻辑器件内的配置数据,而当单板是冷启动时,可以清除可编程逻辑器件内部的配置数据,准备重新加载该可编程逻辑器件的配置数据。

在一个可能的设计中,该数据加载系统还可以包括:与处理模块相连的内存;相应的,处理模块还用于将读取到的启动代码存储到内存中。这样,当处理模块获取完用于启动该处理器的所有启动代码时,可以直接在内存中运行启动代码,以提高运行速度。

在一个可能的设计中,在封装有处理模块的处理器内部还具有只读存储器ROM,则处理模块在从非易失性存储器读取启动代码之前,执行该ROM中的初始化代码,以完成处理模块和内存的初始化。

在一种可能的设计中,当处理模块判断出可编程逻辑器件已经加载完所有配置数据,可以对可编程逻辑器件进行初始化,以实现相应业务执行。

又一方面,本发明实施例提供了一种服务器,该服务器内置有如上所述的数据加载系统。

相较于现有技术,本申请提供的方案可以实现处理器和可编程逻辑器件并行的数据加载,从而可以提高数据加载效率。同时,即使处理器或者某个可编程逻辑器件出现故障,也不会影响未出现故障的处理器或可编程逻辑器件的数据加载,提高了数据加载的可靠性。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请一种应用场景的示意图;

图2示出了服务器中一种可能的处理架构的示意图;

图3示出了服务器中另一种可能的处理架构的示意图;

图4为本申请的一种数据加载系统一个实施例的硬件架构示意图;

图5为本申请的一种数据加载方法一个实施例的流程交互示意图;

图6示出了本申请的一种数据加载系统又一个实施例的硬件架构示意图;

图7示出了SPI接口的读操作的时序示意图;

图8示出了在处理器向非易失性存储器输出的命令为dual output fast read命令的情况下,读操作的时序示意图;

图9示出了本申请的一种数据加载系统又一个实施例的硬件架构示意图;

图10示出了本申请的一种数据加载方法又一个实施例的流程交互示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请实施例描述的网络架构以及业务场景是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着网络架构的演变和新业务场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。

如,参见图1,其示出了本申请一种应用场景的示意图。在图1的应用场景中,数据处理系统11包括至少一台服务器110,该至少一台服务器110组成的数据处理系统可以是一个分布式服务器系统,也可以是集中的服务器集群,该数据处理系统中的不同服务器110之间可以通过网络互连,该网络可以是互联网、因特网协议存储区域网络(IP SAN,Internet Protocol Storage Area Network)、内联网以及私有网络等等。

该数据处理系统11中的任意一台服务器110均可以执行数据处理任务。

如,服务器110可以接收客户端12通过网络发送的数据处理请求,并基于该数据处理请求进行数据处理。

又如,在该数据处理系统中还可以包括有调度服务器(图中未画出),调度服务器负责为该至少一台服务器110分配数据处理任务,以实现数据处理。

其中,为了提高数据处理性能,该服务器110中具有由处理器和加速器构成的新处理架构。在该新处理架构中,处理器负责完成复杂的协议处理和用户接口功能;该加速器完成复杂的数据处理操作,例如加解密、压缩解压缩等。其中,加速器可以为可编程逻辑器件,如,加速器可以为现场可编程门阵列(FPGA,Field-Programmable Gate Array)。

其中,该处理器和加速器一般会设置在一个单板上。如图2,其示出了由处理器和加速器构成的一种单板架构示意图。在该种单板架构中,包括处理器201、加速器(如,可以为FPGA)202和内存203,加速器202作为处理器201的外围设备,且处理器201与加速器202相连。如,处理器和加速器可以通过外设组件互联快速通道PCIe(PCI Express,Peripheral Component Interconnect Express)相连。同时,该处理器201与内存203相连。

随着半导体工艺的发展,目前已经出现了将处理器内核与加速器集成到一个芯片中的趋势,并有相关产品出现。将处理器内核与加速器集成到一个芯片中有利于提高芯片应用的灵活性,降低对单板面积的占用。如图3,处理器内核301与加速器302(如,可以为FPGA)集成到一个芯片中,处理器301内核可以与加速器302通过片上总线实现相连,相应的,该处理器内核同样与内存303相连。

需要说明的是,由处理器和加速器构成的新处理架构中,加速器数量并不限于一个,也可以在该新处理器架构中包括多个加速器的情况。如,由处理器和两个加速器构成的新处理架构,或者,由处理器与三个或四个加速器构成的新处理架构,而图2和图3仅仅是以处理结构中包含一个加速器为例进行说明,但是当该新处理架构中具有多个加速器时,任意一个加速器与处理器之间的连接关系均可以参照图2和图3所示,在此不再赘述。

本申请所描述的数据处理系统可以适用于大数据分析、云计算、网络安全等多种数据处理场景中。

可以理解的是,当服务器具有由处理器和加速器构成的新处理架构时,当承载有该新处理架构的单板上电复位后,该处理器需要从该单板上承载的非易失性存储器中加载启动代码;而加速器也需要从该非易失性存储器中加载配置数据,只有当处理器和所有的加速器都加载完成,整个单板才能开始工作。然而现有的方式一般都是逐个对处理器和加速器进行数据加载,如,处理器先加载启动代码,待处理器完成启动代码的加载之后,由处理器控制加速器进行配置数据的加载;或者是,加速器先加载配置数据,待加速器完成配置数据的加载之后,处理器才可以加载启动代码,可见,按照现有的方式完成单板的数据加载所需的时长是处理器和所有加速器各自加载数据所需时长的总和,使得单板完成数据加载的耗时较长,从而使得单板的启动速度较慢;同时,由于逐个对处理器和加速器进行加载,只有前一个器件完成数据加载,下一个器件才可以进行数据加载,这样,如果前面一个器件出现故障导致数据加载失败,那么其他尚未加载数据的器件也无法进行数据加载,从而导致未出现故障的器件由于无法加载数据而无法正常工作,导致单板的可靠性差。

为了提高单板启动的速度,并提高单板的可靠性,本申请实施例提供了一种数据加载系统。该数据加载系统可以设置于图1所示的服务器中。参见图4,其示出了本申请一种数据加载系统一个实施例的组成结构示意图,本实施例的数据加载系统可以包括:

处理模块401、非易失性存储器402以及至少一个可编程逻辑器件403。处理模块401与可编程逻辑器件403分别与该非易失性存储器402的不同数据接口相连。其中,该处理模块可以理解为处理器中的处理器核(core),该处理模块通常跟其他模块(如DSP、GPU等)封装在一块芯片中,这块芯片通常被称为处理器(processor)。

在本申请实施例中,该可编程逻辑器件用于实现加速器的功能。

可选的,该可编程逻辑器件可以为现场可编程逻辑门阵列(FPGA,Field -Programmable Gate Array)。

该非易失性存储器具体可以根据需要设定,在一种可能的情况中,该非易失性存储器可以为闪存,当然,该非易失性存储器也可以为其他形式的存储器。其中,该非易失性存储器403中存储有处理模块的启动代码以及可编程逻辑器件的配置数据;

该处理模块401和可编程逻辑器件403用于在第一同步时钟作用下,同时从非易失性存储器403中分别获取启动代码以及配置数据。

可以理解的是,在第一同步时钟的触发下,该处理模块和可编程逻辑器件会同时从非易失性存储器中读取各自加载所需的数据,该处理模块读取启动代码,而该可编程逻辑器件会读取配置数据。

具体的,非易失性存储器402,用于在第一同步时钟的触发下,在第一同步时钟的每个时钟周期内均会在通过与处理模块401相连的数据接口向该处理模块401传输该启动代码的同时,通过与可编程逻辑器件403相连的数据接口向该可编程逻辑器件403传输该配置数据。

相应的,该处理模块401,用于在第一同步时钟的触发下,在该第一同步时钟的每个时钟周期内,读取该非易失性存储器传输的启动代码;该可编程逻辑器件402,用于在该第一同步时钟的触发下,在该第一同步时钟的每个时钟周期内,读取该非易失性存储器传输的配置数据。这样,在第一同步时钟的每个时钟周期内,非易失性存储器和处理模块均会获取到各自所需加载的数据。

可以理解的是,非易失性存储器在第一同步时钟的触发下,可以是第一同步时钟的上升沿或者下降沿到达时,从自身存储的数据中获取当前需要输出给处理模块的启动代码以及当前需要输出给可编程逻辑器件的配置数据,并分别通过不同的数据接口同时向外输出启动代码和配置数据。如,如果非易失性存储器在第一同步时钟的上升沿到达时,输出启动代码和配置数据,则该处理模块和可编程逻辑器件会在该上升沿之后紧邻的下降沿到达时,同时从非易失性存储器中获取启动代码或配置数据;如果非易失性存储器在第一同步时钟的下降沿到达时,输出启动代码和配置数据,则该处理模块和可编程逻辑器件会在该下降沿之后紧邻的上升沿到达时,接收到启动代码或配置数据,从而使得处理模块和可编程逻辑器件会同时接收到非易失性存储器输出的数据。

可选的,为了在第一同步时钟的上升沿或下降沿到达时,非易失性存储器可以及时向数据接口输出数据,非易失性存储器每次可以从非易失性存储器的内部存储单元中读取一字节的数据,该一字节内按照如下规则存储处理模块的启动代码和可编程逻辑器件的配置数据:一个比特的启动代码与一个比特的可编程逻辑器件的配置数据相邻,且任意两个比特的启动代码之间包括该至少一个可编程逻辑器件对应的至少一个比特的配置数据。

举例说明,以该新处理架构包括处理模块和一个可编程逻辑器件为例,一个字节内包括八个比特,依次命名为bit0-bit7,则在非易失性存储器中存储的第一个字节内,bit7可以是可编程逻辑器件的配置数据中第1个字节的第1个bit,bit6可以是处理模块的启动代码中第1个字节的第1个bit,bit5是可编程逻辑器件的配置数据中第1个字节的第2个bit,bit4是处理模块的启动代码中第1个字节的第2个bit,以此类推,该非易失性存储器存储的第一个字节内bit1是可编程逻辑器件的配置数据中第1个字节的第4个bit,bit0为处理模块的启动代码中第1个字节的第4个比特。当然,非易失性存储器中的其他字节内也采用一比特的可编程逻辑器件的配置数据与一比特的处理模块的启动代码交替存储。

相应的,在该非易失性存储器每次读取了一个字节的数据之后,可以将该一字节的数据进行缓存,这样,每次需要向数据接口输出数据时(如,在同步时钟的上升沿或下降沿到达时),可以从缓存的一字节数据中取出当前需要输出的数据,并向数据接口输出从缓存中取出的数据。

进一步的,非易失性存储器在第一同步时钟的上升沿或下降沿达到时,从该非易失性存储器的缓存中获取当前待输出至处理模块的启动代码以及待输出至可编程逻辑器件的配置数据,具体可以为:

从非易失性存储器的缓存中获取连续的指定数量个比特的待输出数据,该指定数量个比特的待输出数据包括:该处理模块对应的一个比特的启动代码以及该至少一个可编程逻辑器件对应的至少一个比特的配置数据。

在一种可能情况中,该指定数量与该非易失性存储器连接的处理模块和可编程逻辑器件的总个数相同,如,非易失性存储器连接处理模块和一个可编程逻辑器件时,该指定数量为2,则需要连续读取该处理模块的启动代码中的一比特数据以及该可编程逻辑器件的配置数据中的一比特数据;当非易失性存储器连接处理模块和三个可编程逻辑器件时,该指定数量为4,则需要连续读取该处理模块的启动代码中的一比特的数据,以及这三个可编程逻辑器件各自的配置数据中的一比特的数据。

可选的,在本申请中该非易失性存储器可以具有串行外设接口(SPI,Serial Peripheral Interface),如,具有SPI接口的闪存。该非易失性存储器的SPI接口可以包括用于进行数据交互的数据线,该数据线也可以称为输入/输出管脚,在本申请实施例中,当非易失性存储器具有SPI接口时,该处理模块和可编程逻辑器件可以连接到该非易失性存储器的SPI接口中不同输入/输出管脚上,此时,以上提到的数据接口就相当于输入/输出管脚。

进一步的,本申请实施例中该非易失性存储器支持SPI的扩展协议(extended SPI协议),这样,非易失性存储器的SPI接口可以具有多个输入/输出管脚。

相应的,为了使得处理模块能够向非易失性存储器发送读命令以及读操作的起始地址等信息,处理模块可以连接有串联外设接口模块(图中未画出),而该串行外设接口模块的一个输入/输出管脚与非易失性存储器的SPI接口的输入/输出管脚DQ0相连。具体的,处理模块连接的串行外设接口模块引出有多条输入/输出管脚(也称为输入输出线),则该串行外设接口模块的一个输入/输出管脚可以与非易失性存储器的SPI接口中的输入/输出管脚DQ0相连。该处理模块可以通过与该串行外设接口模块接收非易失性存储器从该输入/输出管脚DQ0输出的启动代码。一般情况下,在非易失性存储器的SPI接口具有四个输入输出管脚,该四个输入输出管脚分别命名为DQ0、DQ1、DQ2和DQ3,由于输入/输出管脚DQ0可以用于传输读操作命令和起始地址,因此,通常该处理模块连接的外设接口模块中的一个输入/输出管脚会与该非易失性存储器的SPI接口中的输入/输出管脚DQ0相连。

其中,与该处理模块相连的串行外设接口模块可以被封装在南桥芯片中;也可以是将该串行外设接口模块与处理模块封装成一个芯片,如,将串行外设接口模块和处理模块封装成一个处理器芯片。

而可编程逻辑器件由于无需向非易失性存储器发送读命令,所以该可编程逻辑器件可以采用普通的接口即可。如,可编程逻辑器件可以设置一个用于加载配置数据的加载数据接口,则可编程逻辑器件的加载数据接口与非易失性存储器的SPI接口中除该DQ0管脚之外的一个输入/输出管脚相连。为了便于区分,将非易失性存储器的SPI接口中与可编程逻辑器件相连的输入/输出管脚称为第二管脚,如,该第二管脚可以为非易失性存储器的SPI接口中的DQ1、DQ2和DQ3中一个。相应的,可编程逻辑器件可以获取非易失性存储器通过第二管脚输出的配置数据。进一步的,该处理模块还可以用于,在非易失性存储器首次输出启动代码和配置数据之前,向非易失性存储器的DQ0管脚发送读命令以及读操作的起始地址,以使得所述非易失性存储器根据该读命令以及该起始地址从DQ0输出所述启动代码以及从所述第二管脚输出所述配置数据。

可选的,在本申请实施例的加载系统还包括:与该处理模块401相连的内存404。

其中,该处理模块401,还用于将读取到的该启动代码存储到该内存404中,并当获取到用于启动该处理模块所需的所有启动代码时,在该内存中运行该启动代码。

具体的,处理模块确定出当前已经获取到启动处理模块所需的所有启动代码,则可以直接在内存中运行获取到的所有启动代码,处理模块开始启动。为了便于描述,以处理模块封装在处理器芯片为例进行介绍。则本申请的新处理架构中的单板上承载有处理器和加速度。可选的,在承载处理器和加速器的单板上电复位后,需要先进行处理器和内存的初始化。为了使处理器每次启动都有一个默认的起点,而不会受到外部存储器的影响,可以通过处理器内部的只读存储器(ROM,Read-Only Memory)中的指令完成处理器、内存的初始化。具体的,该处理器还用于,在读取非易失性存储器传输的启动代码之前,执行处理器中ROM中的初始化代码,以完成处理器和该内存的初始化。

基于图4的数据加载系统,并以处理模块封装在处理器中为例,本申请实施例还提供了一种数据加载方法。参见图5,其示出了本申请一种数据加载方法一个实施例的流程示意图,本实施例的方法可以包括:

501,在处理器上电复位后,处理器执行该处理器内部ROM中的初始化代码,以完成处理器和内存的初始化。

在承载有处理器和可编程逻辑器件的单板上电复位后,处理器也进行上电复位。

通过执行ROM中的代码,可以修改处理器、内存等所需的工作模式,例如,修改处理器运行的时钟频率,还可以设置内存控制器和内存的工作参数。如果使能了内存的检错和纠错(ECC,Error Checking and Correction),还需要将内存单元的内容清零。

该步骤501为可选步骤,并不属于数据加载的过程。

502,非易失性存储器在第一同步时钟的触发下,从非易失性存储器的缓存中获取当前待输出至处理器且用于启动该处理器的启动代码,以及当前待输出至可编程逻辑器件且用于配置该可编程逻辑器件的配置数据,并在通过与处理器相连的数据接口向该处理器传输该启动代码的同时,通过与可编程逻辑器件相连的数据接口向该可编程逻辑器件传输该配置数据。

具体的,可以是在第一同步时钟的上升沿或下降沿到达时,同时向与处理器相连的数据接口输出启动代码,并向与可编程逻辑器件相连的数据接口输出配置数据,从而在第一同步时钟的每个时钟周期内,该非易失性存储器均会同时向外输出启动代码和配置数据。

503,处理器在第一同步时钟的触发下,读取该非易失性存储器传输的启动代码。

504,可编程逻辑器件在该第一同步时钟的触发下,读取该非易失性存储器传输的配置数据。

如,当非易失性存储器在同步时钟的下降沿输出启动代码和配置数据时,则处理器和可编程逻辑器件可以在同步时钟的上升沿到达时,分别读取该非易失性存储器输出的启动代码和配置数据;如果非易失性存储器在同步时钟的上升沿到达时输出启动代码和配置数据,则在同步时钟的下降沿到达时,触发处理器和可编程逻辑器件同时读取非易失性存储器输出的数据,以使得处理器读取该非易失性存储器输出的启动代码,且该可编程逻辑器件读取该非易失性存储器输出的配置数据。

需要说明的是,该步骤503和步骤504是同时执行的,可以理解的是,此处的“同时”可以理解为本领域技术人员所理解的在第一同步时钟的上升沿或下降沿到达时,同时触发处理器和可编程逻辑器件分别执行该步骤503和504。当然,在实际应用中,“同时”可以理解为是在第一同步时钟的同一个时钟周期内同时执行,允许有一定的偏差。

505,处理器将读取到的启动代码存储到内存中。

可以理解的是,在处理器获取到所有启动代码之前,该处理器会重复执行该步骤503和505。

506,当处理器确定当前已获取到处理器的所有启动代码时,在内存中运行该启动代码。

其中,步骤505和506为可选步骤。处理器将启动代码直接存储到内存中,有利于在获取到全部启动代码之后,直接在内存中运行启动代码,以提到运行速度。

可选的,在该步骤504之后,当可编程逻辑器件获取到该可编程逻辑器件所需的全部配置数据之后,处理器还可以控制该可编程逻辑器件依据该配置数据进行初始化。

可以理解的是,在本申请实施例中,该第一同步时钟的产生方式可以有多种。

在一个示例中,该第一同步时钟可以是处理器的内部时钟所输出的时钟信号。在该种情况下,处理器还可以与非易失性存储器的时钟输入端口相连,且该处理器还与该可编程逻辑器件的加载时钟接口相连。相应的,处理器可以向非易失性存储器的时钟输入端口以及可编程逻辑器件的加载时钟接口输出该处理器的时钟信号,使得处理器、可编程逻辑器件以及非易失性存储器均基于该处理器的时钟信号进行数据读取或输出。

可选的,在处理器中封装的处理模块连接有串行外设接口模块的情况下,该第一同步时钟可以为SPI同步时钟,则该串行外设模块还可以用于:在该处理模块的控制下输出该第一同步时钟。

相应的,非易失性存储器的SPI接口除了包括多个用于进行数据交互的数据输入输出管脚(SPI接口引出的数据线)之外,还可以包括时钟输入管脚,该时钟输入管脚也可以称为时钟输入线。则,该处理模块连接的该串行外设接口模块除了具有输入输出管脚之外,还具有一个时钟输出管脚,该串行外设接口模块的时钟输出管脚与非易失性存储器的SPI接口中的时钟输入管脚以及可编程逻辑器件的加载时钟接口相连,从而使得非易失性存储器和可编程逻辑器件可以接收到第一同步时钟。在另一个示例中,本申请实施例的数据加载系统还可以包括一个时钟处理逻辑电路以及外置时钟模块,该时钟处理逻辑电路可以与封装有处理模块的处理器以及该外置时钟模块相连,时钟处理逻辑电路可以根据需要选择处理器或外置时钟模块输入的时钟信号作为数据加载系统所需的时钟信号,并基于选择的时钟信号,向该可编程逻辑器件以及非易失性存储器输出同步时钟。

为了便于理解,下面以处理模块和与该处理模块相连的串行外设接口模块封装在一个处理器芯片中为例进行说明。如,参见图6,其示出了本申请实施例一种数据加载系统另一个实施例的组成结构示意图。

在本实施例中该数据加载系统包括处理器601,可编程逻辑器件602,非易失性存储器603以及与该处理器601、可编程逻辑器件602以及非易失性存储器603相连的时钟处理逻辑电路604。

在本实施例中,该处理器601封装有以上实施例所述的处理模块以及与该处理模块相连的串行外设接口模块,其中,该串行外设接口模块可以在处理模块的控制下向时钟处理逻辑电路输出第一同步时钟。因此,该处理器用于实现以上实施例中描述的处理模块的相关操作之外,该处理器还用于将串行外设接口模块输出的第一同步时钟信号输出给该时钟处理逻辑电路604。其中,该串行外设接口模块输出的第一同步时钟为SPI时钟信号。

该时钟处理逻辑电路604,用于将接收到的第一同步时钟分成两路后同时输出给该可编程逻辑器件以及该非易失性存储器,以使得可编程逻辑器件和非易失性存储器件均输入一路第一同步时钟信号。

可选的,时钟处理逻辑电路将第一同步时钟分成两路可以是基于该接收到的第一同步时钟,分别向非易失性存储器以及可编程逻辑器件输出与该处理器的时钟信号相同时钟频率的同步时钟。

具体的,时钟处理逻辑电路可以依据处理器输出的第一同步时钟,分别生成两路同步时钟,这两路时钟信号的时钟频率均与处理器输出的第一时钟具有相同的时钟频率,同时,时钟处理逻辑电路将这两路同步时钟中的一路输出给非易失性存储器,并将另一路同步时钟输出给可编程逻辑器件。

相应的,该非易失性存储器接收到的同步时钟为该时钟处理逻辑电路输出的同步时钟;该可编程逻辑器件也是基于该时钟处理逻辑电路输出的同步时钟,读取该非易失性存储器传输的配置数据。

在本实施例中,该时钟处理逻辑电路可以采用复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)或者专用电路实现,在此不加以限制。

可以理解的是,一般情况下,处理器的启动代码的数据量会大于可编程逻辑器件所需的配置数据的数据量,这样,处理器加载数据所需的时长会大于可编程逻辑器件加载数据所需的时长,而处理器在加载启动代码的过程中,会一直向外输出第一同步时钟,从而使得整个数据加载系统可以基于该第一同步时钟进行数据的输出与读取,完成处理器以及所有可编程逻辑器件的数据加载。

然而,在一些特殊的情况下,可编程逻辑器件的配置数据的数据量也可能会大于该处理器的启动代码的数据量,从而使得处理器加载数据所需的时长会短于可编程逻辑器件加载数据所需的时长。这样,当处理器完成启动代码的加载时,便不会再向外输出第一同步时钟。具体的,当处理器中封装的处理模块获取完启动所需的所有启动代码后,该处理模块控制串行外设接口模块停止输出第一同步时钟。相应的,在处理器获取到所需的所有启动代码之后,非易失性存储器以及可编程逻辑器件就无法基于第一同步时钟进行数据输出或读取。为了解决该问题,该数据加载系统还可以包括:与该时钟处理逻辑电路相连的外置时钟电路605。可选的,该外置时钟电路可以为外置SPI时钟模块。

其中,该外置时钟电路可以向时钟处理逻辑电路输出第二同步时钟,在该外置时钟电路为外置SPI时钟模块的情况下,该第二同步时钟为SPI同步时钟。其中,该第二同步时钟可以与第一同步时钟的时钟频率相同,也可以与第一同步时钟的时钟频率不同,具体可以以非易失性存储器和可编程逻辑器件对时钟频率的要求为准。

为了使得时钟处理逻辑电路可以确定当前需要切换到接收该外置时钟电路输出的第二同步时钟,可选的,在本申请实施例中,该可编程逻辑器件,还用于在确定出当前获取到用于配置该可编程逻辑器件所需的所有配置数据时,向该时钟处理逻辑电路输出加载完成指示,该加载完成指示用于指示该可编程逻辑器当前获取到所需的所有配置数据。

相应的,该时钟处理逻辑电路,还用于当确定出处理器获取到所有启动代码,且可编程逻辑器件尚未发送加载完成指示时,接收来自该外置时钟电路输出的第二同步时钟,并将第二同步时钟分成两路后同时输出给非易失性存储器和可编程逻辑器件,以使得可编程逻辑器件和非易失性存储器均可以接收到一路同步时钟。可选的,时钟处理逻辑电路可以根据第二同步时钟,生成与该第二同步时钟的时钟信号相同时钟频率的两路同步时钟。

可见,在处理器终止输出第一同步时钟时,可编程逻辑器件以及非易失性存储器中接收到的同步时钟是基于该外置时钟电路输出的第二同步时钟生成的同步时钟。如图6中,CLK表示处理器输出的第一同步时钟,而MCLK表示外置时钟电路输出的第二同步时钟。

其中,该第一同步时钟和第二同步时钟仅仅为为了区分处理器输出的同步时钟以及外置时钟电路输出的同步时钟。其中,时钟处理逻辑电路确定处理器获取完所有启动代码的方式可以有多种:

如,处理器获取到所有的启动代码之后,可以向时钟处理逻辑电路发送指示信号,以通过该指示信号将处理器获取到所有启动代码的信息通知给该时钟处理逻辑电路。

又如,时钟处理逻辑电路可以检测当前是否能够接收到处理器输出的第一同步时钟,如果超过指定时长未接收到该处理器输出的第一同步时钟,则时钟处理逻辑电路确定处理器已经获取到所有启动代码,不会再输出时钟信号。

需要说明的是,非易失性存储器中存储有处理器的启动所需的启动代码的总数据量,处理器可以预先从该非易失性存储器中读取出启动代码的总数据量,这样,处理器可以依据该总数据量确定当前是否已经获取到所有的启动代码;相应的,可编程逻辑器件也可以预置所需配置的配置数据的总数据量,并依据配置数据的总数据量,检测当前是否已经获取到所有的配置数据。

可以理解的是,由该时钟处理逻辑电路在确定出处理器获取到所有启动代码,且可编程逻辑器件尚未发送加载完成指示时,切换接收外置时钟电路仅仅是一种实现方式。在实际应用中,也可以由处理器中的处理模块来触发该时钟处理逻辑电路进行同步时钟的切换,具体的,处理器中封装的处理模块在获取完所有启动代码时,可以判断可编程逻辑器件是否加载完所有配置数据。相应的,时钟处理逻辑电路可以在处理模块判断出可编程逻辑器件没有加载完配置数据时,接收来自该外置时钟电路输出的第二同步时钟,并将第二同步时钟分成两路后同时输出给可编程逻辑器件以及非易失性存储器。

其中,处理器判断可编程逻辑器件是否加载完所有配置数据的方式同样可以有多种,如,处理器可以检测时钟处理逻辑电路是否接收到该可编程逻辑器件发送的加载完成指示,如果处理器在获取完所有启动代码时,该可编程逻辑器件尚未向该时钟处理逻辑电路发送加载完成指示,则处理器可以向时钟处理逻辑电路发送指示信号,以指示时钟处理逻辑电路切换为接收外部时钟电路输出的第二同步时钟。

可以理解的是,图6是以数据加载系统包含有一个可编程逻辑器件为例进行介绍,在实际应用中,该数据加载系统也可以包括有多个可编程逻辑器件,不同的可编程逻辑器件连接到该非易失性存储器的不同的第二管脚上,且每个可编程逻辑器件分别与该时钟处理逻辑电路的不同管脚相连。相应的,时钟处理逻辑电路可以根据数据加载系统中包括的可编程逻辑器件以及非易失性存储器的总数量,将接收到的第一同步时钟或第二同步时钟分成相应数量路的同步时钟。如。可编程逻辑器件为两个时,则数据加载系统中可编程逻辑器件和非易失性存储器的总数量为三个,则时钟处理逻辑电路可以将第一同步时钟分成三路并分别输出给该非易失性存储器以及两个可编程逻辑器件。

相应的,在可编程逻辑器件为多个的情况下,当处理器获取完所有启动代码时,只要存在可编程逻辑器件尚未获取完自身所需的所有配置数据,则时钟处理逻辑电路仅需要切换到接收该第二同步时钟。可选的,在图6实施例中,该数据加载系统同样可以包括与处理器相连的内存605,在该种情况下,处理器可以将读取到的启动代码存储到内存中,并在获取到所有启动代码时,直接在内存中运行该启动代码。相应的,处理器获取完所有启动代码可以理解为处理器将所有启动代码都加载到内存中。

可选的,在本实施例中,为了避免可编程逻辑器件中存在上一次数据加载所残留的配置数据,该时钟处理逻辑电路还用于,在接收到处理器输出的第一同步时钟之前,向可编程逻辑器件发送配置清空指示,该配置清空指示用于指示该可编程逻辑器件清空该可编程逻辑器件中的配置数据。

进一步的,考虑到可编程逻辑器件只有在重新上电的时候才需要再次加载,如果承载处理器和可编程逻辑器件的单板只是热启动,则可编程逻辑器件的配置数据不会丢失,可编程逻辑器件不需要重新加载配置数据。而时钟处理逻辑电路可以识别冷启动或热启动,因此,该时钟处理逻辑电路具体用于,在检测到处理器和该至少一个可编程逻辑器件所在的单板出现冷启动时,向该可编程逻辑器件发送该配置清空指示。当然,时钟处理逻辑电路在确定出单板为冷启动时,才向可编程逻辑器件输出同步时钟,如果单板为热启动,则无需向可编程逻辑器件输出同步时钟,以避免可编程逻辑器件重新加载。

需要说明的是,在非易失性存储器并行读取启动代码和配置数据,以使得处理器中的处理模块以及可编程逻辑器件同时从非易失性存储器中分别获取启动代码和配置数据的过程可以参见前面实施例的相关介绍,在此不再赘述。

可以理解的是,在本申请实施例中,非易失性存储器同样具有SPI接口,具体与前面实施例介绍的相似。

在本实施例中,时钟处理逻辑电路的一个时钟输入端口与该处理器中封装的串行外设接口模块的时钟输出管脚相连,且该时钟处理逻辑电路的另一个时钟输入端口与外置时钟电路的时钟输出管脚相连;同时,该时钟处理逻辑电路还包括至少两个时钟输出端口,其中,非易失性存储器中SPI接口的时钟输入管脚以及可编程逻辑器件的加载时钟接口分别连接到逻辑电路的不同时钟输出端口上。

进一步的,在处理器封装有处理模块的前提下,处理器还可以控制非易失性存储器从哪几个输入/输出端口输出数据,具体的,SPI接口工作在主从方式,包括4个信号:

CLK:时钟信号,由主设备发给从设备,提供命令、地址和数据传送的同步功能,从设备在CLK的上升沿采样输入的命令、地址和数据(即,写操作),在CLK的下降沿输出数据(即,读操作)。

MOSI:由主设备输出给从设备的命令、地址或数据,高位在前。

MISO,由从设备发给主设备的数据,高位在前。

CS,由主设备发给从设备的片选信号,低电平有效。

如,参见图7,其示出了SPI接口的读操作的时序示意图。其中,对于读操作来说,主设备在访问从设备时,主设备先送出命令,然后是起始地址,最后由从设备连续输出数据。在本申请实施例中,在进行读操作过程中,该主设备为处理器,该从设备可以为非易失性存储器。

在非易失性存储器支持extended SPI协议的情况下,非易失性存储器的SPI接口可以包括多个用于数据交互的输入/输出管脚。具体的,该非易失性存储器可以具有四个输入/输出管脚,这四个输入/输出管脚分别定义为DQ0、DQ1、DQ2和DQ3,则非易失性存储器可以从一个、两个或四个输入输出管脚输出数据。

当然,在本申请实施例中该非易失性存储器的SPI接口中至少有两个输入/输出管脚分别与该处理器和至少一个可编程逻辑器器件相连,因此,本申请实施例中,处理器可以控制非易失性存储器从两个或四个输入/输出管脚同时输出数据。具体的,非易失性存储器可以根据处理器(或者说处理器中处理模块)的读命令,来确定从哪几个输入输出管脚输出数据,因此,在非易失性存储器首次输出启动代码和配置数据之前,该处理器还可以通过与非易失性存储器相连的输入/输出管脚DQ0向该非易失性存储器发送相应的读命令。其中,该读命令可以为双输出快速读取(dual output fast read)命令,或者四输出快速读取(quad output fast read)命令

当非易失性存储器连接有一个处理器和一个可编程逻辑器件的情况下,在一种实现方式中:

该处理器可以向非易失性存储器发送dual output fast read命令,在该种情况下,非易失性存储器仅仅从两个输入/输出管脚输出数据,该两个输入/输出管脚分别为非易失性存储器的SPI接口中连接有处理器的DQ0管脚以及该DQ0管脚之外且连接有可编程逻辑器件的输入/输出管脚。如,非易失性存储器的输入输出管脚DQ0与处理器封装的串行外设接口模块的一个输入/输出管脚相连,且非易失性存储器的输入/输出管脚DQ1与一个可编程逻辑器件相连,这样,在非易失性存储器在同步时钟的触发下,会同时获取处理器的一比特启动代码以及可编程逻辑器件的一比特的配置数据,并在向DQ0输出该一比特的启动代码的同时,从DQ1输出该一比特的配置数据。

如图8,其示出了在处理器向非易失性存储器输出的命令为dual output fast read命令的情况下,读操作的时序示意图。

由图8可以看出,在处理器向非易失性存储器发送有效的片选信号之后,该非易失性存储器被选中,且在处理器发出dual output fast read命令以及读操作的起始地址之后,非易失性存储器会依据该起始地址进行数据读取。需要说明的是,非易失性存储器每次从内部存储单元中读取出一字节的数据,并将读取出的该一字节数据进行缓存,当非易失性存储器需要向输入/输出管脚输出数据时,可以从缓存的一字节中读取当前需要输出的两个比特的数据。如果当前缓存的一字节内的所有比特的数据均已经被输出时,非易失性存储器可以再次从内部存储单元中读取一字节数据并缓存,如此循环,直至内部内存单元中的数据均被读取并输出。

其中,每次读取出的一字节的数据中交替存储着一比特的启动代码和一比特的配置数据。如,一个字节一般包括八个比特位,这八个比特位从高位到低位依次为比特位7、比特位6、比特位5、比特位4、比特位3、比特位2、比特位1和比特位0,即,一字节包括bit7到bit0这八个比特位,则一个字节中bit7存储的为配置数据,那么bit6存储的为启动代码;相应的,bit5存储的为配置数据,而bit4存储的为启动代码,依此类推,bit3和bit1存储配置数据,而bit2和bit0存储启动代码。具体的,在将处理器启动所需的所有启动代码以及可编程逻辑器件所需的所有配置数据存储到非易失性存储器之前,可以分别所有启动代码和所有配置数据进行拆分,以将启动代码和配置数据分别拆分成多个比特的数据段,其中,启动代码拆分出的每个数据段对应着一比特的启动代码,配置数据拆分出的每个数据段对应着一比特的配置数据,然后在非易失性存储器中采用一比特的配置数据以及一比特的启动代码交替存储的方式进行存储。

在启动代码和配置数据交替存储的情况下,该非易失性存储器的SPI接口中输入/输出管脚DQ0与处理器中封装的串行外设接口模块中的一个输入输出管脚相连,而非易失性存储器的SPI接口的输入/输出管脚DQ1可以与该可编程逻辑器件的加载数据接口相连。由图8可以看出,非易失存储器在会接收到dual output fast read命令之后,在同步时钟(该同步时钟可以为第一同步时钟也可以为第二同步时钟)的触发下,每次将一字节中连续两个比特位的数据分别向DQ0和DQ1输出,由图8可见,在同步时钟的触发下,DQ0和DQ1每次会同时向外输出数据,从而使得处理器和可编程逻辑器件在同一个时钟周期内接收到启动代码或配置数据。例如,非易失性存储器在将bit7中的配置数据通过DQ1输出的同时,将bit6中的启动代码通过DQ0输出,依此类推。

在非易失性存储器仅连接处理器和一个可编程逻辑器件的情况下,在另一种实现方式中:

该处理器发出的命令也可以是四输出快速读取(quad output fast read)命令,如,处理器通过DQ0向非易失性存储器发送该命令和起始地址,在该种情况下,非易失性存储器会同时从四个输入/输出管脚输出数据,即,DQ0、DQ1、DQ2和DQ3同时输出数据。然而由于非易失性存储器中只有两个输入/输出管脚分别连接有处理器和可编程逻辑器件,而另外两个输入/输出管脚并没有连接可编程逻辑器件,因此,非易失性存储器可以向未连接有处理器或可编程逻辑器件的输入/输出管脚输出无效数据。

可选的,非易失性存储器内可以按照如下方式进行数据存储:

每个字节包括两个数据区,每个数据区包括连续的四比特数据,且该连续的四比特数据中包括一比特的处理器的启动代码、一比特的可编程逻辑器件的配置数据以及两比特的无效数据。换言之,每个字节中两比特的处理器的启动代码之间包括一比特的可编程逻辑器件的配置数据以及两比特的无效数据。

这样,非易失性存储器在同步时钟触发下,每次会从缓存中获取一个数据区对应的连续四比特数据进行输出。

当然,一个数据区对应的连续四比特数据中启动代码、配置数据以及无效数据的顺序与处理器和可编程逻辑器件连接的非易失性存储器中的输入/输出管脚有关。可以理解的是,非易失性存储器接收到的读命令为quad output fast read命令时,该非易失性存储器会同时从DQ3、DQ2、DQ1和DQ0输出数据,而非易失性存储器中存储的每个字节中每个比特位分别对应着该非易失性存储器的SPI接口的一个输入/输出管脚,即,每个字节内的某个比特位的数据是固定从该非易失性存储器的SPI接口中的一个输入/输出管脚输出的。具体的,每个字节中比特位7和比特位3的数据从非易失性存储器的SPI接口中的DQ3输出,每个字节的比特位6和比特位2的数据从DQ2输出,每个字节的比特位5和比特位1的数据从DQ1输出,而每个字节的比特位4和比特位0的数据从DQ0输出。

由于处理器是与非易失性存储器的SPI接口中的DQ0相连的,而每个字节中的比特位4和比特位0是固定从该DQ0管脚输出的,因此,每个字节中比特位4和比特位0用于存储一比特的启动代码;而非易失性存储器的SPI接口中连接可编程逻辑器件的第二管脚可以是DQ1、DQ2和DQ3管脚中的任意一个,因此,每个字节中对应于该第二管脚的比特位可以用于存储配置数据。

如,非易失性存储器中DQ0连接有处理器、DQ1连接有可编程逻辑器件,而DQ2和DQ3未连接可编程逻辑器件的情况下,以每个字节包括bit0-bit7这八个比特位为例,那么如果一个字节可以划分为两个数据区,其中,bit7至bit4属于一个数据区,bit3至bit0属于一个数据区,而bit7至bit4所构成的数据区中,由于bit7中数据是固定从DQ3输出,bit6中的数据会从DQ2输出,bit5中的数据会从DQ1输出,bit4中的数据会从DQ0输出,相应的,bit3至bit0的所构成的数据区中,bit3至bit0中的数据会依次从DQ3、DQ2、DQ1和DQ0输出,因此,非易失性存储器可以在一个字节内按照如下方式存储数据:

一个字节中bit7至bit4属于一个数据区,其中,bit7和bit6分别存储一比特的无效数据,bit5存储一比特的可编程逻辑器件的配置数据;而bit4存储一比特的处理器的启动代码;相应的,bit3至bit0属于一个数据区,其中,,bit3和bit2存储均存储一比特的无效数据,bit1存储一比特的可编程逻辑器件的配置数据;bit0中存储一比特的处理器的启动代码。

这样,非易失性存储器每次从内部存储单元中读取出的一字节数据并缓存,该一字节数据包含有两个数据区,因此,这两个数据区所对应的数据实际上是分别在同步时钟的两个时钟周期内输出。具体的,当非易失性存储器检测到同步时钟的下降沿到达时,可以获取缓存的一字节中当前待输出的数据区所对应的连续四比特数据,假如,当前需要输出bit7、bit6、bit5和bit4,则会从缓存的一字节获取该字节中bit7、bit6、bit5和bit4内存储的数据,并将bit7中的数据从DQ3输出,bit6中的数据从DQ2输出,bit5中的数据从DQ1输出、bit4从DQ0输出,从而使得处理器可以从DQ0获取到启动代码,可编程逻辑器件会从DQ1获取配置数据,而DQ2和DQ3则输出无效数据。

特别的,当非易失性存储器连接有一个处理器和至少两个可编程逻辑器件的情况下,由于非易失性存储器需要保证连接有处理器和可编程逻辑器件的三个输入/输出管脚同时向外输出数据,因此,处理器只能向非易性存储器输出quad output fast read命令,以控制非易失性存储器同时向四个输入/输出管脚输出数据。

其中,当非易失性存储器连接有一个处理器和两个可编程逻辑器件的情况下,该非易失存储器的SPI接口中有一个输入/输出管脚是未连接有可编程逻辑器件的,在该种情况下,非易失性存储器向该未连接有可编程逻辑器件的输入输出管脚输出的数据可以为无效数据。可选的,非易失性存储器内可以按照如下方式进行数据存储:

一个字节包括两个数据区,每个数据区对应着连续四比特数据,其中,每个数据区的连续四比特数据中包括两个可编程逻辑器件各自对应的一比特的配置数据、一比特的无效数据、一比特的处理器的启动代码。

其中,由于非易失性存储器内每个字节中bit7的数据需要从数据输入输出管脚DQ3输出,而bit6的数据需要从数据输入输出管脚DQ2输出,bit5的数据需要从数据输入输出管脚DQ1输出,而bit4的数据需要从数据输入输出管脚DQ0输出,相应的,bit3-bit0的数据也是依次从DQ3至DQ0输出。同时,由于输入/输出管脚DQ0需要与处理器中封装的串行外设接口模块的一个输入/输出管脚相连,以通过DQ0接收处理器输出的读操作命令和读起始地址,因此,对于每个数据区对应着的连续四比特数据而言,启动代码需要处于该连续四比特中的最后一个比特中,而配置数据以及无效数据的顺序与非易失性存储器中的数据输入输出管脚与可编程逻辑器件连接方式有关系。

相应的,对于非易失性存储器连接有一个处理器和三个可编程逻辑器件的情况而言,该非易失性存储器中数据存储的形式可以是一个字节包括两个数据区,每个数据区对应着连续四比特数据,且该连续四比特数据包括一比特的处理器的启动代码,以及该三个可编程逻辑器件各自对应的一比特的配置数据。

为了便于理解,以非易失性存储器为闪存、可编程逻辑器件为FPGA,并以闪存连接有两个FPGA为例进行介绍。如图9,其示出了本申请一种数据加载系统又一个实施例的组成结构示意图。

在图9中以处理模块和串行外设接口模块封装在处理器芯片中,且闪存具有SPI接口为例进行介绍。

其中,闪存901支持extended SPI协议,该闪存的SPI接口引出有四个输入/输出管脚,分别命名为DQ0、DQ1、DQ2和DQ3。其中,输入/输出管脚DQ0与处理器902的SPI接口中的输入/输出管脚相连,闪存901的一个输入/输出管脚DQ1与一个FPGA903的数据加载接口相连,闪存901的一个输入/输出管脚DQ2与另一个FPGA904的数据加载接口相连。其中,为了便于区分这两个FPGA,将这两个FPGA分别称为FPGA1和FPGA2。

同时,闪存的SPI接口中还引出一个时钟输入管脚。

处理器902的SPI接口中的时钟输出管脚与时钟处理逻辑电路905的一个时钟输入端口相连,且,该时钟处理逻辑电路905的另一个时钟输入端口与一个外置SPI时钟模块906的时钟输出端口相连。时钟处理逻辑电路的三个时钟输出端口分别与闪存的时钟输入管脚、FPGA1的加载时钟接口以及FPGA2的加载时钟接口相连。如图9所示,处理器902向该时钟处理逻辑电路905输入的同步时钟称为CLK,外置SPI时钟模块向时钟处理逻辑电路输入的同步时钟称为MCLK,时钟处理逻辑电路可以根据需要选择这两路同步时钟中的任意一路作为输入的同步时钟,并基于当前选择的同步时钟信号,生成与该选择输入的同步时钟相同频率的三路同步时钟,将这三路同步时钟分别输出给闪存、FPGA1和FPGA2。

同时,为了实现处理器、时钟处理逻辑电路之间的信息交互,处理器的一个信号交互端口还与时钟处理逻辑电路的一个信号交互端口相连,如,时钟处理逻辑电路可以是与处理器的局部总线相连,这样,处理器可以访问逻辑电路内部的寄存器,用来控制时钟处理逻辑电路的工作方式(如,切换时钟信号)或读取时钟处理逻辑电路接收到的FPGA的加载完成指示信号。

相应的,时钟处理逻辑电路的另一个信号交互端口与FPGA1的一个信号交互端口相连,且时钟处理逻辑电路的又一个信号交互端口与FPGA2的一个信号交互端口相连,以实现时钟处理逻辑电路与FPGA1和FPGA2的信号交互。如,时钟处理逻辑电路可以向FPGA发送用于指示FPGA清除FPGA内部的配置数据的指示信号PROGRAM。

与前面实施例相似,本实施例中处理器902还与内存907相连。

可以理解的是,在本实施例中,为了使得闪存可以同时向分别连接有处理器、FPGA1和FPGA2的DQ0、DQ1和DQ2同时输出数据,处理器需要向闪存中发送quad output fast read命令,这样,闪存在接收到该quad output fast read命令之后,会同时从DQ0、DQ1、DQ2和DQ3输出数据,而由于DQ3未连接任何器件,因此,可以设定闪存向DQ3输出无效数据。

而为了使得闪存可以同时向DQ3、DQ2、DQ1和DQ0同时输出数据,闪存可以按照如下形式存储数据:

每个字节包括两个数据区,每个数据区对应着连续四比特的数据,且每个数据区对应着的连续四比特数据依次为:一比特的无效数据、一比特的FPGA2的配置数据、一比特的FPGA1的配置数据、以及一比特的启动代码。

如,在闪存的SPI接口DQ0、DQ1和DQ2分别连接有处理器、FPGA1和FPGA2的情况下,每个字节内比特7和比特3可以存储无效数据;比特位6和比特位2可以存储FPGA2的配置数据;比特位5和比特位1可以存储FPGA1的配置数据;比特位4和比特位0可以存储处理器的启动代码。

在实际应用中,可以预先将处理器的启动代码的文件以及FPGA1和FPGA2的配置数据所在的文件进行拆分,然后按照上面的存储形式重新进行文件构成,这样,每次读取一字节的数据均会同时包含处理器的启动代码、FPGA1和FPGA2的配置数据,而且每次从一个字节中取出一个数据区对应的连续四比特数据时,该数据区对应的连续四比特数据可以依次为:一比特的无效数据、一比特的FPGA2的配置数据、一比特的FPGA1的配置数据以及一比特的处理器的启动代码。其中,该无效数据可以采用全零或全1代替。

可以理解的是,由于处理器的启动代码与FPGA1以及FPGA2的配置数据的数据量也不会完全相同,因此,将处理器的启动代码以及FPGA1和FPGA2的配置数据交替存储的过程中,这样就有可能出现处理器或某个FPGA的文件内的数据已经全部存储到闪存中,但是仍有某个器件所需配置的数据未被全部存储到闪存中。例如,处理器的数据量较大时,当将FPGA1和FPGA2的配置数据进行拆分按照如上的数据存储形式全部存储到闪存之后,处理器的部分启动代码却尚未被完全存储。为了保证每个数据区仍然对应着四个数据输入输出管脚的四比特数据,对于某个器件所需配置的数据已经全部存储到闪存的情况下,对于尚未存储的数据区中该器件对应的比特位可以采用全零或全1代替,而其他器件的比特位仍存储其他器件的数据。

举例说明,假设处理器的启动代码有100比特,FPGA1的配置数据有80比特,而FPGA2的配置数据有95比特,按照一个字节两个数据区,每个数据区对应的连续四个比特位中,第一个比特为无效数据,第二个比特位为一比特的FPGA2的配置数据,第三个比特位为一比特的FPGA1的配置数据,第四个比特位为一比特的启动代码的方式,将处理器的启动代码、FPGA1和FPGA2的配置数据交替存储到闪存的内部存储单元,这样,处理器的启动代码需要分布到100个数据区(即,50个字节中),而FPGA1的配置数据需要分布到80个数据区(即,40个字节)中,而FPGA2的配置数据需要分布到95个数据区(即,48个字节)中。这样,按照从比特位从高位到低位的顺序存储,则在第一个字节的第一个存储区对应着bit7至bit4这四个比特位,这样bit7存储一比特的无效数据,bit6存储一比特的FPGA2的配置数据,bit5存储一比特FPGA1的配置数据,bit4中存储一比特的启动代码,对于该第一个字节中第二个数据区所对应的bit3至bit0,则依此顺序存储,这样,当存储到第40个字节对应的第80个存储区时,FPGA1的所有配置数据均已经存储到闪存中,但是处理器的启动代码以及FPGA2的配置数据还有部分尚未存储到闪存中,在该种情况下,从第41个字节开始所有需要存储FPGA1的比特位均可以全部设置为零或者1,如,第41字节中bit5和bit1为原本需要存储FPGA1的配置数据的比特位,则可以将bit5和bit1中的数据均存储为0,而bit7和bit3仍存储无效数据(如均0或者1),bit6和bit2仍分别存储一比特的FPGA2的一比特的配置数据,bit4和bit0仍分别存储一比特的处理器的启动代码,相应的,第42字节中bit5和bit1也均存储为0。当存储到第48个字节的第一个数据区时,FPGA2的配置数据也全部存储到闪存中,这样,从48字节的第二个数据区开始,原本需要存储FPGA2的配置数据的比特位也全部存储为0或1。

可以理解的是,闪存的SPI接口中还引出了一个片选输入管脚,处理器中的一个管脚与该闪存中的片选输入管脚相连(图9中未画出),处理器可以通过该片选输入管脚向闪存中输入有效的片选信号。

为了便于理解,结合图9的数据加载系统,对本实施例的数据加载系统的数据加载过程进行介绍。参见图10,为在图9所示的数据加载系统基础上的数据加载方法一个实施例的流程示意图,本实施例的方法可以包括:

1001,单板上电复位后,复位电路向处理器以及时钟处理逻辑电路发送复位信号;

1002,处理器响应于复位信号上电复位,并执行该处理器内部ROM中的初始化代码,以完成处理器和内存的初始化。

1003,时钟处理逻辑电路基于该复位信号确定出单板当前为冷启动时,向FPGA1和FPGA2发送配置清空指示PROGRAM信号。

其中,该步骤1002和步骤1003可以是同时执行。

1004,FPGA1响应于该PROGRAM信号,清除FPGA1内部的配置数据,并在清除了内部的配置数据之后,向时钟处理逻辑电路返回用于指示配置数据清除完毕的完成清空指示INIT信号;

1005,FPGA2响应于该PROGRAM信号,清除FPGA2内部的配置数据,并在清除了内部的配置数据之后,向时钟处理逻辑电路返回用于指示配置数据清除完毕的完成清空指示INIT信号。

1006,时钟处理逻辑电路接收处理器输入的同步信号,并基于处理器输出的时钟信号生成三路同步时钟,并将该三路同步时钟分别输出给FPGA1、FPGA2和闪存。

其中,该步骤1006中的处理器输入的同步时钟也就是前面实施例中提到的第一同步时钟。

1007,处理器通过闪存的片选输入管脚向闪存发送有效的片选信号。

如片选信号为低电平有效,则处理器可以发送低电平的片选信号。

其中,该步骤1006和步骤1007的先后顺序并不限于图10所示,在实际应用中这两个步骤同时执行

1008,处理器通过DQ0向闪存发送quad output fast read命令。

1009,处理器通过DQ0向闪存发送读操作的起始地址。

1010,闪存在同步时钟的触发下,基于起始地址,并按照每次读取一字节的数据的读取规律,每次从闪存的内部存储单元中读取一字节的数据并缓存。

其中,该一字节包括两个数据区,每个数据区依次为一比特的无效数据、一比特的FPGA2的配置数据、一比特的FPGA1的配置数据以及一比特的启动代码。

1011,当同步时钟的下降沿到达时,闪存从当前缓存的一字节数据中取出当前待输出的数据区所对应的连续四比特数据,并将连续四比特数据中一比特的启动代码、一比特的FPGA1的配置数据、一比特的FPGA2的配置数据以及一比特的无效数据分别从DQ0、DQ1、DQ2和DQ3输出。

如,闪存从当前缓存的一字节数据中取出当前待输出比特位为比特位7、比特位6、比特位5和比特位4内的数据,且比特位7至比特位4依次存储有一比特的无效数据、一比特的FPGA2的配置数据、一比特的FPGA1的配置数据以及一比特的启动代码,则可以依次将比特位7、6、5和4分别从DQ3、DQ2、DQ1和DQ0输出,使得DQ3输出无效数据,DQ2输出FPGA2的配置数据;DQ1输出FPGA1的配置数据,而DQ0则固定输出处理器的启动代码。

1012,当同步时钟的上升沿到达时,处理器从与DQ0相连的数据输入输出管脚读取DQ0输出的一比特的启动代码。

1013,当同步时钟的上升沿到达时,FPGA1从与DQ1相连的数据输入输出管脚读取DQ1输出的一比特的配置数据。

1014,当同步时钟的上升沿到达时,FPGA2从与DQ2相连的数据输入输出管脚读取DQ2输出的一比特的配置数据。

1015,处理器将读取到的启动代码缓存到内存中;

1016,当处理器确定当前已获取到处理器的所有启动代码时,终止向时钟处理逻辑电路输出处理器的同步时钟,并在内存中运行该启动代码。

具体的,处理器中封装的处理模块控制串行外设接口模块停止输出SPI同步时钟。

1017,时钟处理逻辑电路确定出当前处理器已经获取到所有的启动代码,且FPGA1和FPGA2尚未全部发送加载完成指示时,时钟处理逻辑电路接收外置SPI时钟模块输入的同步时钟,依据外置SPI时钟模块的时钟信号生成三路同步时钟,并将该三路同步时钟分别输出给闪存、FPGA1和FPGA2,直至逻辑电路检测到FPGA1和FPGA2均已经发送加载完成指示。

其中,时钟处理逻辑电路切换为接收外置SPI时钟模块输入的同步时钟后,闪存仍会继续步骤执行1011,直至FPGA1和FPGA2完成配置数据的加载。

在FPGA器件已经加载完所需的所有配置数据,处理器可以对可编程逻辑器件进行初始化,以跳转到内存中执行相应业务。

可以理解的是,在本申请以上任意一个实施例中,非易失性存储器中保存的数据还可以支持在线升级。如,当非易失性存储器为闪存,且该闪存具有SPI接口时,由于闪存中只有数据输入输出管脚DQ0连接到处理器,其他数据输入输出管脚连接到FPGA,因此,闪存中的升级数据只能由处理器提供。

其中,根据闪存的工作模式,可以通过处理器发送的页面编程(page program)命令实现对闪存中存储的数据进行在线升级,如,page program命令的命令字是0x02,该page program命令的命令字同样可以由处理器向DQ0管脚输入。需要说明的是,在输入page program命令之前,还需要处理器先输入写允许(write enable)命令(命令字是0x06)。在对闪存中的数据进行在线升级之后,还需要输入写禁止(write disable)命令(命令字是0x04),然后处理器便可以向闪存发送读操作命令,以触发闪存向外输出数据,实现处理器和FPGA的数据加载。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1