一种基于协程的数字仿真验证方法、设备和存储介质与流程

allin2023-03-15  126



1.本发明涉及一种基于协程的数字仿真验证方法、设备和存储介质,属于数字设计验证技术领域。


背景技术:

2.目前主流的芯片设计都是采用verilog/system verilog语言实现设计的编码,编码完成后需要检验前期的编码是否正确,这个过程就是验证。只有经过验证的芯片设计才可以最终流片生产。因此,在芯片设计过程中,验证是不可或缺的一环。随着芯片规模的增大,芯片设计中验证需要的时间越来越长,占整个设计周期的比例越来越大。为了提高验证速度,出现个各种自动化的验证语言(如systemverilog等)和验证工具(这些验证工具大部分都支持随机验证)和各种验证方法学,如ovm和vmm。因此,如何快速搭建高效的验证平台,提高验证效率,缩短验证周期,提高流程成功率,成为验证工程师的最大挑战,也是各芯片公司经历的最大的痛点之一。
3.如图1所示,为了实现验证平台和仿真平台的同步,目前采用的主流方法是基于信号量进行进程/线程间的同步来实现验证平台和仿真的同步,实现仿真平台和验证平台的“交替执行”。由于基于信号量同步的方式需要进程进程/线程切换,切换代价比较大,导致性能损失较大,而且容易死锁。


技术实现要素:

