恢复FPGA芯片中的逻辑的方法、系统和FPGA设备与流程

文档序号:24234914发布日期:2021-03-12 13:06阅读:61来源:国知局
恢复FPGA芯片中的逻辑的方法、系统和FPGA设备与流程

本发明实施例涉及计算机技术,特别是一种恢复fpga芯片中的逻辑的方法、系统和fpga设备。



背景技术:

历史上,受益于半导体技术的持续演进,计算机体系结构的吞吐量和系统性能不断提高,处理器的性能每18个月就能翻倍(众所周知的“摩尔定律”),使得处理器的性能可以满足应用软件的需求。但是,近几年半导体技术改进达到了物理极限,处理器性能再无法按照摩尔定律进行增长,另一方面数据增长对计算性能要求超过了按“摩尔定律”增长的速度。处理器本身无法满足高性能计算(hpc:highperformancecompute)和并行计算(图形,图像和人工智能)应用软件的性能需求,导致需求和性能之间出现了缺口。为了弥补该缺口,一种解决方法是通过硬件加速,采用专用协处理器的异构计算方式来提升处理性能。

现场可编程门阵列(fieldprogrammablegatearray,fpga)因其可编程性、低功耗等优势在异构计算上得到广泛使用。比如,在公有云中,当引入fpga时,云服务商通常会把fpga的逻辑分为静态部分和动态部分。其中,静态部分通常用于实现一些基础功能,比如,ddr、dma等,而动态逻辑则用于实现一些业务逻辑,比如图片编解码、加解密等。从安全的角度出发,静态部分逻辑通常不给用户开放,而由云服务商收集需求,根据需求进行普适性设计;而动态部分则可以开放给用户,用户可以自己编写与更改静态部分的逻辑。随着使用云服务的用户增多,为满足用户的需求,fpga中的静态部分需要实现的基础功能会越来越多。由于静态逻辑通常采用的是通用接口,布线布局比较复杂,从而导致fpga的运行效率降低。

如果将静态逻辑也开放给用户,由用户自己根据需求编写和更改,那么fpga设备的安全性就无法保障。因此,如何能够将静态逻辑开放给用户的同时,又能保证fpga设备的安全性,成为一个急需要解决的问题。



技术实现要素:

有鉴于此,本申请提供了一种恢复fpga芯片中的逻辑的方法、系统和fpga设备,以恢复fpga芯片中的逻辑。

本申请的第一方面提供了一种恢复fpga芯片中的逻辑的方法,该方法应用于fpga设备。所述fpga设备包括所述fgpa芯片、第一存储器、第二存储器,其中,所述第一存储器存储有第一逻辑,所述第二存储器中存储有所述第二逻辑。该方法包括如下步骤:所述fpga设备接收bmc发送的第一加载指令,所述第一加载指令用于指示将所述第一逻辑加载到所述fpga芯片;所述fpga设备根据所述第一加载指令断开所述fpga芯片与所述第二存储器之间的数据通道,连接所述fpga芯片与所述第一存储器之间的数据通道;所述fpga设备通过所述数据通道将所述第一逻辑加载到所述fpga芯片。

在上述的fpga设备中引入了第一存储器和第二存储器两个存储器。其中,无论是用户修改的逻辑还是管理面升级的逻辑都是先写入第二存储器,而第一存储器中保存的则是修改或升级之前的逻辑。如果用户修改后的逻辑或管理面升级的逻辑加载到fpga芯片后枚举不成功,则可利用第一存储器中的第一逻辑还原fpga芯片中的逻辑。虽然静态逻辑因为开放给用户而可能带来风险,但是利用上述方法可以快速地恢复fpga芯片中的逻辑。从而保证了fpga芯片的有效运行。

在所述第一方面的一种可能的实现中,所述fpga设备还包括读写控制器和多路复用器mux。其中,由所述读写控制器接收所述第一加载指令。然后,所述读写控制器根据所述第一加载指令向所述mux发送第一通道切换指令,所述第一通道切换指令用于指示所述mux进行通道切换。也即,切换所述mux与第一及第二存储器之间的数据通道。所述mux接收到所述第一通道切换指令之后,根据所述第一通道切换指令,断开所述fpga芯片与所述第二存储器之间的数据通道,连接所述fpga与所述第一存储器之间的数据通道。也就是将通道切换到第一存储器。所述读写控制器在通道切换完成后向所述fpga芯片发送第一加载信号,所述第一加载信号用于触发所述fpga芯片加载逻辑。所述fpga芯片根据所述第一加载信号通过所述fpga芯片与所述第一存储器的数据通道,将所述第一逻辑加载到fpga芯片中。

在这个具体的实现中,fpga设备巧妙地利用了读写控制器与多路复用器的配合来实现通道之间的切换。是一种高效实用的方式。

结合第一方面的第一种实现,在第一方面的第二种实现中,读写控制器接收所述bmc发送的重置指示。读写控制器根据所述重置指示,向所述多路复用器发送第二通道切换指令,所述第二通道切换指令用于指示所述mux切换所述mux与所述第一和第二存储器之间的数据通道。所述mux根据所述第二通道切换指令,断开所述fpga芯片与所述第一存储器之间的数据通道,连接所述fpga与所述第二存储器之间的数据通道。

