发明内容
因此,本发明要解决的技术问题在于克服现有技术中的高质量的RTL仿真器和高抽象级别的FPGA内核不能兼容使用的问题,从而提供一种FPGA内核可编程仿真器。
为达到上述目的,本发明提供如下技术方案:
本发明实施例提供一种FPGA内核可编程仿真器,包括:驱动器及运行时,其中,运行时连接于驱动器与主机之间,驱动器内置至少一个被测FPGA内核,驱动器对全部的FPGA内核进行包装;当所述FPGA内核可编程仿真器启动时,主机向运行时发送第一控制信号,通过调用运行时中的仿真器对被测FPGA内核及驱动器进行仿真;当FPGA内核可编程仿真器运行时,运行时将主机发送的第二控制信号至驱动器,并根据第二控制信号,向驱动器发送命令,被测FPGA内核根据接收的命令进行计算,并通过运行时向主机返回相应的计算结果。
在一实施例中,驱动器包括:DRAM仿真器、封装壳、AXI协议接口,其中,封装壳用于对全部的被测FPGA内核进行封装,所述封装壳与所述AXI协议接口及所述运行时连接,在对被测FPGA内核进行测试时,所述封装壳用于实现所述被测FPGA内核与所述运行时之间、所述被测FPGA内核与所述AXI接口之间的信息通讯;DRAM仿真器通过调用运行时库中的仿真器对DRAM代码进行仿真,为FPGA内核仿真提供相应的数据存取功能;AXI协议接口连接于封装壳及DRAM仿真器之间,用于传输从DRAM仿真器中读取的数据及要写入DRAM仿真器中的数据。
在一实施例中,运行时的仿真器为RTL仿真器,RTL仿真器由高抽象级别的FPGA内核通过高抽象级别的开发套件生成。
在一实施例中,FPGA内核可编程仿真器还包括:分别与驱动器、运行时连接的调试器,调试器用于通过运行时将调试信号及调试数据对被测FPGA内核进行调试,并根据运行时返回的结果检查并输出被测FPGA内核操作的正确性;监测DRAM仿真器的数据存储情况、从AXI协议接口的AXI总线读取的被测FPGA内核和AXI总线的状态;分析从AXI总线读取的被测FPGA内核和AXI总线的状态,并可视化特定变量和DRAM仿真器地址的活动。
在一实施例中,调试器包括:测试器、监视器及性能分析器,其中,测试器与运行时连接,测试器用于通过运行时将调试信号及调试数据对被测FPGA内核进行调试,并根据运行时返回的结果检查并输出被测FPGA内核操作的正确性;监视器分别与AXI协议接口、DRAM仿真器连接,用于监测DRAM仿真器的数据存储情况、从AXI总线读取的被测FPGA内核和AXI总线的状态;性能分析器与监视器连接,用于分析从AXI总线读取的被测FPGA内核和AXI总线的状态,并可视化特定变量和DRAM仿真器地址的活动。
在一实施例中,测试器为:Peek-poke测试器。
在一实施例中,监视器包括:与DRAM仿真器连接的DRAM监视器,用于监测DRAM仿真器的数据存储情况;与AXI协议接口连接的AXI监视器,用于监测从AXI总线读取的被测FPGA内核和AXI总线的状态。
在一实施例中,FPGA内核可编程仿真器还包括:连接于驱动器与运行时之间的数据接口。
本发明技术方案,具有如下优点:
1.本发明提供的FPGA内核可编程仿真器,运行时连接于驱动器与主机之间,驱动器内置至少一个被测FPGA内核,驱动器对全部的FPGA内核进行包装;当FPGA内核可编程仿真器启动时,主机向运行时发送第一控制信号,通过调用运行时中的仿真器对被测FPGA内核及驱动器进行仿真;当FPGA内核可编程仿真器运行时,运行时将主机发送的第二控制信号至驱动器,并根据第二控制信号,向驱动器发送命令,被测FPGA内核根据接收的命令进行计算,并通过运行时向主机返回相应的计算结果,通过将高抽象级别的被测FPGA内核与现有高质量仿真器进行集成,使开发者能够使用高抽象级别的开发软件进行FPGA内核开发并使用现有高质量仿真器仿真,方便FPGA内核开发者并提高FPGA内核的仿真效率。
2.本发明提供的FPGA内核可编程仿真器,通过将高抽象级别的被测FPGA内核使用高抽象级别的FPGA开发套件生成RTL,并将生成的RTL与现有高质量的RTL仿真器相集成,解决了现存高质量RTL仿真器和高抽象级别的FPGA内核不兼容使用的问题,大大提高仿真性能。
3.本发明提供的FPGA内核可编程仿真器,调试器中的Peek-poke测试器用来对开发的FPGA内核进行测试,以便开发者轻松的找到错误并进行修复;监视器可以监视驱动器中AXI总线的活动;调试器中的性能分析器可以分析并可视化监视器监视到的结果,开发者可以根据可视化的结果对FPGA内核中的内存操作进行优化,有助于提高FPGA内核的执行效率。
具体实施方式
下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,还可以是两个元件内部的连通,可以是无线连接,也可以是有线连接。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
此外,下面所描述的本发明不同实施方式中所涉及的技术特征只要彼此之间未构成冲突就可以相互结合。
实施例
本发明实施例提供一种FPGA内核可编程仿真器,应用于对FPGA内核仿真测试的场合,如图1所示,包括:驱动器1及运行时2。
如图1所示,本发明实施例的运行时2连接于驱动器1与主机之间,以及实现驱动器1与主机之间的数据传输。驱动器1内置至少一个被测FPGA内核,被测FPGA内核的数量由FPGA内核开发者开发的代码确定,当所述FPGA内核可编程仿真器启动时,主机向所述运行时发送第一控制信号,通过调用所述运行时中的仿真器对被测FPGA内核及驱动器进行仿真;当所述FPGA内核可编程仿真器运行时,所述运行时将主机发送的第二控制信号至所述驱动器,并根据第二控制信号,向所述驱动器发送命令,被测FPGA内核根据接收的命令进行计算,并通过运行时向主机返回相应的计算结果。
具体地,当本发明实施例的FPGA内核可编程仿真器启动时,主机将发送第一控制信号发送至运行时2,并调用运行时2中的仿真器对被测FPGA内核及驱动器1中的仿真器进行仿真,启动完成之后,运行时将主机发送的第二控制信号发送至被测FPGA内核,被测FPGA内核执行计算,被测FPGA内核将计算结果通过运行时2再发送至主机。
本发明实施例的运行时2包含一个仿真器,用于使用主机代码运行硬件驱动程序。仿真器在仿真被调用,以对被测FPGA内核和驱动器1中的DRAM仿真器的RTL进行仿真,从而模拟FPGA内核和DRAM仿真器的真实操作。本发明实施例的运行时2的仿真器为RTL仿真器,RTL仿真器由高抽象级别的FPGA内核通过高抽象级别的开发套件生成,则被测FPGA内核为RTL级的FPGA内核。
在一具体实施例中,如图2所示,驱动器1包括:DRAM仿真器11、封装壳12、AXI协议接口13。
如图2所示,本发明实施例的封装壳12用于对全部的被测FPGA内核进行封装,封装壳与AXI协议接口及所述运行时连接,在对被测FPGA内核进行测试时,封装壳用于实现被测FPGA内核与运行时之间、被测FPGA内核与AXI接口之间的信息通讯。
本发明实施例的DRAM仿真器11通过调用运行时2库中的仿真器对DRAM代码进行仿真,为FPGA内核仿真提供相应的数据存取功能;AXI协议接口13连接于封装壳12及DRAM仿真器11之间,用于传输从DRAM仿真器11中读取的数据及要写入DRAM仿真器11中的数据。
具体地,本发明实施例利用封装壳12对被测FPGA内核进行封装,从而可以不需要修改被测FPGA内核,而是添加封装壳12,就可以轻松地连接到AXI协议接口13并进行仿真。
具体地,AXI协议接口13遵循AXI协议和规范,构建基于AXI协议的接口和总线用于仿真,AXI协议接口也是使用RTL模型生成的,由仿真器与被测FPGA内核一起执行。
具体地,运行时2主要功能是向硬件驱动程序发送信号以及在主机和DRAM之间传输数据。运行时2中包含三个命令:EnqueueTask、ReadBuffer和WriteBuffer,如表1所示。
表1
表1中EnqueueTask命令生成START信号,并将其发送到驱动器1,并使仿真开始工作,ReadBuffer和WriteBuffer命令为主机与DRAM仿真器11数据交互的命令。在实际的计算中,主机首先将要参与计算的数据给运行时2,运行时2通过调用WriteBuffer将命令写入驱动器1中的DRAM仿真器11,做好计算的准备工作,随后通过运行时2的EnqueueTask命令向被测FPGA内核发送开始信号,被测FPGA内核开始执行真正的计算。在计算完成后,运行时2通过ReadBuffer命令从DRAM仿真器11读取计算结果并传回给主机。
具体地,当运行时2发出WriteBuffer命令时,封装壳12接收WriteBuffer命令并将命令转给被测FPGA内核,之后,封装壳12接收运行时2传输过来的数据并将数据传给被测FPGA内核,调用运行时2中的仿真器对被测FPGA内核进行计算后输出数据,封装壳12接收被测FPGA内核传出的数据写信号发送到AXI协议接口13,封装壳12接收被测FPGA内核传出的数据并将其发送到AXI协议接口13。
具体地,当运行时2发出ReadBuffer命令时,封装壳12接收ReadBuffer命令并将命令转给被测FPGA内核,之后,封装壳12接收被测FPGA内核传出的数据读信号发送到AXI协议接口13,封装壳12接收AXI协议接口13传入的数据并将其发送给被测FPGA内核,封装壳12接收被测FPGA内核传输过来的数据并将数据传给运行时2。
在一具体实施例中,如图3所示,FPGA内核可编程仿真器,还包括:分别与驱动器1、运行时2连接的调试器3,调试器3用于通过运行时2将调试信号及调试数据对被测FPGA内核进行调试,并根据运行时2返回的结果检查并输出被测FPGA内核操作的正确性;监测DRAM仿真器11的数据存储情况、从AXI协议接口13的AXI总线读取的被测FPGA内核和AXI总线的状态;分析从AXI总线读取的被测FPGA内核和AXI总线的状态,并可视化特定变量和DRAM仿真器11地址的活动。
具体地,如图4所示,本发明实施例的调试器3包括:测试器31、监视器32及性能分析器33。
如图4所示,本发明实施例的测试器31与运行时2连接,测试器31用于通过运行时2将调试信号及调试数据对被测FPGA内核进行调试,并根据运行时2返回的结果检查并输出被测FPGA内核操作的正确性。
具体地,本发明实施例的测试器31为Peek-poke测试器,Peek-poke测试器基于Peek-poke测试方法,Peek-poke测试方法是一种基于用例的单元测试方法,适当地使用此方法可以涵盖FPGA内核开发中的大多数情况,并且可以轻松地找到并修复测试时的错误,选择使用Peek-poke测试器。Peek-poke测试器在仿真时代替主机,在调试时提供调试输入,并根据运行时2返回的仿真结果检查被测FPGA内核操作的正确性。
如图4所示,本发明实施例的监视器32分别与AXI协议接口13、DRAM仿真器11连接,用于监测DRAM仿真器11的数据存储情况、从AXI总线读取的被测FPGA内核和AXI总线的状态。
具体地,本发明实施例的监视器32包括:与DRAM仿真器11连接的DRAM监视器,用于监测DRAM仿真器11的数据存储情况;与AXI协议接口13连接的AXI监视器,用于监测从AXI总线读取的被测FPGA内核和AXI总线的状态。
具体地,本发明实施例的监视器32通过监视DRAM仿真器11里特定地址数据的变化、以及通过监视AXI协议接口13的AXI总线在内核和DRAM仿真器11之间发生的信号和活动,判断是否运行异常。同时,监视器32可以指定DRAM仿真器11上的地址以及通过要监控的AXI总线传输的变量,并获得有关数据传输活动的可编程信息。借助此功能,被测FPGA内核开发人员可以轻松地测试内核并使用AXI协议接口13查找内核中的错误。
如图4所示,本发明实施例的性能分析器33与监视器32连接,用于分析从AXI总线读取的被测FPGA内核和AXI总线的状态,并可视化特定变量和DRAM仿真器11地址的活动。
具体地,性能分析器33用来分析监视器32从AXI总线读取的被测FPGA内核和AXI总线的状态,并可视化特定变量和DRAM仿真器11地址的活动。通过分析结果,开发人员可以分析通过AXI总线在被测FPGA内核和DRAM仿真器11之间进行数据传递的设计并在可视化结果的指导下重新安排从被测FPGA内核到DRAM仿真器11的访问。
在一具体实施例中,如图5所示,FPGA内核可编程仿真器还包括:连接于驱动器1与运行时2之间的数据接口4,数据接口4可以为PCIe接口、USB接口等,但由于PCIe接口速度快,使用广,故本发明实施例选用PCIe接口。
显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引申出的显而易见的变化或变动仍处于本发明创造的保护范围之中。