PSS基础篇之四:活动调度

路科验证 2021-12-31 12:14

当我们构建好atomic action以后,接下来还需要将它们组合在一起,形成一个组合动作(compound action)。组合动作会包含多个action,且使用活动(activity)来执行这些动作,同时规定好它们之间的时序关系。在接下来学习activity的过程中,希望读者一方面可以将它与sequence/item之间的关系进行对比,另一方面也要注意在调度(scheduling)安排时,action之间依赖关系会受到哪些方面的影响。


acitivity在声明时需要置于action中,它们本身不需要一个独立的名称。activity是用来描述子一级action之间的时序、控制和数据流的关系。在activity中action之间的默认关系是顺序发生的,这可以用来映射数据流的关系。在activity内部还可以内置很多不同的语句来调度action之间的发生顺序。学习activity重要的地方即在于掌握这些描述action之间调度的语句,以及理解它们之间“可能”出现的关系(可能在这里表示acitivty描述的关系虽然看起来是静态的,但其实最终由PSS推断出来的关系可能不止一种,请读者在后面的学习中逐渐体会这一魅力)。

动作调度(action scheduling)

简单来理解动作调度,首先需要认识动作遍历(action traversal),它的目的即在于使得action被初始化、随机化再到执行。对应到UVM sequence,则类似于我们通过类似的宏`uvm_do/`uvm_do_with来完成某个sequence/item从创建、随机化再到执行的完整过程。


我们可以看到下面这段示例代码,action A为atomic acton,action B中置有activity,它用来对a1和a2做调度,action C中的activity对max和b1做调度。

component activity_traversal_statement { action A { rand bit [3:0] f1; }; action B { A a1, a2; activity { a1; a2 with { f1 < 10; }; }; }; action C { action bit [3:0] max; B b1; activity { max; b1 with { a1.f1 <= max; }; }; };};

可以对B的activity做简单的梳理,即a1和a2默认按照顺序关系执行,而在执行a2的过程中也对其成员做了随机化约束处理。


到了C的activity,先通过action bit[3:0] max来声明一个random action域,这种方式相比较于先定义action,再在其内声明一个向量要更快捷,注意这种方式在PSS中是合法的,但无论是action类型还是数据类型,都应该在上层action中用action来声明。在C的activity中,先对变量max做了随机遍历(即产生一个随机后的变量),而后再对b1进行随机遍历,且在遍历的过程中,将上一步随机后的max传入作为外部约束的一部分。DVT产生的图中,a_2/a_3即为b1展开后的内容,但并未体现出max变量,读者在这里可以将以上声明max的方式理解为只是为了需要从一个最小的合法声明容器中获得一个随机值,而在acitvity中随机遍历的对象都需要是action,所以才使用了上述的那种简明方式。




在对以上代码有简单认识以后,希望读者可以注意这些事项:

  • activity中的action变量只有在它所在的调度位置才会初始化、随机化和执行。
  • action句柄只有被第一次遍历后,才可以通过它访问其成员。
  • 在进入activity后,所有的action句柄都将重置为非初始化状态,即不管之前是否已经遍历过,如果再次进入后,各个action句柄都将重置(不再保持之前的数据),这一点与我们在UVM中的经验不同。

对action的调度除了上述方式即声明action变量以外,也可以使用匿名方式,例如将上面的action B可以修改为以下代码,即通过do的方式来直接调度action。

action B { activity { do A; do A with {f1 < 10;}; };};

串行调度

如果按照串行调度的方式,那么上一个action在执行完之后,才会执行下一个action。这个action有可能是atomic action,也可能是compound action。这种串行调度方式,也可以与其它action之间的依赖关系组合,继而由PSS工具推断最终的执行先后顺序。

action my_test { A a1, a2, a3; B b1, b2, b3; activity { a1; b1; {a2; b2;}; sequence{a3; b3;}; };};

在上面提供的代码中,既可以采用默认方式执行串行调度,也可以使用花括号{ },还可以使用sequence关键词来安排。


并行调度

并行调度类似于SV fork-join,即会要求其内部的action并行执行,并且在全部action执行完之后,才会退出。在PSS 2.0推出之后,又增加了更细致的并行控制(join_branch/join_select/join_none/join_first)。我们从基础掌握的角度来看,只需要理解parallel对action执行的调度即可。


我们可以来看下面这段示例,在这个串行与并行调度混合的action test中,既采用了默认的调度方式,也使用了sequence和parallel的调度方式。

component activity_sequential_mix_parallel { action A {}; action B {}; action C {}; action test{ A a1, a2; B b1, b2; C c1, c2; activity { a1; b1; sequence { a1; b1; }; parallel { c1; c2; }; }; };};