可以理解的是,当fpga芯片会到修改前的逻辑后,本申请的实施例中,还将通道切换回第二存储器,为再次加载第二逻辑或者用户的继续修改提供基础。提高了修改fpga芯片的灵活性。

结合第一方面的第二种实现,在第一方面的第三种实现中,所述fpga芯片接收第二加载指令,并根据所述第二加载指令向所述读写控制器发送加载请求信号,所述第二加载指令指示fpga芯片加载存储器中的逻辑。所述读写控制器接收所述加载请求信号,并响应所述加载请求信号向所述fpga芯片返回第二加载信号,所述第二加载信号用于触发fpga加载逻辑。所述fpga芯片根据所述第二加载信号,通过所述fpga与所述第二存储器之间的数据通道,将所述第二逻辑加载到所述fpga芯片上。

由于加载失败的原因是不可预知的,当通道切回第二存储器的时候,用户可以需要再次得加载第二逻辑,避免因为偶然因素使得第二逻辑无法实施。

结合第一方面的第三种实现,在第一方面的第四种实现中,所述第一逻辑和所述第二逻辑为pcie静态逻辑。而该方法还包括下述步骤。所述fpga芯片在所述第二逻辑完成后,向cpu发送加载完成信号。相应地,所述cpu接收到加载完成信号后,枚举所述fpga芯片与所述cpu之间的pcie通道。枚举成功后,所述fpga芯片通过与所述cpu之间的pcie通道加载非pcie静态逻辑以及动态逻辑。

在pcie静态逻辑加载完成后,通过带内方式将剩下的静态逻辑以及动态逻辑加载到fpga芯片上,极大地提高了加载的速度。

结合第一方面的第三种实现,在第一方面的第五种实现中,当所述第一存储器设置有写保护时,该方法还包括如下步骤。所述读写控制器接收第一写数据指令,所述第一写数据指令指示有数据要写入所述第一存储器,根据所述第一写数据指令向所述多路复用器发送第三通道切换指令并向所述第一存储器发送关闭写保护的指令。所述mux根据所述通道切换指令,断开所述fpga芯片与所述第二储器之间的数据通道,连接所述fpga与所述第一存储器之间的数据通道。所述第一存储器根据所述关闭写保护的指令,关闭写保护。

为避免对第一逻辑的恶意篡改,在该实现中,第一存储器设置有写保护,当写入管理面的数据时,才将其写保护关闭。

结合第一方面的上述第二至五种实现中,所述读控制器为cpld,所述mux为spimux,所述数据通道为spi通道。

本申请的第二方面提供了一种fpga设备,所述fpga设备包括fgpa芯片、第一存储器、第二存储器、读写控制器和多路复用器。其中,所述第一存储器存储有第一逻辑,所述第二存储器中存储有所述第二逻辑。所述读写控制器用于接收第一加载指令,所述第一加载指令用于指示将所述第一逻辑加载到所述fpga芯片,并根据所述第一加载指令向多路复用器发送第一通道切换指令以及在通道切换完成后向所述fpga芯片发送第一加载信号,其中,所述第一通道切换指令用于指示所述mux切换所述mux与第一及第二存储器之间的数据通道,所述第一加载信号用于触发所述fpga芯片加载逻辑。所述mux用于根据所述第一通道切换指令,断开所述fpga芯片与所述第二存储器之间的数据通道,连接所述fpga与所述第一存储器之间的数据通道。所述fpga芯片,用于根据所述第一加载信号通过所述fpga芯片与所述第一存储器之间的数据通道,将所述第一逻辑加载到fpga芯片中。

结合第二方面的一种可能实现中,所述读写控制器还用于接收重置指示,根据所述重置指示向所述多路复用器发送第二通道切换指令,所述第二通道切换指令用于指示所述mux切换所述mux与所述第一和第二存储器之间的数据通道。且所述mux还用于根据所述第二通道切换指令,断开所述fpga芯片与所述第一存储器之间的数据通道,连接所述fpga与所述第二存储器之间的数据通道。

结合第二方面的第一种可能的实现,在第二方面的第二种可能的实现中,所述fpga芯片用于接收第二加载指令,根据所述第二加载指令向所述读写控制器发送加载请求信号,所述第二加载指令指示fpga芯片加载存储器中的逻辑。所述读写控制器还用于接收加载请求信号,并响应所述加载请求信号向所述fpga芯片返回第二加载信号,所述第二加载信号触发fpga加载逻辑。所述读写控制器向所述fpga芯片发送加载信号,所述加载信号触发fpga加载逻辑。所述fpga芯片根据所述第二加载信号,通过所述fpga与所述第二存储器之间的数据通道,将所述第二逻辑加载到所述fpga芯片上。

