一种面向硬件语言代码的通用测试系统和方法

文档序号:30552222发布日期:2022-06-29 02:03阅读:124来源:国知局
一种面向硬件语言代码的通用测试系统和方法

1.本发明属于程序代码测试领域,具体涉及一种面向硬件语言代码的通用测试系统和方法。


背景技术:

2.对代码进行测试是软硬件开发过程的必要过程。目前已有的针对软件语言的在线评测平台较多,例如浙江大学的pat(programming ability test,leetcode刷题网站,牛客网招聘刷题网站等,这些在线评测平台能够提供对c/c++、java、python,javascript等多种软件语言软件执行测试。
3.目前已有针对硬件编程语言(硬件语言)的在线评测平台有jutge,hdlbit等,提供对于verilog语言的软件仿真验证,并且只能验证规模较小的电路,且没有物理验证。目前已有很多远程fpga实验平台的实现方法,例如:公开号为cn111666685a提供的轻量级服务器搭建的远程fpga实验平台、公开号为cn111427839a提供的一种intel soc fpga远程在线配置和调试方法,或者公开号为cn111445364a提供的专门为教学而设计的fpga云实验室平台,这些公开的技术方案无法提供符合一定规范的测试模式。
4.目前已有针对硬件语言的在线测试平台,都能下载到fpga开发板自动进行特定代码测试。目前已有的远程fpga平台很少用于学生特定工程问题的代码的评测,有一些已有的远程fpga教学平台,能够对课程内的实验进行简单的自动评测,但是不能对实际生产中遇到的问题提供测试方案,但是不能进行很好的扩展,即可能只有特定实验能够评测。例如国科大的fpga可扩展的云实验平台zycube,其中每个云节点都由arm处理器和紧密耦合的可重构结构组成,能够为学生提供动手操作硬件和软件编程体验,但是无法对学生的实验结果进行自动评价,老师对每个学生的代码进行检查和运行是一个工作量很大的任务。
5.现有的远程fpga实验平台,例如江苏大学的welab远程实验平台。具有优秀的实验操作界面,但是其主要目的是让学生理解计算机组成的原理,系统中有很多预先设定好的硬件电路实验,用户可以点击下载然后通过虚拟面板观察实验现象。可以对系统中已经设计好的cpu进行编程,观察数据变化情况。但是学生进行自主的硬件设计存在限制,从而在一定程度上无法验证自己的硬件代码。
6.现有的硬件代码物理真机测试的方法与软件代码测试的方法相比较为复杂,需要综合考虑硬件与软件的协同设计、软硬件交互、不同设备间同步和数据通信等等问题,并且往往具有专用性,即一套测试方案只能针对某种特定任务的芯片,缺少灵活性和可重用性。
7.现有的硬件模块测试最常用的方法是软件仿真,但是仿真通过后在真机上执行代码未必能够通过,即使在保证物理开发板没有硬件问题的前提下,也存在物理时序上的问题,例如硬件代码如果需要对物理外设进行调用(如读取存储器中的数据),仅仅通过软件仿真未必能够完全模拟物理设备的所有细节。


技术实现要素:

8.鉴于上述,本发明的目的是提供一种面向硬件语言代码的通用测试系统和方法,实现硬件语言代码的高效且通用测试。
9.为实现上述发明目的,实施例提供了一种面向硬件语言代码的通用测试系统,包括fpga开发板和控制器;所述fpga开发板包括测试输入激励模块、被测试模块、测试输出检测模块、测试同步模块以及测试数据采样模块;
10.所述测试输入激励模块用于根据测试应用场景输出时钟信号、输入控制信号、测试输入数据至被测试模块;
11.所述被测试模块用于被用户设计,得到设计的硬件语言代码,并基于时钟信号、输入控制信号以及测试输入数据对硬件语言代码进行测试,输出测试状态、输出控制信号以及测试输出数据至测试输出检测模块;
12.所述输出检测模块用于对测试输出数据和正确输出数据进行比对,将比对结果作为测试结果输出至控制器,同时分析测试状态以得到测试进度并输出至控制器;
13.所述测试同步模块用于对测试输入数据和测试输出数据进行同步标记,便于数据的管控和数据的比对;
14.所述测试数据采样模块用于采样测试输入数据、测试输出数据以及对应的正确输出数据,并形成测试数据输出至控制器;
15.所述控制器用于对fpga开发板实现硬件语言代码的测试过程进行控制,还用于根据接收的测试结果和测试进度判断测试是否通过,并输出最终测试结果。
16.在一个实施例中,所述测试同步模块通过测试标签对当前时刻输入的测试输入数据、和对应的测试输出数据进行同步标记,以将测试输入数据与对应的测试输出数据对应起来;
17.所述测试同步模块通过下一组标签对下一时刻输入的测试输入数据和对应的测试输出数据进行同步标记,以将测试输入数据与对应的测试输出数据对应起来。
18.在一个实施例中,所述测试输入激励模块用于在当前时刻生成测试标签,在当前时刻将测试输入数据输入至被测试模块时,将测试标签输出至测试同步模块;
19.所述测试同步模块用于将接收的测试标签转发至测试输出检测模块;
20.所述测试输出检测模块用于利用接收的测试标签对测试输入数据经过硬件语言代码执行计算得到的测试输出数据进行标记,还用于在当前时刻的测试输入数据测试结束后,生成下一时刻的下一组标签并发送至测试同步模块;
21.所述测试同步模块还用于将接收的下一组标签转发至测试输入激励模块;
22.所述测试输入激励模块用于根据接收的下一组标签对下一时刻的测试输入数据进行标记。
23.在一个实施例中,所述测试输入激励模块还用于根据测试需求对时钟信号和输入控制信号进行分频和延时处理,处理后的时钟信号和输入控制信号输入至被测试模块。
24.在一个实施例中,所述fpga开发板还包括多个可调用辅助模块,单个可调用辅助模块具有单一辅助功能或提供fpga开发板的适配所需文件,以辅助被测试模块实现硬件语言代码的编写。
25.在一个实施例中,所述fpga开发板还包括复位模块,所述复位模块用于受所述控
制器控制输出复位信号,所述复位信号包括系统复位信号、待测复位信号以及计时复位信号;其中,系统复位信号用于控制通用测试系统的执行测试功能的开始,待测复位信号用于控制测试例的测试开始,计时复位信号用于控制计时的开始。
26.在一个实施例中,所述fpga开发板还包括时钟模块,所述时钟模块用于为测试过程提供多种频率的时钟信号,以驱动测试顺利进行。
27.为实现上述发明目的,实施例还提供了一种面向硬件语言代码的通用测试方法,所述通用测试方法采用上述通用测试系统,包括以下步骤:
28.被测试模块获取用户通过被测试模块、或者和可调用辅助模块编写能够实现测试应用场景的硬件语言代码;
29.控制器在接到测试任务后,将可执行文件烧录到fpga开发板,并控制复位模块输出复位信号以开始测试;
30.在测试同步模块的标签同步下,以及测试输入激励模块和测试输出检测模块在标签的控制下,对被测试模块的硬件语言代码进行运行和监控以实现测试过程,输出测试结果和测试进度至控制器;
31.测试数据采样模块对测试过程的测试输入数据、测试输出数据以及正确输出数据进行采样并保存;
32.测试结束后,测试数据采样模块将保存的数据传输至控制器;
33.控制器依据测试结果和测试进度判断测试是否通过,并输出最终测试结果。
34.与现有技术相比,本发明具有的有益效果至少包括:
35.实施例提供的通用测试系统为学校老师提供一种新的评价学生硬件编程能力方案,学生通过远程的通用测试系统只需要按照测试题目要求完成硬件语言代码编写,通用测试系统即可通过物理硬件平台对编写的硬件语言代码进行验证,无需老师人工判别代码或者逐个编译下载运行,并且老师能够提前设计关键数据,从而避免人工判别中的疏漏;
36.其中,针对关键数据理解为:每一个硬件代码模块,要判断正确与否,很可能没办法对所有可输入数据进行运行,因为数据量可能很大,例如32位加法器,不可能对所有值进行计算,因此在常见的软件测试平台上,往往都是运行一些边界数据,例如加法器的0+0,0+1,0-1,2147483647+1等等,这就是这里的关键数据,而不同的硬件模块具有不同的关键数据。
37.实施例提供的通用测试系统为企业提供一种新的开发硬件的模式,产品经理只需要为新产品提供使用说明书和一些使用样例,然后由开发人员按照这个说明书通过通用测试系统的被测试模块根据说明书设计新产品,并通过其他模块实现新产品的测试。
38.实施例提供的通用测试系统提供了硬件语言代码的编辑功能和硬件语言代码的测试功能,实现了硬件语言代码的高效且通用测试。
附图说明
39.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动前提下,还可以根据这些附图获得其他附图。
40.图1是实施例提供的面向硬件语言代码的通用测试系统的结构示意图;
41.图2是实施例提供的面向硬件语言代码的通用测试方法的流程图;
42.图3是实施例提供的信号示意图;
43.图4和图5是实验例提供的代码仿真结果。
具体实施方式
44.为使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例对本发明进行进一步的详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不限定本发明的保护范围。
45.图1是实施例提供的面向硬件语言代码的通用测试系统的结构示意图。如图1所示,实施例提供的通用测试系统包括fpga开发板和fpga开发板控制器;其中,fpga开发板包括测试输入激励模块、被测试模块、测试输出检测模块、测试同步模块、测试数据采样模块、复位模块、时钟模块、多个可调用辅助模块。下面针对每个模块的功能进行详细说明:
46.复位模块用于输出复位信号至测试输入激励模块,该复位信号用于代表测试启动信号,由fpga开发板上的复位模块和控制器通过gpio端口进行提供,即控制器通过gpio端口控制复位模块输出复位信号,实施例中,复位信号包括系统复位信号、待测复位信号以及计时复位信号;其中,系统复位信号用于控制通用测试系统的执行测试功能的开始,待测复位信号用于控制测试例的测试开始,计时复位信号用于控制计时的开始。
47.时钟模块用于输出为测试过程提供多种频率的时钟信号,以驱动测试顺利进行,时钟模块输出的时钟信号至测试输入激励模块。
48.测试输入激励模块用于根据测试应用场景输出时钟信号、输入控制信号、测试输入数据至被测试模块。其中,输入控制信号是用于向被测试模块发送控制指令,包括启动测试、下一组测试数据就位,测试哪个功能等等,测试输入数据是指用于测试通过被测试模块编辑的硬件语言代码的实现功能,可由外界输入。根据测试应用场景的需求,即根据硬件语言代码的实现功能,测试输入激励模块还用于对时钟信号和输入控制信号进行分频和延时处理,处理后的时钟信号和输入控制信号输入至被测试模块。例如,当需要测量被测试模块完成某个功能花费的时钟周期数时,被测试模块复位需要在计时复位之后,此外需要在不同频率时钟测试被测试模块能够正常运行的最高频率。
49.被测试模块用于用户设计,得到设计的硬件语言代码,即用户(学生或设计者)通过被测试模块提供的接口进行设计,以设计测试应用场景的硬件语言代码。被测试模块还用于基于时钟信号、输入控制信号以及测试输入数据对硬件语言代码进行测试,输出测试状态、输出控制信号以及测试输出数据至测试输出检测模块。其中,测试状态标记了测试输出数据的有效性,即表示测试输出数据是中间结果数据还是最终结果数据,测试输出数据是指测试输入数据经过编写的硬件语言代码执行计算后得到的数据。输出控制信号是指用于告知后继模块当前输出是否有效,在测试中用于通知测试输出检测模块读取有效输出并忽略中间无关数据。
50.输出检测模块用于对测试输出数据和正确输出数据进行比对,将比对结果作为测试结果输出至控制器,同时分析测试状态以得到测试进度并输出至控制器。其中,正确输出数据是指对测试输入数据进行被测试模块编写的测试应用功能实现的正确结果,例如,当
测试应用功能为加法算式时,则该加法算式可以通过被测试模块编写形成硬件语言代码实现加法功能,该正确输出数据是指经加法算式计算的结果。
51.由于测试状态表明了测试输出数据的状态,即是中间结果还是最终结果,当分析测试状态表明测试输出数据为中间结果数据时,则测试进度表明还没有测试测试结束,当分析测试状态表明测试输出数据为最终结果数据时,则测试进度表明已经测试结束。
52.测试同步模块用于对测试输入数据和测试输出数据进行同步标记,保证测试过程能够将包括测试输入数据的测试样例和测试结果是一一对应的,便于数据的管控和数据的比对。实施例中,测试同步模块通过测试标签对当前时刻输入的测试输入数据、和对应的测试输出数据进行同步标记,以将测试输入数据与对应的测试输出数据对应起来,具体地,测试输入激励模块用于在当前时刻生成测试标签,在当前时刻将测试输入数据输入至被测试模块时,将测试标签输出至测试同步模块;测试同步模块用于将接收的测试标签转发至测试输出检测模块;测试输出检测模块用于利用接收的测试标签对测试输入数据经过硬件语言代码执行计算得到的测试输出数据进行标记。
53.实施例中,测试同步模块通过下一组标签对下一时刻输入的测试输入数据和对应的测试输出数据进行同步标记,以将测试输入数据与对应的测试输出数据对应起来。具体地,测试输出检测模块用于在当前时刻的测试输入数据测试结束后,生成下一时刻的下一组标签并发送至测试同步模块;测试同步模块用于将接收的下一组标签转发至测试输入激励模块;测试输入激励模块用于根据接收的下一组标签对下一时刻的测试输入数据进行标记。
54.测试数据采样模块用于采样测试输入数据、测试输出数据以及对应的正确输出数据,并形成测试数据输出至控制器。
55.控制器用于对fpga开发板实现硬件语言代码的测试过程进行控制,还用于根据接收的测试结果和测试进度判断测试是否通过,并输出最终测试结果。
56.实施例中,单个可调用辅助模块具有单一辅助功能或提供fpga开发板的适配所需文件,例如引脚约束文件等,以辅助被测试模块实现硬件语言代码的编写。其中,单一辅助功能包括二选一多路选择器,3-8译码器等等。
57.图2是实施例提供的面向硬件语言代码的通用测试方法的流程图;图3是实施例提供的信号示意图。实施例提供的通用测试方法应用上述通用测试系统,如图2和图3所示,包括以下步骤:
58.步骤1,被测试模块的编写;
59.实施例中,被测试模块接口提供给用户以进行功能编写,用户使用测试题目中定义的可调用辅助模块对被测试模块进行硬件语言代码设计,以实现硬件语言代码的设计编写,被测试模块获取用户通过单个被测试模块、或者被测试模块和至少1个可调用辅助模块编写能够实现测试应用场景的硬件语言代码;
60.步骤2,测试前的准备工作
61.实施例中,控制器在接到测试任务后,将可执行文件烧录到fpga开发板,并控制复位模块输出复位信号以开始测试。
62.步骤3,标签监控的被测试模块的测试过程
63.实施例中,当开始进行测试时,在测试同步模块的标签同步下,以及测试输入激励
模块和测试输出检测模块在标签的控制下,对被测试模块的硬件语言代码进行运行和监控以实现测试过程,输出测试结果和测试进度至控制器。
64.具体地,测试输入激励模块在收到复位信号时,生成当前时刻的测试标签,在当前时刻将测试输入数据输入至被测试模块时,将测试标签输出至测试同步模块,测试同步模块用于将接收的测试标签转发至测试输出检测模块;被测试模块基于输入的测试输入数据、时钟信号以及输入控制信号执行测试过程,并输出模块状态、输出控制信号以及测试输出数据至测试输出检测模块,输出检测模块测试输出检测模块利用接收的测试标签对测试输入数据经过硬件语言代码执行计算得到的测试输出数据进行标记;并在当前时刻的测试输入数据测试结束后,生成下一时刻的下一组标签并发送至测试同步模块;测试同步模块将接收的下一组标签转发至测试输入激励模块;测试输入激励模块根据接收的下一组标签对下一时刻的测试输入数据进行标记。
65.步骤4,测试数据的采样过程。
66.实施例中,测试数据采样模块可以以时钟模块提供的最高频率时钟信号作为采样时钟,对测试过程的测试输入数据、测试输出数据以及正确输出数据进行采样并保存,并在测试结束后,测试数据采样模块将保存的数据按照一定的格式,通过gpio传输到控制器。
67.步骤5,测试是否通过的判断
68.实施例中,控制器依据测试结果和测试进度判断测试是否通过,并输出最终测试结果。
69.上述实施例提供的通信测试系统和方法能够进行在fpga开发板上对硬件语言代码进行测试,完成真机物理层面的验证。该测试系统和方法可以面向教学场景,实现学生通过被测试模块设计的硬件语言代码的自动化真机物理验证的测试。
70.实施例提供的通用测试系统和方法还面向工程中遇到的实际问题,根据提供的测试系统进行硬件功能设计,即可在远程通用测试系统上进行测试发布,并由公司内的技术人员通过测试系统开发验证,从而提高硬件开发的效率。
71.实施例提供的通用测试系统和方法不需要考虑硬件平台的引脚约束问题,针对不同的fpga开发板,通过可调用的辅助模块自动匹配硬件约束,从而设计人员能够专心于核心逻辑功能设计。
72.实施例提供的通用测试系统是对硬件代码语言的在线评测系统,还可以通过其他工具例如github上的开源软件verilator能够对verilog代码进行软件仿真,通过仿真也能完成代码逻辑性的评测,但是软件仿真无法完全保真模拟硬件上的时序,即软件仿真通过未必100%能够在物理上正确工作。
73.与传统的硬件测试方案不同(传统的方案为生产出芯片,然后再进行测试),实施例提供的系统和方法针对的是fpga,具有可编程的特性,提高了灵活性。
74.实验例
75.针对个4-16译码器的测试题目,但是涉及两个8位的输出数据。这种场景会出现在单个物理芯片引脚不够时,需要以码的高位作为片选信号存在,例如一个5-32译码器,可以设计成4个3-8译码器,最高两位作为第几个3-8译码器的选中信号。
[0076][0077]
经过上述实施例提供的通用测试系统,代码仿真结果如图4所示,该仿真结果仅展示部分关键端口,其中,测试输出检测模块用于检测被测试模块的测试输出数据与标准的正确输出数据是否相同,通过ans标志进行指示,如果ans为1表示测试数据正确,否则表示数据错误。fpga的顶层端口里面的testready表示测试是否结束,用于与控制器进行通信,若该信号为高,则控制器启动数据传输,通过顶层端口中的testclk发送时钟信号给fpga,fpga通过testdata信号输出数据。
[0078]
图4描述了一个正确的代码的测试结果。图5表示测试结果错误的情况,修改了正确的被测试模块代码,实施例提供的硬件代码测试方法能够准确找到错误的位置,并保证测试结果的准确。
[0079]
以上所述的具体实施方式对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的最优选实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1