一种RISCV架构多核CPUCoSim比对方法及系统技术方案

技术编号:30820785 阅读:15 留言:0更新日期:2021-11-18 11:20
本发明专利技术涉及CPU技术领域,具体涉及一种RISCV架构多核CPUCoSim比对方法及系统,所述方法依次定义函数mcc_item_create、函数mcc_item_exec、函数mcc_item_commit和函数mcc_store_perform进行维护Model的load和store指令状态,将load和store指令拆分为多个动作,通过采集DUT动作的时刻,进行控制model执行的时间,使得执行DUT CPU的执行流水线时与DUT完全匹配,进而完成多核CPU CoSim比对。本发明专利技术将Model的load和store指令的一个动作,拆分为多个动作,并采集DUT动作的时刻,精确控制model执行的时间,从而达到和DUT完全匹配,进而实现对现有功能模型改动极小的情况下,让model与DUT可以进行CoSim比对,具有很强的市场应用前景。景。景。

【技术实现步骤摘要】
一种RISCV架构多核CPU CoSim比对方法及系统


[0001]本专利技术涉及CPU
,具体涉及一种RISCV架构多核CPU CoSim比对方法及系统。

技术介绍

[0002]一般在单核CPU系统中我们可以采用CoSim的方法对CPU进行每条指令的比对,也就是在仿真DUT的同时,运行一个指令集的功能模型(下面称之为model),在DUT的指令commit的时候,控制model也执行一步,之后将DUT指令的结果与model的结果进行比对,这样相当于进行了每条指令的比对,当任何一条指令的结果与model不匹配时,就可以很快的发现DUT的bug。
[0003]但是在多核CPU系统中则有所不同。由于RISCV架构对memory consistency的规定是RVWMO,也就是weak memory ordering。它允许一条store指令在commit之后并不立刻写进cache或者memory,而是可能保存在自己核的buffer里,此时即使store指令commit了,其他的核也不能看到这条store。这导致了DUT的行为与model的行为的不一致,但是它们都是符合架构规定的,从而无法使用CoSim方法对多核CPU系统进行验证。
[0004]现有多核系统验证的方法有两种,一种是编写一个checker用来检查多核系统中memory的执行过程的正确性,这种方法只能检查memory相关的数据load/store是否正确,而不能检查指令的执行正确性,而且该checker与微架构相关性极大,需要为每个不同微架构的cpu编写相应的checker,通用性较差。
[0005]另一种是编写一个与RTL相同时序的model,用该model与RTL做CoSim,从而完成指令级的比对。该方法能比对每条指令,但是model与微架构相关性也极大,并且编写如此完备的model难度较大。
[0006]因此本文介绍了一种方法,解决了在多核CPU系统中无法使用CoSim方法进行验证的问题。

技术实现思路