结合第二方面的第二种可能的实现,在第二方面的第三种可能的实现中,所述第一逻辑和所述第二逻辑为pcie静态逻辑,所述第二逻辑加载成功后,所述fpga芯片还用于向cpu发送加载完成信号,并在所述cpu枚举成功后,通过所述fpga芯片与cpu的之间的pcie通道加载非pcie静态逻辑以及动态逻辑。

结合第二方面的第三种可能的实现,在第二方面的第四种可能的实现中,当所述第一存储器设置了写保护时,所述读写控制器还用于接收第一写数据指令,所述第一写数据指令指示有数据要写入所述第一存储器,根据所述第一写数据指令向所述多路复用器发送第三通道切换指令并向所述第一存储器发送关闭写保护的指令。所述mux还用于根据所述第三通道切换指令,断开所述fpga芯片与所述第二储器之间的数据通道,连接所述fpga芯片与所述第一存储器之间的数据通道。所述第一存储器还用于根据所述关闭写保护的指令,关闭写保护。

本申请的第三方面提供了一种计算机系统,该计算机系统包括中央处理单元cpu、主板管理控制器bmc和现场可编程门阵列fpga设备。所述fpga设备包括所述fgpa芯片、第一存储器、第二存储器,其中,所述第一存储器存储有第一逻辑,所述第二存储器中存储有所述第二逻辑,所述第二逻辑是第一逻辑更新后的逻辑。所述cpu用于在枚举所述cpu与fpga设备之间的pcie通道失败后,向bmc发送枚举失败的消息。所述bmc用于根据所述枚举失败的消息向fpga设备发送第一加载指令,所述第一加载指令用于指示将所述第一逻辑加载到所述fpga芯片。所述fpga设备用于接收第一加载指令,根据所述第一加载指令断开所述fpga芯片与所述第二存储器之间的数据通道,连接所述fpga芯片与所述第一存储器之间的数据通道,并通过所述数据通道将所述第一逻辑加载到所述fpga芯片。

可替代地,上述实现方式中,所述cpu向bmc发送的是逃生指令,所述逃生指令用于指示加载所述第一存储器中的逻辑;相应地,所述bmc用于根据所述逃生指令向所述fpga设备发送第一加载指令。

结合第三方面的一种可能的实现方式中,所述fpga设备还用于在加载完所述第一逻辑后,向所述cpu发送第一加载完成信号。所述cpu还用于接收到所述第一加载完成信号之后,枚举所述cpu与fpga设备之间的pcie通道,并在枚举成功后向所述bmc发送枚举成功的消息。所述bmc,还用于根据所述枚举成功的消息向所述fpga设备发送重置指示。所述fpga设备,还用于根据所述重置指示断开所述fpga芯片与所述第一存储器之间的数据通道,连接所述fpga与所述第二存储器之间的数据通道。

可替代地,在这一种实现方式中,枚举成功后,所述cpu向所述bmc发送的是恢复原连接的指示,相应地,所述bmc还用于根据所述恢复原连接的指示向所述fpga设备发送重置指示。

结合第三方面的第一种实现,在第三方面的第二种实现中,所述bmc还用于从所述fpga设备接收重置成功响应,并向所述cpu发送确认信号以确认所述数据通道已切换好。所述cpu还用于根据所述确认信号向所述fpga设备发送第二加载指令,指示所述fpga设备加载存储器中的逻辑。所述fpga设备还用于在接收到所述第二加载指令之后,通过所述fpga与所述第二存储器之间的数据通道,将所述第二逻辑加载到所述fpga芯片上。

结合第三方面的第二种实现,在第三方面的第三种实现中,所述fpga设备还用于在第二逻辑加载完成后,向所述cpu发送第二加载完成信号,并在枚举成功后,通过与所述cpu的之间的pcie通道加载非pcie静态逻辑以及动态逻辑。所述cpu还用于在接收到所述第二加载完成信号后,枚举所述fpga设备与所述cpu之间的pcie通道。

结合第三方面的第二种实现或者第三种实现,在第三方面的第四种实现中,所述bmc还用于根据接收到的第三加载完成信号,向所述fpga设备发送第一写数据指令以指示有数据要写入所述第一存储器,并根据从所述fpga设备接收到的确认信号向cpu发送第二写数据指令。所述cpu还用于在所述fpga设备加载所述第二逻辑并枚举成功后,向所述bmc发送所述第三加载完成信号,并根据从bmc接收到的所述第二写数据指令,向所述第一存储器写入所述第二逻辑。所述fpga设备还用于根据所述第一写数据指令,断开所述fpga芯片与所述第二存储器之间的数据通道,连接所述fpga芯片与所述第一存储器之间的数据通道,并在切换完成后向所述bmc发送确认信号。