最终在生成的activity图上可以体现出这些动作之间的串行关系和并行关系。




自由调度

除了调度意图更明显的顺序调度和并行调度,我们还可以使用关键词schedule来实现“自由”调度。执行schedule内的子一级动作只需要让他们在符合其它调度要求的同时,由PSS工具自由调度即可。PSS 1.2标准手册相比于PSS 1.0a,在调度说明上面更直白易懂,因为它也把对应的可能发生的调度顺序都以图的形式加以体现。


比如这个在标准中提供的示例代码,在my_test::activity中,先执行了a,接下来将会自由调度b和c两个动作。

action my_test { A a; B b; C c; activity { a; schedule { b; c; } }};


由于自由调度的可能性较多,例如b和c如果按照顺序执行的时序,又比如b和c也可能按照并行顺序执行。那么,它们的调度图用遍历的方式来描绘,就可能是以下这样:


而如果按照时序的方式来描述,当b和c在并行执行时,它们可能是以下的执行时序(注意,下图只能表示某些调度可能,并不代表全部的时序可能):


又比如下面这个例子,在schedule中有2个子一级的activity,那么各自都需要按照顺序方式来执行,如果此外再没有其它调度的要求,那么它们之间的调度可能性也较多。

component activity_schedule_advanced { action A {}; action B {}; action C {}; action D {}; action test1 { activity { schedule { {do A; do B;} {do C; do D;} }; }; };};

如果在已经要求A先执行于B,以及C先执行于D的情况下,假设还有其它调度要求使得A先执行于D的话,那么它们之间的执行顺序将如以下的时序:


如果并不存在以上的A先执行于D的话,那么它们之间的调度可能性会更多。在这里我们可以同样适用DVT来观察每次它所生成的调度图(注意,如果约束较为宽松的情况下,在接下来我们很多的例子中,每次activity产生的图都将会在满足所有约束的情况下随机产生):


调度可能1


调度可能2


调度可能3

可以轻松观察到,以上的3中调度可能都是DVT所生成的(还有更多其它的调度可能,这里就不再一一贴出)。当我们将自由调度做了解释以后,想必大家已经能够感受到一点PSS相比于UVM所不同的地方,那就是它也在随机,只不过它不但有能力可以将每个atomic action中的域在执行时随机,也可以对多个action构成的activity以及层次化的activity进行满足约束条件的随机调度。


这一点其实恰好也是UVM sequence所天生缺乏的,我们可以通过一些自定义的随机调度方法来实现目前所展示的PSS自由调度的能力,但相比于PSS语言所天生的测试场景的自由调度,UVM后天由用户在sequence层面上所封装的方法还是要逊色不少。实际上,也恰恰是自由调度这一点,以及由此延伸出来的测试场景随机化的概念,使得在系统测试层面上,由PSS测试场景所产生出来的最终测试代码,它们在测试场景可能性上面要丰富很多,这一点请读者在接下来的内容中再慢慢体会。


系列回顾:
PSS基础篇之一:数据类型
PSS基础篇之二:组件
PSS基础篇之三:动作



往期精彩:
让诸位久等,V3课程这次真得来了
除了这门升级中的V2Pro课程,恐怕你找不到更好的学验证的途径了
在V2Pro春季班开班前,你是否还在疑虑这些问题?
相约今晚8点 2021 IC秋招实际情况与经验分享
路科发布| 稳中带涨!25w成芯片校招薪资平均底!2020应届秋招数据全面分析!
UVM RAL模型:用法和应用
如果你突然被裁员了,你的Plan B是什么?
[彩虹糖带你入门UVM]
理解UVM-1.2到IEEE1800.2的变化,掌握这3点就够