[0007]针对现有技术的不足,本专利技术公开了一种RISCV架构多核CPU CoSim比对方法及系统,用于解决在多核CPU系统中无法使用CoSim方法进行验证的问题。
[0008]本专利技术通过以下技术方案予以实现:
[0009]第一方面,本专利技术公开一种RISCV架构多核CPU CoSim比对方法,所述方法依次定义函数mcc_item_create、函数mcc_item_exec、函数mcc_item_commit和函数mcc_store_perform进行维护Model的load和store指令状态,将load和store指令拆分为多个动作,通过采集DUT动作的时刻,进行控制model执行的时间,使得执行DUT CPU的执行流水线时与DUT完全匹配,进而完成多核CPU CoSim比对。
[0010]更进一步的,所述方法定义函数mcc_item_create时,当指令走到dispatch stage的时候,判断为load/store指令,则调用该函数申请一个item,存入mcc_global_q相应core
的队列中,并将该item的状态置为INIT状态。
[0011]更进一步的,所述方法定义函数mcc_item_exec时,当指令走到ex2 stage的时候,取出DUT的paddr/vaddr/data,并根据id匹配一笔load/store,将其存入队列,并将该item的状态改为EXEC状态。
[0012]更进一步的,所述方法定义函数mcc_item_exec时,如果该指令是load,则将model的值与DUT load的值进行比较,如果不一致,则DUT错误,此时model的值,先搜索该core的mcc_global_q,如果找到匹配的地址,则优先用mcc_global_q中的值,如果mcc_global_q中没有,则从memory中读取。
[0013]更进一步的,所述方法定义函数mcc_item_commit时,当指令走到commit stage的时候,遍历mcc_global_q,检查当前需要commit的指令,再找到id匹配的当前指令item,之后将item的state置为COMMITTED。
[0014]更进一步的,所述方法定义函数mcc_item_commit时,如果当前指令是store,则先将该store操作的地址的值临时保存起来,再让model执行一步,再将model的执行结果与DUT的data进行比较,并在执行完之后将前面临时保存起来的值反向注入到model里面,将该地址的值还原;
[0015]如果当前指令是load,则直接让model执行一步,再将DUT的值反向注入model的GPR中,修改model的GPR,将其从mcc_global_q中删除。
[0016]更进一步的,所述方法定义函数mcc_store_perform时,当一条store指令真正写memory的时候,搜索mcc_global_q将匹配的store item,真正写入memory,并把该store从mcc_global_q中删除,从而完成整个store的流程。
[0017]更进一步的,所述方法中,load的执行过程包括以下步骤:
[0018]S1.DUT到dispatch阶段,平台采集DUT信号,调用model的mcc_item_create函数,创建item,并将该item存入mcc_global_q中;
[0019]S2.DUT到ex2 stage,平台采集DUT信号,调用model的mcc_item_exec函数,将DUT读到的paddr,vaddr,data传递给model,而model从自己的memory中读取该地址的值,与DUT的data进行比较,如果错误则报告错误,停止仿真;
[0020]S3.DUT到commit stage,平台采集DUT信号,调用model的mcc_item_commit函数,model将执行一步;
[0021]S4.将DUT的data反向注入到model的GPR中,最后将该item从mcc_global_q中删除。
[0022]更进一步的,所述方法中,store的执行过程包括以下步骤:
[0023]T1.DUT到dispatch阶段,平台采集DUT信号,调用model的mcc_item_create函数,创建item,并将该item存入mcc_global_q中;
[0024]T2.DUT到ex2 stage,平台采集DUT信号,调用model的mcc_item_exec函数,将DUT读到的paddr,vaddr,data传递给model;
[0025]T3.DUT到commit stage,平台采集DUT信号,调用model的mcc_item_commit函数,先将model相应memory地址的值读取出来,保存在临时变量里;再将model执行一步。
[0本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种RISCV架构多核CPU CoSim比对方法,其特征在于,所述方法依次定义函数mcc_item_create、函数mcc_item_exec、函数mcc_item_commit和函数mcc_store_perform进行维护Model的load和store指令状态,将load和store指令拆分为多个动作,通过采集DUT动作的时刻,进行控制model执行的时间,使得执行DUT CPU的执行流水线时与DUT完全匹配,进而完成多核CPU CoSim比对。2.根据权利要求1所述的RISCV架构多核CPU CoSim比对方法,其特征在于,所述方法定义函数mcc_item_create时,当指令走到dispatch stage的时候,判断为load/store指令,则调用该函数申请一个item,存入mcc_global_q相应core的队列中,并将该item的状态置为INIT状态。3.根据权利要求1所述的RISCV架构多核CPU CoSim比对方法,其特征在于,所述方法定义函数mcc_item_exec时,当指令走到ex2stage的时候,取出DUT的paddr/vaddr/data,并根据id匹配一笔load/store,将其存入队列,并将该item的状态改为EXEC状态。4.根据权利要求3所述的RISCV架构多核CPU CoSim比对方法,其特征在于,所述方法定义函数mcc_item_exec时,如果该指令是load,则将model的值与DUT load的值进行比较,如果不一致,则DUT错误,此时model的值,先搜索该core的mcc_global_q,如果找到匹配的地址,则优先用mcc_global_q中的值,如果mcc_global_q中没有,则从memory中读取。5.根据权利要求1所述的RISCV架构多核CPU CoSim比对方法,其特征在于,所述方法定义函数mcc_item_commit时,当指令走到commit stage的时候,遍历mcc_global_q,检查当前需要commit的指令,再找到id匹配的当前指令item,之后将item的state置为COMMITTED。6.根据权利要求5所述的RISCV架构多核CPU CoSim比对方法,其特征在于,所述方法定义函数mcc_item_commit时,如果当前指令是store,则先将该store操作的地址的值临时保存起来,再让model执行一步,再将model的执行结果与DUT的data进行比较,并在执行完之后将前面临时保存起来的值反向注入到model里面,将该地址的值还原;如果当前指令是load,则直接让model执行一步,再将DUT的值反向注入model的GPR中,修改model的GPR,将其从mcc_global_q中删除。7.根据权利要求1所述的RISCV架构多核CPU CoSim比对方法...

【专利技术属性】
技术研发人员:郑丰翔王仕文张炜余红斌
申请(专利权)人:广东赛昉科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1