结合第三方面的第四种实现,在第三方面的第五种实现中,当所述第一存储器设置了写保护时,所述bmc还用于根据所述第三加载完成信号,向所述fpga设备发送写保护关闭指令。所述fpga设备还用于根据所述写保护关闭指令,关闭所述第一存储器的写保护,并且切换完成且写保护关闭后向所述bmc发送所述确认信号。在上述的fpga设备中引入了第一存储器和第二存储器两个存储器。其中,用户修改的逻辑还是管理面升级的逻辑可以先写入第二存储器,而第一存储器中保存的则可以是修改或升级之前的逻辑。如果用户修改后的逻辑或管理面升级的逻辑加载到fpga芯片后枚举不成功,则可利用第一存储器中的第一逻辑还原fpga芯片中的逻辑。虽然静态逻辑因为开放给用户而可能带来风险,但是利用上述方法可以快速地恢复fpga芯片中的逻辑。从而保证了fpga芯片的有效运行。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍。

图1是本发明实施例涉及的一种云结构示意图;

图2是本发明实施例涉及的一种计算机系统结构示意图;

图3是本发明实施例涉及的一种恢复fpga芯片中的逻辑的流程示意图;

图4是本发明实施例涉及的一种升级fpga芯片中的逻辑的流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例提供的技术方案进行描述。

以公有云为例,如图1所示的,公有云网络包括多个客户端、多个服务器组成的云环境,这些客户端通过互联网连接到云环境中,由云环境中服务器提供服务。示例性的,云环境中的服务器(比如服务器1)可以如图2所示(其中,实线是数据通道,虚线则是信令),包括:fpga设备,cpu,主板管理控制器(baseboardmanagementcontroller,bmc),读写控制器,其中,fpga设备包括fpga芯片、第一存储器和第二存储器,第一存储器中存储有第一逻辑,第二存储器中存储有第二逻辑,第二逻辑是第一逻辑更新后的版本。

实际上,在初始阶段,管理面通过互联网接入云环境中,使用云环境的portal定义一些数字计算任务。然后,该任务在云环境中被编译成包含元器件连接方式等信息的配置文件或比特流加载到fpga芯片中。至此,完成对fpga芯片的初始化配置。为了描述方便,下文中我们将这一类配置文件或者比特流称为逻辑,包括静态逻辑和动态逻辑。其中,静态逻辑包括pcie静态逻辑和非pcie静态逻辑。其中的初始pcie静态逻辑被写入上述第一存储器和第二存储器中。可以先通过fpga芯片与第二存储器之间的数据通道将初始pcie静态逻辑先写入第二存储器中,具体写入的过程可以参考下述步骤302-304;写完之后,cpu向bmc发送完成指示,表明数据写入的操作已完成。bmc接收到该完成指示后,指示fpga设备切换fpga芯片与第一第二存储器之间的连接,也就是说将fpga芯片连接到第一存储器上;然后,再通过fpga芯片与所述第一存储器之间的连接,将初始pcie静态逻辑写入到第一存储器上,这里写入的过程参考下述步骤302-304,不同的是,此时,数据写入的是第一存储器。也就是说,初始阶段,第一存储器和第二存储器上保存的都是初始pcie静态逻辑。

另外,上述写入第一存储器和第二存储器的顺序可以调换,本发明实施例中不作限制。需要注意的是,如果是后写入第一存储器的,那么当写完之后,还需要fpga芯片与第一存储器的通道断开,而将fpga芯片与第二存储器之间的通道打开。这样,当用户想要修改fpga芯片的逻辑时或者管理面想要更新fpga芯片的逻辑时,可以通过fpga芯片与第二存储器之间的通道将更新后的pcie静态逻辑写入到第二存储器中,同时又避免用户对第一存储器中的逻辑进行修改。为了更好的保证第一存储器上的逻辑不被恶意篡改,还可以在初始pcie静态逻辑写入到第一存储器上之后,将第一存储器的写保护打开。相应的,如果后续需要写入数据,也需要先把写保护关闭。

可以理解的是,上述管理面发布的初始pcie静态逻辑是所述第一逻辑的一个例子,而上述用户或者管理面提供的更新后的pcie静态逻辑则是第二逻辑的一个例子。

当第二逻辑加载到fpga芯片后,照例,cpu会枚举所述cpu与fpga设备之间的pcie通道。在本发明实施例提供的服务器,可以在上述cpu枚举失败后,尽快地恢复fpga芯片上的pcie静态逻辑。

具体而言,所述服务器中的cpu用于在枚举所述cpu与fpga设备之间的pcie通道失败后,向bmc发送枚举失败的消息。所述bmc用于根据该枚举失败的消息向fpga设备发送第一加载指令,所述第一加载指令用于指示将所述第一逻辑加载到所述fpga芯片。因为bmc接收到该枚举失败的消息后,知道需要将fpga芯片的逻辑恢复到第一逻辑,所以向fpga设备发送了上述的第一加载指令。可替代地,也可以是枚举失败之后,cpu向bmc发送逃生指令,该逃生指令用于指示加载所述第一存储器中的逻辑,也即第一逻辑,而后bmc根据所述逃生指令向所述fpga设备发送第一加载指令。所述fpga设备用于接收所述第一加载指令,根据所述第一加载指令断开所述fpga芯片与所述第二存储器之间的数据通道,连接所述fpga芯片与所述第一存储器之间的数据通道,并通过所述数据通道将所述第一逻辑加载到所述fpga芯片。该fpga设备还可以在加载完所述第一逻辑后,向cpu发送加载完成信号,以便于cpu收到该加载完成信号后执行pcie枚举。通过枚举的方法,cpu确定该cpu跟fpga芯片之间的pcie通道是否可以正常通信。