4.为了解决上述现有技术中存在的问题,本发明提出了一种基于协程的数字仿真验证方法、设备和存储介质,通过协程实现数字设计的仿真平台和验证平台之间同步运行和切换,实现轻量化的数字设计的仿真和验证任务的同步。
5.本发明的技术方案如下:
6.一方面,本发明提供一种基于协程的数字仿真验证方法,包括以下步骤:
7.搭建仿真平台和验证平台,并建立仿真平台与验证平台间的数据通道;
8.基于数字设计,确认相关联的仿真任务和验证任务;
9.根据仿真任务在仿真平台中生成仿真协程,根据验证任务在验证平台中生成验证协程,并基于相关联的仿真任务和验证任务对仿真协程和验证协程进行关联;
10.基于数字设计的推进程序,同步运行关联的仿真协程以及验证协程,通过仿真平台与验证平台间的数据通道进行仿真协程以及验证协程的数据传输,完成数字设计的仿真及验证。
11.作为优选实施方式,所述基于数字设计的推进程序,同步运行关联的仿真协程以及验证协程,通过仿真平台与验证平台间的数据通道进行仿真协程以及验证协程的数据传输的步骤具体为:
12.基于数字设计的推进程序,运行仿真协程;
13.仿真协程运行后,仿真平台给予数字设计一输入数据;
14.挂起仿真协程并切换至与运行的仿真协程相关联的验证协程,验证平台对该验证协程注入激励,并采样仿真平台的数字设计的输出数据,对输出数据进行验证,得到验证结果,并在得到验证结果后切换回仿真协程;
15.仿真协程根据验证结果进行逻辑仿真计算。
16.作为优选实施方式,基于所述仿真任务生成仿真子任务,当存在多个仿真子任务时,对应多个仿真子任务生成排序关系;对应一个仿真子任务生成一个仿真协程;
17.基于所述验证任务生成验证子任务,当存在多个验证子任务时,对应多个验证子任务生成排序关系;对应一个验证子任务生成一个验证协程。
18.作为优选实施方式,在运行仿真协程时,根据仿真子任务的排序关系,选择排序第一的仿真子任务对应的仿真协程运行;
19.在该仿真协程运行结束后,等待下一次数字设计的推进程序的运行指令,继续选择排序靠后的仿真子任务对应的仿真协程运行,直至所有仿真子任务对应的仿真协程运行完毕。
20.作为优选实施方式,当一个仿真子任务关联的验证任务存在多个验证子任务时,在所述挂起仿真协程并切换至与运行的仿真协程相关联的验证协程步骤中:
21.根据与该仿真子任务所关联的验证任务生成的多个验证子任务对应的多个验证协程的排序关系,首先切换至排序第一的验证协程,排序第一的验证协程运行完毕后再切换至排序靠后的验证协程,直至各验证子任务对应的各验证协程均运行结束,切换回仿真子任务对应的仿真协程。
22.作为优选实施方式,所述推进程序为数字时钟程序;
23.在数字时钟程序的每个时钟周期的上升沿或下降沿同步运行关联的仿真协程以及验证协程。
24.另一方面,本发明提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明任一实施例所述的基于协程的数字仿真验证方法。
25.再一方面,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任一实施例所述的基于协程的数字仿真验证方法。
26.本发明具有如下有益效果:
27.本发明一种基于协程的数字仿真验证方法,使用协程的方式进行仿真任务和验证任务的同步运行和切换,相对于线程/进程的切换方式,协程切换不需要中断及相应的现场保存和恢复,不需要地址转换,且协程的上下文切换相比线程/进程的上下文切换要轻量的多,可以获得更好的性能。
附图说明
28.图1为背景技术中传统数字仿真验证的方法流程图;
29.图2为本发明实施例的基于协程的数字仿真验证的方法流程图;
30.图3为本发明实施例中给出的传统进程切换的流程图;
31.图4为本发明实施例中给出的协程切换的流程图;
32.图5为本发明实施例中数字仿真验证的示例流程图;
33.图6为传统基于线程或进程的仿真任务和验证任务切换的示例图;
34.图7为基于本发明实施例提出的利用协程进行任务切换的示例图。
具体实施方式
35.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
36.应当理解,文中所使用的步骤编号仅是为了方便描述,不对作为对步骤执行先后顺序的限定。
37.应当理解,在本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
38.术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
39.术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
40.针对现有技术中数字设计的仿真和验证的切换代价问题,本技术实施例提供一种基于协程的数字仿真验证方法,通过协程进行仿真任务和验证任务和同步运行和切换;协程(coroutine)是一种轻量级的用户态线程,实现的是非抢占式的调度,即由当前协程切换到其他协程由当前协程来控制。coroutine是比线程更小的一种执行单元,可以认为是轻量级的线程,线程的调度是在操作系统中进行的,操作系统在调度线程的时候,需要保存线程当前执行的环境(比如所有的变量和存储单元),而coroutine调度则通过用户代码来实现的,用户通过主动切换协程的指令实现coroutine的调度。
41.因为coroutine可以在用户代码层面进行调度,coroutine在不需要cpu资源的时候可以通过协程切换指令让出执行权,进行coroutine的切换。一般的使用场景是coroutine在执行i/o操作时可以暂时让出cpu资源供其他coroutine执行来提高cpu的利用率。
42.coroutine的机制也非常适用于仿真平台需要每个时钟周期进行同步的场景。每个任务/coroutine在每个时钟周期的计算结束后,可以主动让出cpu计算资源供当前时钟周期还没有被执行的coroutine。通过coroutine的方式来实现任务的切换,实现轻量化的任务的同步。
43.参见图2,本技术实施例提供的一种基于协程的数字仿真验证方法具体包括以下步骤:
44.搭建仿真平台和验证平台,并建立仿真平台与验证平台间的数据通道;仿真平台和验证平台,可以采用verilog/system verilog/system c/chisel/c/c++等设计语言搭建,在本实施例中,因c/c++语言因为具有使用广泛、性能优异、生态完整等优势,并且与芯片设计语言verilog可以无缝集成,在芯片验证领域的接受度也极高,因此仿真平台采用verilog搭建,验证平台采用c/c++搭建。
45.ic设计流程大致有以下几个步骤:
46.1、需求设计,制订芯片功能规范;
47.2、根据芯片功能规范,采用特定的语言(如verilog)编码,来实现功能规范的具体功能;
48.3、验证编码的质量是否符合功能规范(和软件编码一样,需要测试编码是否正确);
49.4、如果验证符合规范,进行后面的流程:直到芯片被真正的生产出来。
50.根据数字设计(也就是上述ic设计流程中第2个步骤中通过编码得到的设计程序代码),确认相关联的仿真任务和验证任务;对于数字设计的验证(也就是上述ic设计流程中的第3个步骤),实际可以抽象为一个或者多个相关联的仿真任务和验证任务,这些仿真任务和验证任务需要在每个任务周期内交替执行。
51.根据生成的仿真任务在仿真平台中对应生成仿真协程,根据生成的验证任务在验证平台中对应生成验证协程;基于这些仿真任务与验证任务的关联关系,进行对应仿真协程和验证协程的关联。
52.基于数字设计的推进程序,周期性的同步运行关联的仿真协程以及验证协程,通过仿真平台与验证平台间的数据通道进行仿真协程以及验证协程的数据传输,完成数字设计的仿真及验证。对于仿真协程,其主要用于进行数字设计的逻辑仿真计算;对于验证协程,其主要用于采样数字设计的输出,注入激励并对输出进行验证。
53.对于背景技术提到的现有的进程/线程的数字仿真验证方法,图1中左侧为一个循环的仿真任务进程/线程sem_post(&sem1),在仿真过程中会持续循环执行,当仿真任务执行到时钟上升沿的时候,不能立即执行后续的逻辑仿真计算,必须等到右侧的验证任务进程/线程sem_post(&sem2)的激励注入完成;所以仿真任务进程/线程需要停止执行,让验证任务进程/线程执行,然后等待验证任务进程/线程的激励注入完成。因此程序执行的流程必须是:在每个时钟上升沿-》验证任务进程/线程激励注入-》仿真任务进程/线程逻辑仿真计算-》下一个时钟上升沿,如此循环。
54.以进程为例,进程的切换过程如图3所示。
55.而本实施例使用协程的方式进行仿真任务和验证任务的切换,相对于线程/进程的切换方式,协程切换不需要中断及相应的现场保存和恢复,不需要地址转换,且协程的上下文切换相比线程/进程的上下文切换要轻量的多,可以获得更好的性能,协程的切换过程如图4所示。
56.在本技术实施例具体的一种实现方式中,所述基于数字设计的推进程序,同步运行关联的仿真协程以及验证协程,通过仿真平台与验证平台间的数据通道进行仿真协程以及验证协程的数据传输的步骤具体为:
57.基于数字设计的推进程序,运行仿真协程;其中,数字设计的推程序,周期性的发出运行信号,仿真平台以及验证平台在初始化后,令对应的仿真协程和验证协程等待运行信号,当运行信号到达后仿真协程/验证协程进入运行状态;
58.仿真协程运行后,仿真平台给予数字设计一输入数据;
59.挂起仿真协程并切换至与运行的仿真协程相关联的验证协程,验证平台对该验证协程注入激励,并采样仿真平台的数字设计的输出数据,对输出数据进行验证,得到验证结
果,并在得到验证结果后切换回仿真协程并将验证结果传输回仿真协程;
60.仿真协程根据验证结果进行逻辑仿真计算。
61.在本技术实施例具体的一种实现方式中,基于所述仿真任务生成仿真子任务,当存在多个仿真子任务时,对应多个仿真子任务生成排序关系;对应一个仿真子任务生成一个仿真协程;对于一个数字设计的仿真,其可以或能够抽象为多个仿真子任务的组成,且多个仿真子任务间具有排序/顺次的关系,因此在本实施例的实现方式中,在把一个仿真任务拆分成多个仿真子任务的情况下,首先要对各个仿真子任务进行排序,同时对应于各仿真子任务分别生成若干仿真协程。
62.基于所述验证任务生成验证子任务,当存在多个验证子任务时,对应多个验证子任务生成排序关系;对应一个验证子任务生成一个验证协程;对于数字设计仿真的验证任务,其在进行验证的同时,可能还需要对初次的验证结果进行一系列的逻辑计算,这个过程可以抽象为一个验证任务与多个验证子任务的组成,且多个验证子任务间具有排序/顺次的关系,因此在本实施例的实现方式中,在验证任务需要进行一系列逻辑计算的情况下,首先要对各个验证子任务进行排序,同时对应于验证任务和各验证子任务分别生成若干验证协程。
63.在本技术实施例具体的一种实现方式中,在推进程序发出的运行信号到达,需要运行仿真协程时,若存在多个仿真协程,首先要根据仿真子任务的排序关系,选择排序第一的仿真子任务对应的仿真协程运行;
64.在该仿真协程运行结束后,等待下一次数字设计的推进程序的运行信号,继续选择排序靠后的仿真子任务对应的仿真协程运行,直至所有仿真子任务对应的仿真协程运行完毕,仿真平台结束此次仿真。
65.在本技术实施例具体的一种实现方式中,当一个仿真子任务关联的验证任务存在多个验证子任务时,在所述挂起仿真协程并切换至与运行的仿真协程相关联的验证协程步骤中:
66.根据与该仿真子任务所关联的验证任务生成的多个验证子任务对应的多个验证协程的排序关系,首先切换至排序第一的验证协程,排序第一的验证协程运行完毕后再切换至排序靠后的验证协程,直至各验证子任务对应的各验证协程均运行结束,切换回仿真子任务对应的仿真协程。
67.具体的,本实施例中的数字设计的推进程序采用数字时钟程序;
68.在数字时钟程序的每个时钟周期的上升沿或下降沿同步运行关联的仿真协程以及验证协程。
69.具体以图5为例,在每个时钟周期的上升沿/下降沿,仿真任务对应的仿真协程可以进行协程切换,让出cpu使用权,与该仿真任务关联的验证任务的验证协程获得cpu使用权,可以执行当前时钟周期的验证;
70.当前时钟周期的验证完成后,若该验证任务还存在需要逻辑计算的验证子任务,该验证协程也通过协程切换的方式让出cpu使用权,验证子任务对应的验证协程获得cpu的使用权,进行当前时钟周期的逻辑计算;
71.直到当前验证任务对应的所有验证协程均完成运行,最后运行的验证协程再通过协程切换的方式让出cpu使用权,对应的仿真协程再次获得cpu的使用权,仿真协程完成当
前时钟周期的逻辑计算后,仿真平台判断是否所有仿真任务均结束,若均结束则完成此次仿真,若未结束,则数字时钟程序的仿真时间轴推动,仿真进入下一个时钟周期。
72.对于传统的仿真任务和验证任务通过多进程/线程进行切换的方式,每一次的进程/线程切换都存在一定的任务切换代价,参照图5所示。
73.基于本技术实施例提出的仿真任务和验证任务通过协程的方式进行切换,参照图6所示,协程的执行效率非常高,没有进程/线程切换的开销,和多进程/线程相比,进程/线程数量越多,相同数量的协程体现出的优势越明显。并且由于只有一个进程/线程,也不存在同时写变量的冲突,在协程中控制共享资源不需要加锁,只需要判断数据的状态,所以执行效率远高于进程/线程。
74.本技术还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明任一实施例所述的基于协程的数字仿真验证方法。
75.本技术还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任一实施例所述的基于协程的数字仿真验证方法。
76.本技术实施例中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示单独存在a、同时存在a和b、单独存在b的情况。其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项”及其类似表达,是指的这些项中的任意组合,包括单项或复数项的任意组合。例如,a,b和c中的至少一项可以表示:a,b,c,a和b,a和c,b和c或a和b和c,其中a,b,c可以是单个,也可以是多个。
77.本领域普通技术人员可以意识到,本文中公开的实施例中描述的各单元及算法步骤,能够以电子硬件、计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
78.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
79.在本技术所提供的几个实施例中,任一功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory;以下简称:rom)、随机存取存储器(random access memory;以下简称:ram)、磁碟或者光盘等各种可以存储程序代码的介质。
80.以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

