EETOP 创芯网论坛 (原名:电子顶级开发网)

标题: 请教uvm的多进程设置? [打印本页]

作者: atlandis    时间: 2017-10-30 15:58
标题: 请教uvm的多进程设置?
请教uvm的多进程设置? 我把uvm的单个case运行改成了并行,几个case在后台并行,那么如何在regression的时候控制case的数量呢?加入regression有一千多个case,能不能设置10个一组的运行?
作者: jimbo1006    时间: 2017-10-30 18:33
1.既然能把单个case改成几个case并行,那就改成固定10(建议设成参数)个case并行。
2.你的环境需要的应该是这几个case的名字。假设你已经完成这一步了。
3.设置10个flag对应这10个case,flag初始为0,每有1个case跑完就让对应flag置1.
4.把所有的case name放到一个文件里面,写个脚本,第一次读取前面10个name,然后并行去等各flag的上升沿,每当flag置1,就去文件里读下一个name,同时将flag置0。(设计10个flag目的是防止特殊情况下几个case同时跑完)
5.这样设计的优点是环境可以一直保持10个case再跑,比起你的10个一组要快一点。
作者: atlandis    时间: 2017-10-30 19:22
回复 2# jimbo1006


   问题是,后台并行的时候,没有任何反馈啊,怎么设flag?
作者: jimbo1006    时间: 2017-10-30 20:16
回复 3# atlandis


   flag写到case里面去,比如case1的第一个sequence发出的同时,你定义一个信号flag1,初始赋值为0。然后在scoreborad比对最后一对transaction后,让flag1置1(这里最好设一个固定的延迟)。最后这些flag,你可以通过API/DPI/Interface种种办法传给你的脚本。
作者: goodivan    时间: 2017-10-30 21:14
通过脚本可以实现,脚本知道一次运行几个,哪些运行结束,哪些正在运行,哪些没有,不需要在case中加flag,在后台运行的时候最好把运行状态打印出来,否则不清楚运行情况
作者: nativeda    时间: 2017-10-30 22:11
UVM case 并行是什么概念? 并发多个uvm_test? 那你是改了UVM库源码了?并发多个sequence?那用virtual sequence控制不就可以了?还是你在linux后台运行了多个simulation job,每个job跑不同的uvm_test?

回复 1# atlandis
作者: atlandis    时间: 2017-10-31 09:04
回复 6# nativeda


   没那么麻烦,只是每个case跑起来后就扔掉后台去了,之前我写这个环境比较挫,完成一个case之后才去执行下一个case
作者: atlandis    时间: 2017-10-31 09:11
回复 5# goodivan


   通过脚本可以实现,脚本知道一次运行几个,哪些运行结束,哪些正在运行,哪些没有,不需要在case中加flag,在后台运行的时候最好把运行状态打印出来,否则不清楚运行情况

请教,一般来说扔到后台的case,脚本用什么途径可以知道哪些运行结束?
作者: atlandis    时间: 2017-10-31 09:58
回复 5# goodivan


   本质上是regression的shell和scoreboard怎么通信额?
作者: atlandis    时间: 2017-10-31 10:00
回复 4# jimbo1006


      本质上是regression的shell和scoreboard怎么通信额?
作者: jimbo1006    时间: 2017-10-31 10:27
回复 10# atlandis


    那个shell是你自己写的吗?你自己写的应该有办法交流吧。例如定义一个-xxx的参数,在scoreborad写上如果ifd xxx ...endif 这当然不是好的做法,好的做法是把flag提取交给脚本,然后脚本去对shell操作。
    脚本自己判断进程自然也是可以的,例如写脚本去检测后台进程是不是10个之类,但是这里你一定要想全了。例如如果在测试过程中,你不小心又后台运行了一个其他的程序,内网发给你一封未读的邮件,电脑自动更新程序了等等好多不确定的因素。因此最好还是设flag,这样一切都会在你的掌控中或者说你可以很好的验证它。
作者: atlandis    时间: 2017-10-31 11:50
回复 11# jimbo1006


   这个比较好办,vcs的进程都是simv,我用shell筛选一下就行,我觉得还是做成最大10个simv进程,小于10个的时候,执行下一个case,regression的list里面就要在每个case前面做一次判断等待还是执行?
作者: atlandis    时间: 2017-10-31 11:55
回复 11# jimbo1006


   好的做法是把flag提取交给脚本,然后脚本去对shell操作
假如用perl来做,是不是得把flag写到文件里,然后perl不断的读文件?
作者: nativeda    时间: 2017-11-1 22:45
你这是多个simulation任务的控制,和UVM有毛关系?你看下Cadence的vManager宣传材料吧,Synopsys的工具叫Execution Manager,比vManager差点
作者: atlandis    时间: 2017-11-24 09:57
回复 11# jimbo1006


   我只在脚本里面加了一句话, wait
作者: atlandis    时间: 2017-11-24 10:14
回复 14# nativeda


   我只在脚本里面加了一句话, wait,已经够用的了
作者: e_epsh    时间: 2017-11-24 17:52
回复 5# goodivan


    同问,怎么获取vcs正在进行多少个仿真
    先抛砖引玉,我的做法是在脚本中调用shell的ps au 能够获取当前linux的进程,在这个命令那个下我能够得到当前linux有几个case跑。不过这样做有几个缺陷,一是获取的是整个服务器上的vcs sim仿真;二是当vcs的sim被强制停止(或者发生什么错误,线程还是存在的,这个时候会将不是正在sim的case认为正在跑,这些假线程需要reboot才能去掉,这就不科学了)。
作者: e_epsh    时间: 2017-11-24 17:54
回复 16# atlandis


    hi  这个wait是在等什么,等sim的数量少于10吗?如何得到正在sim的数量
作者: atlandis    时间: 2017-11-24 18:18
回复 18# e_epsh

这都是可以用shell来控制的,我用wait是最最简单的一种方法,就是10个一组,wait这10个全部运行结束,然后启动下一组。
如果用ps 当然可以写的复杂一点,实时监测simv的个数,然后kill stop/continue
作者: atlandis    时间: 2017-11-24 18:22
回复 17# e_epsh


1. ps -u userXX
2. kill -STOP / -CONT

   同问,怎么获取vcs正在进行多少个仿真
    先抛砖引玉,我的做法是在脚本中调用shell的ps au 能够获取当前linux的进程,在这个命令那个下我能够得到当前linux有几个case跑。不过这样做有几个缺陷,一是获取的是整个服务器上的vcs sim仿真;二是当vcs的sim被强制停止(或者发生什么错误,线程还是存在的,这个时候会将不是正在sim的case认为正在跑,这些假线程需要reboot才能去掉,这就不科学了)
作者: e_epsh    时间: 2017-11-24 21:14
回复 19# atlandis


    那你这样就不是并行的跑了吧,只是将10个case做成一个group,跑完一个group再跑下一个
作者: atlandis    时间: 2017-11-25 16:48
回复 21# e_epsh


   10个并行




欢迎光临 EETOP 创芯网论坛 (原名:电子顶级开发网) (https://bbs.eetop.cn/) Powered by Discuz! X3.5