通过上述的方案,尽管用户可以根据需要修改fpga芯片的逻辑,包括修改其中的静态逻辑,但是当加载更新后的pcie静态逻辑失败时,可以方便迅速地将fpga芯片上的pcie静态逻辑恢复到初始的pcie静态逻辑上。同样,上述的方案也适用于管理面升级fpga芯片逻辑的场景,管理面升级后的新版pcie静态逻辑可以先写入到第二存储器中,当加载新版pcie静态逻辑失败后,通过上述的方案迅速地将fpga芯片上的pcie静态逻辑恢复到管理面发布的上一版本的pcie静态逻辑上。

在具体的应用场景中,上述的fpga设备还包括读写控制器和多路复用器(multiplexer,mux),可以通过读写控制器以及mux来实现第一存储器和第二存储器之间的切换。切换的过程如下:

所述读写控制器用于接收第一加载指令,所述第一加载指令用于指示将所述第一逻辑加载到所述fpga芯片,并根据所述第一加载指令向多路复用器发送第一通道切换指令以及向所述fpga芯片发送第一加载信号,其中,所述第一通道切换指令用于指示所述mux切换所述mux与第一及第二存储器之间的数据通道,所述第一加载信号用于触发所述fpga芯片加载逻辑。所述mux用于根据所述第一通道切换指令,断开所述fpga芯片与所述第二存储器之间的数据通道,连接所述fpga与所述第一存储器之间的数据通道。所述fpga芯片,用于根据所述第一加载信号通过所述fpga芯片与所述第一存储器的数据通道,将所述第一逻辑加载到fpga芯片中。

为了确定cpu是否能够跟恢复到第一逻辑后的fpga芯片通信,该fpga芯片还需要在加载完所述第一逻辑后,向cpu发送第一加载完成信号,以便于cpu收到该第一加载完成信号后执行pcie枚举。如果枚举成功,则意味着cpu跟fpga芯片可以正常通信。在这之后,用户或者管理面可以维持现状,使用初始的逻辑。用户或者管理面也可以继续加载之前的更新版本,后者对之前加载失败的逻辑做修改,包括修订其中的pcie静态逻辑部分,在修改之后形成新的更新版本,并加载该新的更新版本。相对于管理面发布的初始的pcie静态逻辑,这些版本都是更新后的版本,下文中统一称为更新后的pcie静态逻辑。由于用户提供的pcie静态逻辑是存在第二存储器中的,管理面升级后的pcie静态逻辑也是先存在第二存储器中,因此,为了将更新后的pcie静态逻辑加载到fpga芯片上,需要将fpga芯片连接到第二存储器。

也就是说,cpu还用于在所述cpu与fpga设备之间的pcie通道枚举成功后,向bmc发送枚举成功的消息。所述bmc还用于根据所述枚举成功的消息向fpga发送重置指示。可替代地,cpu向bmc发送的是一个恢复原连接的指示,所述bmc根据所述恢复原连接的指示向fpga发送所述重置指示。这里的原连接也就是fpga芯片与第二存储器的连接。所述fpga设备,还用于根据所述重置指示断开所述fpga芯片与所述第一存储器之间的数据通道,连接所述fpga与所述第二存储器之间的数据通道。具体到fpga设备内部,所述读写控制器还用于接收重置指示,根据所述重置指示向所述多路复用器发送第二通道切换指令,所述第二通道切换指令用于指示所述mux切换所述mux与所述第一和第二存储器之间的数据通道。所述mux根据还用于根据所述第二通道切换指令,断开所述fpga芯片与所述第一存储器之间的数据通道,连接所述fpga芯片与所述第二存储器之间的数据通道。

当所述fpga芯片已连接到第二存储器后,可以再次加载第二存储器上的逻辑。因此,本发明实施例的一个可能实现中,所述bmc还用于从所述fpga设备接收重置成功响应,并向所述cpu发送确认信号以确认所述数据通道已切换好。所述cpu还用于根据所述确认信号向所述fpga设备发送第二加载指令,指示所述fpga设备加载存储器中的逻辑。所述fpga设备还用于在接收到所述第二加载指令之后,通过所述fpga与所述第二存储器之间的数据通道,将所述第二逻辑加载到所述fpga芯片上。

具体到fpga设备内部,当用户或管理面需要重新加载第二存储器中的第二逻辑时,所述fpga芯片还用于接收第二加载指令,根据所述第二加载指令向所述读写控制器发送加载请求信号,所述第二加载指令指示fpga芯片加载存储器中的逻辑。其中,该第二加载指令可以是所述cpu根据bmc发送的确认信号后向所述fpga设备发送的。该确认信号可以是所述bmc从所述fpga设备接收到所述重置成功响应后向所述cpu发送的。相应地,所述读写控制器还用于接收加载请求信号,并响应所述加载请求信号向所述fpga芯片返回第二加载信号,所述第二加载信号触发fpga加载逻辑。所述fpga芯片根据所述第二加载信号,通过所述fpga与所述第二存储器之间的数据通道,将所述第二逻辑加载到所述fpga芯片上。