路科验证 专注于数字芯片验证的系统思想和前沿工程领域。路桑是Intel资深验证专家,主持验证架构规划和方法学研究,担任过亿门级通信芯片的验证经理角色。在工程领域之外,他在西安电子科技大学和西安交通大学客座讲授芯片验证课程。著有书籍《芯片验证漫游指南》。
评论 (0)
  • 飞机的核心电子系统包括发电与配电系统,飞机内部所有设备和系统之间的内部数据通信系统,以及用于外部通信的射频设备。其他所有航空电子元件都依赖这些关键总线进行电力传输或数据通信。在本文中,我们将了解模块化仪器(无论是PCIe、PXIe还是LXI)如何提供测试和排查这些系统所需的多通道数据采集和信号生成能力。一、飞机数据通信总线飞机中使用两种标准化数据总线。ARINC 429是一种主要用于商用飞机的标准总线,而MIL-STD 1553通常用于军用飞机和航天器。这两种总线都采用差分信号传输,以提高抗噪声
    德思特测试测量 2025-02-26 15:00 57浏览
  • 近年来,在能源转型的战略驱动下,我国新能源汽车的保有量持续攀升,并直接推动了充电桩市场的快速增长。据中国充电联盟(EVCIPA)统计数据显示,2024全年,我国充电基础设施增量为422.2万台,新能源汽车国内销量1158.2万辆,充电基础设施与新能源汽车继续保持快速增长,桩车增量比约为1:2.7[1]。此外,截至2024年底,我国充电基础设施累计数量为1281.8万台,同比上升49.1%[1],市场前景一片繁荣。然而,随着国际贸易壁垒高企与国内内卷态势加剧,在此繁荣的市场中,充电桩厂商们亦面临着
    华普微HOPERF 2025-02-26 16:26 63浏览
  • 图文/朴晋泽编辑/cc孙聪颖 (发自首尔)2 月 20 日,韩国宪法法院针对总统尹锡悦弹劾案举行第十次正式辩论。历经多日审理,随着一系列证人证词所呈现的复杂线索逐步梳理明晰,弹劾案的关键脉络愈发清晰。目前可以明确的是,这场对韩国政治生态与政策走向具有重大影响的宪法审判,已进入关键的收尾阶段,其审判结果不仅将重塑韩国政治格局,后续还可能对韩国经济政策制定、对外经贸合作、金融市场稳定等多领域产生连锁反应,各界正密切关注审判最终裁定。同日,韩国宪法法院正式发布公告,明确将于本月 25 日开展弹劾案的最
    华尔街科技眼 2025-02-25 09:58 168浏览
  • 首先感谢面包板社区和富芮坤厂家,提供此次评测机会,板子做的很精致由于时间关系,这段时间未来得及深入评测,之后有时间定然好好把玩评测一番,此文档只做开发调试环境和例程的分享1、官方资料获取:上海富芮坤微电子有限公司-设计大赛2、开发环境:keil+jlink后转板子自带的CMSIS-DAP下载3、串口例程测试:硬件连接:SWDIO-PB11,SWCLK-PB10工程路径:“\富芮坤FR3068E-基础开发文件_202412\sdk__202411\examples\peripheral_demo\
    小憩一隅 2025-02-25 00:09 114浏览
  • 1、基础环境配置请参考:https://mbb.eet-china.com/blog/4102756-463503.html2、rtthread-nano使用3.1.5版本链接 :https://github.com/RT-Thread/rtthread-nano/tree/v3.1.53、cmbacktrace链接:https://github.com/armink/CmBacktrace.git4、移植目录:基于uart例程,如下图所示所有用到的文件添加进入,头文件自行添加5、board修改
    小憩一隅 2025-02-25 23:54 105浏览
  • 文/Leon编辑/侯煜‍近日,四川格力电器微信公众号发布消息,在格力电器(四川)品牌战略发布会上,格力电器宣布格力专卖店更名“董明珠健康家”,将在成都率先落地。消息称,“董明珠健康家”将通过场景化体验、数据可视化、智能交互服务重构零售价值链。“此次董明珠健康家的发布,将是一场格力从产品到服务、从空间到体验的品牌革命。”珠海格力电器终端建设负责人高杰在会上表示。据了解,部分城市的线下格力专卖店已经更换了新的招牌,采用红底白字的设计,“董明珠健康家”以较大字体占据招牌主要位置,反而是左上角的“格力”
    华尔街科技眼 2025-02-25 10:01 186浏览
  •         在当今高度集成化和智能化的电子行业中,静电放电(ESD)和闩锁效应(Latch-Up,以下简称LU)是两大核心挑战。它们不仅可能导致芯片性能下降,甚至会造成永久性损坏,严重影响产品的可靠性和用户体验。因此,开展全面而有效的ESD测试和LU测试,对于电子行业而言至关重要。       ES612A型静电放电测试仪是一款专为评估晶圆级和封装级器件而设计的测试仪。该测试仪旨在满
    ESDEMC静电放电电磁兼容 2025-02-24 15:06 166浏览
  • 穿梭于光电的海洋,感知技术的每一次微小颤动,每一束光都是探索的印记,每一个波动都承载着科技的脉动。动感光波——感光现象旗下科技播客栏目,自2022年春天启动,已经历经近三载春秋。在这里,我们不仅记录了光电与传感领域的每一次革新跳跃,更成为见证科技发展与趋势成真的关键力量。在这辞旧迎新之际,2025年的科技篇章正缓缓展开,让我们以最硬核的视角,回顾这一路的辉煌,同时,以满腔热情迎接下一个科技浪潮的澎湃涌动。座舱,“重仓”情绪价值本期话题:内饰车灯目前很多座舱传感与照明的新技术,毫不意外率先出现在中
    艾迈斯欧司朗 2025-02-25 13:53 190浏览
  • 在万物互联的时代,AI智能眼镜正从科幻走进现实,成为人们探索数字世界的“第三只眼”。而Rokid AI眼镜就是行业中的标杆产品,作为全球AR交互的领航者,Rokid让AR眼镜这个词汇重新进入到消费者视野中,并得到认可。Rokid AI眼镜融合了光学显示,AI计算,无感交互,生态协同的四维技术,打造出“轻量化、高智能、无感化”的下一代人机界面。无感交互:人与万物的感知与交互。眼镜不仅通过视觉、语音和体感传感器进行交互,也离不开无线连接—“低功耗蓝牙(BLE)”,它扮演着至关重要的角色—如同一条隐形
    RFCRAZY666 2025-02-26 10:07 66浏览
  •   Lotoo(乐图)的墨菊(PAW Gold Touch)是一款受广大用户欢迎、口碑出众的旗舰 DAP,获得了诸多用户的青睐。而经过三年不断研发,最新推出的 PAW GT2 墨菊二代更是抢先全球、率先在香港推出。比起上代墨菊,这代输出功率提升至 1000mW,采用更大的屏幕、加入了 Wi-Fi 功能、支持 LTTP 的无损无线传输、电池容量也有提升,由规格到功能都有不少升级,至于音质方面?预先剧透一下,好听得有点让人停不下来,将很多喜欢的专辑重听了好几遍。  设计及规格  双 AK4499EX
    雷龙发展 2025-02-25 17:19 107浏览
  • 在2024的中国国际工业博览会上,瑞芯微电子发布了RK35系列处理器的最新力作——RK3506J处理器。当时,处于早期研发阶段的飞凌嵌入式FET3506J-S核心板作为业内首个搭载RK3506J的SoM方案也一同亮相。历经5个月的精心打磨与优化,飞凌嵌入式FET3506J-S核心板正式上市!FET3506J-S核心板基于Rockchip RK3506J处理器开发设计。采用了100%国产化物料,满足电力、交通、工控等行业对国产化的要求。同时进行了充分的可靠性测试,确保在工业环境的可靠运行。RK35
    飞凌嵌入式 2025-02-26 15:06 83浏览
  •    近年来,随着全球算力需求的爆发式增长,多相电源技术(以DrMOS和多相控制器为核心)逐渐成为高性能计算、自动驾驶、服务器等领域的核心供电方案。在这一技术领域,国产替代进程加速,在这个领域布局的有杰华特,晶丰明源等,国外的有MPS, AOS以及infenion和ST,ADI等,全球的需求大概在20亿美金左右,而中国的主要客户需求包括华为,浪潮,华3,联想,中兴通讯,研祥等以及超算中心,云计算中心,军工,汽车等        国内的晶丰明源公告显示已经推
    王萌 2025-02-25 09:10 232浏览
  • 2022年,飞凌嵌入式全球首发了搭载NXP i.MX 93系列处理器的OK-MX9352-C开发板,这款产品在过去的3年里以其卓越的性能和高度安全性,为众多客户提供了强大的智能化主控支持。近期,NXP将i.MX 93系列处理器引入了FRDM系列产品线,推出了FRDM i.MX 93开发板,作为首款配备i.MX MPU的FRDM板,它提供了模块化硬件、全面的软件和工具,以及所有FRDM开发板通用的快速入门体验。飞凌嵌入式第一时间拿到了FRDM i.MX 93开发板,本篇文章,小编就为大家带来这款产
    飞凌嵌入式 2025-02-26 15:03 92浏览
  • 背景:在智能制造和工业4.0的时代,传统的设备巡检方式已经无法满足企业对于高效、精准、安全巡检的需求。传统人工巡检效率低、准确率差,且容易受到人员经验和环境因素的影响,导致问题遗漏或判断错误。通过结合人工智能(AI)和增强现实(AR)技术,企业能够实现设备与员工的双向巡检,不仅让员工高效判断设备运行状况,设备本身通过AI模型也可以实时判断员工操作的准确性,进一步提高巡检效率和故障检测的准确性。痛点分析01 人工巡检效率低传统的设备巡检依赖人工操作与填写,受限于巡检人员的经验与专业知识,且容易因为
    安宝特AR 2025-02-25 13:33 176浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