技术特征:
1.一种基于协程的数字仿真验证方法,其特征在于,包括以下步骤:搭建仿真平台和验证平台,并建立仿真平台与验证平台间的数据通道;基于数字设计,确认相关联的仿真任务和验证任务;根据仿真任务在仿真平台中生成仿真协程,根据验证任务在验证平台中生成验证协程,并基于相关联的仿真任务和验证任务对仿真协程和验证协程进行关联;基于数字设计的推进程序,同步运行关联的仿真协程以及验证协程,通过仿真平台与验证平台间的数据通道进行仿真协程以及验证协程的数据传输,完成数字设计的仿真及验证。2.根据权利要求1所述的一种基于协程的数字仿真验证方法,其特征在于,所述基于数字设计的推进程序,同步运行关联的仿真协程以及验证协程,通过仿真平台与验证平台间的数据通道进行仿真协程以及验证协程的数据传输的步骤具体为:基于数字设计的推进程序,运行仿真协程;仿真协程运行后,仿真平台给予数字设计一输入数据;挂起仿真协程并切换至与运行的仿真协程相关联的验证协程,验证平台对该验证协程注入激励,并采样仿真平台的数字设计的输出数据,对输出数据进行验证,得到验证结果,并在得到验证结果后切换回仿真协程;仿真协程根据验证结果进行逻辑仿真计算。3.根据权利要求2所述的一种基于协程的数字仿真验证方法,其特征在于:基于所述仿真任务生成仿真子任务,当存在多个仿真子任务时,对应多个仿真子任务生成排序关系;对应一个仿真子任务生成一个仿真协程;基于所述验证任务生成验证子任务,当存在多个验证子任务时,对应多个验证子任务生成排序关系;对应一个验证子任务生成一个验证协程。4.根据权利要求3所述的一种基于协程的数字仿真验证方法,其特征在于:在运行仿真协程时,根据仿真子任务的排序关系,选择排序第一的仿真子任务对应的仿真协程运行;在该仿真协程运行结束后,等待下一次数字设计的推进程序的运行指令,继续选择排序靠后的仿真子任务对应的仿真协程运行,直至所有仿真子任务对应的仿真协程运行完毕。5.根据权利要求3所述的一种基于协程的数字仿真验证方法,其特征在于,当一个仿真子任务关联的验证任务存在多个验证子任务时,在所述挂起仿真协程并切换至与运行的仿真协程相关联的验证协程步骤中:根据与该仿真子任务所关联的验证任务生成的多个验证子任务对应的多个验证协程的排序关系,首先切换至排序第一的验证协程,排序第一的验证协程运行完毕后再切换至排序靠后的验证协程,直至各验证子任务对应的各验证协程均运行结束,切换回仿真子任务对应的仿真协程。6.根据权利要求1所述的一种基于协程的数字仿真验证方法,其特征在于:所述推进程序为数字时钟程序;在数字时钟程序的每个时钟周期的上升沿或下降沿同步运行关联的仿真协程以及验证协程。
7.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于:所述处理器执行所述程序时实现如权利要求1至6任一项所述的基于协程的数字仿真验证方法。8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:该程序被处理器执行时实现如权利要求1至6任一项所述的基于协程的数字仿真验证方法。

技术总结
本发明涉及一种基于协程的数字仿真验证方法、设备和存介质,其中方法包括以下步骤:搭建仿真平台和验证平台,并建立仿真平台与验证平台间的数据通道;基于数字设计,确认相关联的仿真任务和验证任务;根据仿真任务在仿真平台中生成仿真协程,根据验证任务在验证平台中生成验证协程,并基于相关联的仿真任务和验证任务对仿真协程和验证协程进行关联;基于数字设计的推进程序,同步运行关联的仿真协程以及验证协程,通过仿真平台与验证平台间的数据通道进行仿真协程以及验证协程的数据传输,完成数字设计的仿真及验证;本发明通过协程实现数字设计的仿真平台和验证平台之间同步运行和切换,实现轻量化的数字设计的仿真和验证任务的同步。的同步。的同步。


技术研发人员:王宏涛 李小明 李子扬
受保护的技术使用者:瞬曜电子科技(上海)有限公司
技术研发日:2022.04.22
技术公布日:2022/7/5
转载请注明原文地址: https://www.8miu.com/read-6130.html

最新回复(0)