进一步地,所述fpga设备还用于在第二逻辑加载完成后,向所述cpu发送第二加载完成信号。所述cpu还用于在接收到所述第二加载完成信号后,枚举所述fpga芯片与所述cpu之间的pcie通道。所述fpga设备还用于在枚举成功后,通过与所述cpu的之间的pcie通道加载非pcie静态逻辑以及动态逻辑。具体到fpga设备内部,所述fpga芯片还用于向cpu发送所述第二加载完成信号,并在所述cpu枚举成功后,通过所述fpga芯片与cpu的之间的pcie通道加载非pcie静态逻辑以及动态逻辑。至此,用户完成了对fpga中逻辑的修改或升级。对于管理面而言,除了升级第二存储器中的逻辑,还需要升级第一存储器中的逻辑。

进一步地,所述bmc还用于根据接收到的第三加载完成信号,向所述fpga设备发送第一写数据指令以指示有数据要写入所述第一存储器,并根据从所述fpga设备接收到的确认信号向cpu发送第二写数据指令。所述cpu还用于在所述fpga设备加载所述第二逻辑并枚举成功后,向所述bmc发送所述第三加载完成信号,并根据从bmc接收到的所述第二写数据指令,向所述第一存储器写入所述第二逻辑。所述fpga设备还用于根据所述第一写数据指令,断开所述fpga芯片与所述第二存储器之间的数据通道,连接所述fpga芯片与所述第一存储器之间的数据通道,并在切换完成后向所述bmc发送确认信号。

当所述第一存储器设置了写保护时,所述bmc还用于根据接收到的所述第三加载完成信号,向所述fpga设备发送写保护关闭指令。所述fpga设备还用于根据所述写保护关闭指令,关闭所述第一存储器的写保护,并且切换完成且写保护关闭后向所述bmc发送所述确认信号。

在一个具体的实现中,上述读写控制器可以是复杂可编程逻辑器件(complexprogrammablelogicdevice,cpld),上述多路复用器则可以是串行外设接口多路复用器(serialperipheralinterfacemultiplexer,spimux),而上述的数据通道可以是spi通道,第一存储器和第二存储器可以是闪存(flashmemory)。

上述的bmc和cpu可以是从非易失性存储设备中读取程序来实现上述的功能。由于cpld是一种可编辑的逻辑器件,可以通过编辑其中的逻辑来实现上述的功能。

本发明实施例还提供了一种恢复fpga芯片中的逻辑的方法。该方法应用于图2中的服务器中。正如上所言,初始阶段,第一存储器flasha和第二存储器flashb中存储了管理面发布的初始pcie静态逻辑。并且,在初始阶段,sipmux跟flashb之间的spi通道连通,这样flashb可以供用户保存修改后的逻辑。而spimux跟flasha之间的spi通道关闭,用户无法访问。为了更好的保证用户无法随意写入数据到flasha中,bmc可以发指令给cpld,指令cpld将flasha的写保护打开。这样,就无法写数据到flasha。如果用户有需要,可以修改fpga的逻辑并将修改后的pcie静态逻辑写入flashb中。此时,flashb中存储的不再是初始pcie静态逻辑而是用户修改后的pcie静态逻辑。如图3所示。本实施例提供的方法包括如下步骤:

302,cpu调用fpga驱动程序和pcie驱动程序,找到fpga芯片并通过pcie通道向fpga芯片发送写数据指令,该数据指令中携带待写入的数据。这里的数据可以是前面提到过的由用户提供的pcie静态逻辑,也可以是由管理面提供的pcie静态逻辑。在实际应用中,可能需要通过多次写数据指令,才能将pcie静态逻辑全部写入到fpga芯片中。

304,fpga芯片接收到数据写入指令后,将接收到的数据缓存在存储设备中,比如,双极只读存储器(bipolarreadonlymemory,brom)中,等到brom中的数据达到一定的量后,fpga芯片中的控制逻辑,将该brom中的数据,通过fpga芯片与spimux之间的spi通道以及sipmux与flashb的通道将数据写入到flashb中。将接收到的数据都写入到flashb中之后,fpga芯片向cpu返回一个中断。cpu收到中断后,将pcie静态逻辑的其余部分以此方式陆续写入到flashb中。

306,当需要加载flash中的pcie静态逻辑时,cpu通过pcie通道向fpga发送加载指令。其中,加载指令中指示fpga芯片加载flash中的逻辑。由于初始阶段,sipmux跟flashb之间的spi通道连通,所以,此处加载也就是flashb中的逻辑,即,更新后的pcie静态逻辑。

为了区分更新是由用户发起的,还是管理面发起的,该加载指令中还可以包括用于指代发起方的指示信息。从而指示cpu加载完成pcie静态逻辑之后,是继续加载非pcie静态逻辑

308,fpga接收到所述加载指令之后,通过通用输入输出(general-purposeinput/output,gpio)接口向cpld发送一个读取信号。

310,cpld接收到该读取信号之后,通过触发programb管脚向fpga芯片发送加载信号。该加载信号用于指示fpga芯片加载flash中的逻辑。

312,fpga芯片接收到所述加载信号后,通过fpga芯片与所述flashb之间的spi通道加载数据。

其中,fpga芯片是通过spimux与flash相连的。fpga芯片与spimux之间有spi通道,且spimux与flash之间也有spi通道。spimux与flash之间的spi通道是可以事先设置。比如,在本实施例中,初始阶段,spimux与flashb之间的spi通道处于连通状态。此时,fpga芯片从flashb加载修改后的pcie静态逻辑。

314,当fpga芯片从flashb的数据加载完成后,向所述cpu发送加载完成信号,cpu收到该加载完成信号后执行pcie枚举。也就是说,cpu检测通过pcie通道与cpu连接的设备。本实施例中,如果cpu扫描到fpga芯片通过pcie通道连接在cpu上的话,说明cpu可以跟fpga芯片通信。

316,如果cpu检测不到fpga芯片,说明cpu与fpga芯片之间的通信连接断开,无法继续加载非pcie静态逻辑以及动态逻辑。这种情况下,cpu发送枚举失败的消息给bmc,指示bmc所述cpu与fpga芯片之间无法通信。

318,bmc根据接收到的枚举失败的消息,向cpld发送加载指令,指示cpld从flasha中加载管理面发布pcie静态逻辑。

可替代地,步骤316中,也可以是枚举失败之后,cpu向bmc发送逃生指令,该逃生指令用于指示加载所述第一存储器中的逻辑,也即第一逻辑。而步骤318中,bmc根据所述逃生指令向所述cpld发送所述加载指令。

320,cpld接收到bmc的加载指令后,向spimux发送通道切换指令以指示spimux切换该spimux与存储器之间的通道。

322,spimux根据接收到的该通道切换指令,将spimux与flashb之间的通道关闭,而将该spimux与flasha之间的通道连通。也就是说,原来spimux与flashb之间连通的通道被关闭,而spimux与flasha之间原本关闭的通道被连通。当spimux切换完成之后,向cpld返回确认信号以表明通道切换已完成。

324,cpld接收到该确认信号,获知通道切换已完成后,触发program_b管脚向fpga芯片发送加载信号。跟上述步骤310一样,该加载信号用于指示fpga芯片从flash中加载数据。

可替代地,当cpld接收到该确认信号后,也可以将该确认信号返回给bmc,由所述bmc向cpu返回重新加载的指令,指令cpu为fpga芯片加载逻辑。当cpu接收到该重新加载的指令后,会按照步骤306-312来加载数据。

由于在发送加载指令之前,cpld已经将通道切换好,可以理解的是,本次fpga芯片从flasha中加载逻辑。

326,fpga芯片接收到通过cpld与spimux之间的spi通道以及spimux与flasha之间的通道从flasha加载管理面发布的pcie静态逻辑。

328,当fpga芯片将flasha中的数据加载完成后,向cpu发送加载完成信号,cpu收到该加载完成信号后执行pcie枚举。

330,本实施例中,如果cpu扫描到fpga芯片通过pcie通道连接在cpu上的话,也就是枚举成功,则说明cpu与fpga芯片之间的通信恢复,cpu发送枚举成功的消息给bmc。

332,bmc根据接收到的枚举成功的消息,向cpld发送重置指示,指示cpld将数据通道切换回初始连接的第二存储器。

可替代地,步骤330中,cpu向bmc发送的是一个恢复原连接的指示。而步骤332中,所述bmc根据所述恢复原连接的指示向fpga发送所述重置指示。这里的原连接也就是fpga芯片与第二存储器的连接。

334,cpld接收到bmc的重置指示后,向spimux发送通道切换指令以指令spimux切换该spimux与第一和第二存储器之间的spi通道。

336,spimux根据接收到的切换通道的指令,将spimux与flasha之间的spi通道关闭且打开spimux与flashb之间的spi通道。

spimux切换完成之后,向cpld返回确认信号以确认通道切换已完成,该cpld则向bmc返回重置成功响应。bmc接收到该重置成功响应后,向cpu返回确认信号,该确认信号指示通道已切换好(这些步骤在图中没有示出)。实际上,此时通道已切换回初始连接的flashb。这之后,cpu可以接受用户重新加载的请求,或者根据配置自动触发重新加载flashb中的逻辑。重新加载flashb中的逻辑的过程参考上述步骤306-314。当步骤314中枚举成功,则说明用户修改后的pcie静态逻辑被成功加载到fpga芯片,执行步骤338。如果枚举失败,则继续步骤316,将flasha中的管理面发布的pcie静态逻辑加载到fpga芯片中。

338,cpu通过pcie通道向fpga芯片写入用户的非pcie静态逻辑,写完非pcie静态逻辑之后,再通过pcie通道向fpga芯片写入动态逻辑。或者cpu也可以将用户的非pcie静态逻辑和动态逻辑一起通过pcie通道写入fpga。在上述的实施例中,引入了两个存储器,也就是flasha和flashb。用户修改的逻辑先写入flashb,而flasha中保存的则是用户修改之前的逻辑。如果用户修改后的逻辑加载到fpga芯片后枚举不成功,则可利用flasha中存储的逻辑还原fpga芯片中的逻辑。虽然静态逻辑因为开放给用户而可能带来风险,但是利用本发明实施例的方案,利用flasha中的逻辑可以快速地恢复fpga中的逻辑。从而保证了fpga的有效运行。

需要注意的是,如果是管理面需要升级fgpa的逻辑,更新后的逻辑也是先写入flashb,同样的,如果管理面发布的更新后的逻辑加载到fpga芯片后枚举不成功,也可利用flasha中存储的逻辑快速恢复fpga芯片中的逻辑。具体过程,可以参照上述的步骤302-304将管理面更新后的pcie静态逻辑写入到flashb中。然后参照上述步骤306-336,将flashb中的更新后的pcie静态逻辑加载到fpga芯片,如果加载flashb中的更新后的pcie静态逻辑后无法成功枚举pcie通道,则利用flasha保存的更新之前的pcie静态逻辑恢复fpga芯片中的逻辑。不同之处在于,步骤314枚举成功后,则说明管理面修改后的pcie静态逻辑被成功加载到fpga芯片。之后,可以先将更新后的pcie静态逻辑写入flasha中,待更新后的pcie静态逻辑写入flasha中之后,再执行步骤338。也可以先执行步骤338,而后再将更新后的pcie静态逻辑写入flasha中。其中,将更新后的pcie静态逻辑写入flasha的过程参考图4,包括如下步骤。

s1,fpga芯片加载flashb中的更新后的pcie静态逻辑并枚举pcie通道成功后,cpu发送加载完成信号给bmc,以表明管理面发布的pcie静态逻辑已加载成功。

s2,bmc根据接收到加载完成信号之后,确定管理面发布的pcie静态逻辑加载到pfga芯片成功,bmc据此向cpld发送第一写数据指令,指示有数据要写入flasha。

如果第一存储器设置了写保护,那么,此处所述bmc还用于向所述cpld发送关闭所述第一存储器的写保护的指令。可以是由第一写数据指令同时作为关闭写保护的指令,也可以另外一个单独的指令来作为关闭写保护的指令,本发明不作限定。

s3,cpld接收到写数据指令之后,向spimux发送通道切换指令以指示spimux切换该spimux与存储器之间的通道。

可选地,若cpld也接收到了写保护关闭的指令,则cpld向flasha发送关闭写保护指令。

s4,spimux根据接收到的该通道切换指令,将spimux与flashb之间的通道关闭,而将该spimux与flasha之间的通道连通。也就是说,原来spimux与flashb之间连通的通道被关闭,而spimux与flasha之间原本关闭的通道被连通。

s5,通道切换完成后,spimux向cpld返回确认信号以确认通道切换完成,cpld收到该确认信号后向bmc发送所述确认信号。

若上述s3中cpld也向flasha发送了关闭写保护的指令,那么cpld等收到spimux返回的切换完成的确认信号以及flasha返回的写保护关闭确认信号后,再向bmc返回确认信号以确认flasha写保护关闭且通道切换完成。

s6,所述bmc向所述cpu发送第二写数据指令,指示cpu向flash中写入数据。

s7,所述cpu调用fpga驱动程序和pcie驱动程序找到fpga芯片,并通过pcie通道向fpga芯片发送数据指令,fpga芯片通过fpga芯片与spimux之间的spi通道以及sipmux与flasha的通道数据写入到flasha中。具体过程参考步骤302-304。

可以理解的是,写完flasha后,cpu还可以向bmc发送完成指示以表明数据已写完。这时候bmc会通知cpld将数据通道切换回第二存储器。也就是说,fpga芯片连通第二存储器的状态。

可见,本发明实施例的方案也可以为管理面升级fpga芯片的pcie静态逻辑提供保障。

在另外一种情况下,也就是,当用户对fpga的修改或者使用权限到期,云服务提供商回收虚拟机时,也需要将fpga芯片上的逻辑还原为管理面发布的初始pcie静态逻辑。在这种情况下,bmc向cpld发送加载指令,指示cpld从flasha中加载管理面发布的pcie静态逻辑。而后,cpld根据接收到的加载指令通知spimux切换通道,然后通过切换后的通道将flasha中管理面发布的pcie静态逻辑加载到fpga芯片上。具体的过程参考上述步骤318-328。若步骤328中枚举成功,则flasha中管理面发布的pcie静态逻辑已成功加载到fpga芯片上。

最后应说明的是:上述的实施例以公有云中的服务器来展开,而实际上上述实施例的方案并不限于公有云,其他远程提供硬件服务给用户的网络中照样适用。比如,私有云,混合云等等。也就是说以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的保护范围。

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