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)
  • Matter 协议,原名 CHIP(Connected Home over IP),是由苹果、谷歌、亚马逊和三星等科技巨头联合ZigBee联盟(现连接标准联盟CSA)共同推出的一套基于IP协议的智能家居连接标准,旨在打破智能家居设备之间的 “语言障碍”,实现真正的互联互通。然而,目标与现实之间总有落差,前期阶段的Matter 协议由于设备支持类型有限、设备生态协同滞后以及设备通信协议割裂等原因,并未能彻底消除智能家居中的“设备孤岛”现象,但随着2025年的到来,这些现象都将得到完美的解决。近期,
    华普微HOPERF 2025-02-27 10:32 93浏览
  • 2025年2月26日,广州】全球领先的AIoT服务商机智云正式发布“Gokit5 AI智能体开发板”,该产品作为行业首个全栈式AIoT开发中枢,深度融合火山引擎云原生架构、豆包多模态大模型、扣子智能体平台和机智云Aiot开发平台,首次实现智能体开发全流程工业化生产模式。通过「扣子+机智云」双引擎协同架构与API开放生态,开发者仅需半天即可完成智能体开发、测试、发布到硬件应用的全流程,标志着智能体开发进入分钟级响应时代。一、开发框架零代码部署,构建高效开发生态Gokit5 AI智能体开发板采用 “
    机智云物联网 2025-02-26 19:01 76浏览
  • 触觉智能分享,瑞芯微RK安卓Android主板GPIO按键配置方法,方便大家更好利用空闲IO!由触觉智能Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,树莓派卡片电脑设计,支持安卓Android、开源鸿蒙OpenHarmony、Linux多系统,适合嵌入式开发入门学习。设备树修改空闲IO选择由下图可得当前IO是主板上一个没有用到的IO,对应的GPIO为:GPIO4_A4。设备树配置在Purple Pi OH官方代码中,设备树:ido-pi-oh3566-core.dt
    Industio_触觉智能 2025-02-26 18:24 46浏览
  • RGB灯光无法同步?细致的动态光效设定反而成为产品客诉来源!随着科技的进步和消费者需求变化,电脑接口设备单一功能性已无法满足市场需求,因此在产品上增加「动态光效」的形式便应运而生,藉此吸引消费者目光。这种RGB灯光效果,不仅能增强电脑周边产品的视觉吸引力,还能为用户提供个性化的体验,展现独特自我风格。如今,笔记本电脑、键盘、鼠标、鼠标垫、耳机、显示器等多种电脑接口设备多数已配备动态光效。这些设备的灯光效果会随着音乐节奏、游戏情节或使用者的设置而变化。想象一个画面,当一名游戏玩家,按下电源开关,整
    百佳泰测试实验室 2025-02-27 14:15 72浏览
  • 请移步 gitee 仓库 https://gitee.com/Newcapec_cn/LiteOS-M_V5.0.2-Release_STM32F103_CubeMX/blob/main/Docs/%E5%9F%BA%E4%BA%8ESTM32F103RCT6%E7%A7%BB%E6%A4%8DLiteOS-M-V5.0.2-Release.md基于STM32F103RCT6移植LiteOS-M-V5.0.2-Release下载源码kernel_liteos_m: OpenHarmon
    逮到一只程序猿 2025-02-27 08:56 121浏览
  • 构建巨量的驾驶场景时,测试ADAS和AD系统面临着巨大挑战,如传统的实验设计(Design of Experiments, DoE)方法难以有效覆盖识别驾驶边缘场景案例,但这些边缘案例恰恰是进一步提升自动驾驶系统性能的关键。一、传统解决方案:静态DoE标准的DoE方案旨在系统性地探索场景的参数空间,从而确保能够实现完全的测试覆盖范围。但在边缘案例,比如暴露在潜在安全风险的场景或是ADAS系统性能极限场景时,DoE方案通常会失效,让我们看一些常见的DoE方案:1、网格搜索法(Grid)实现原理:将
    康谋 2025-02-27 10:00 102浏览
  • 更多生命体征指标风靡的背后都只有一个原因:更多人将健康排在人生第一顺位!“AGEs,也就是晚期糖基化终末产物,英文名Advanced Glycation End-products,是存在于我们体内的一种代谢产物” 艾迈斯欧司朗亚太区健康监测高级市场经理王亚琴说道,“相信业内的朋友都会有关注,最近该指标的热度很高,它可以用来评估人的生活方式是否健康。”据悉,AGEs是可穿戴健康监测领域的一个“萌新”指标,近来备受关注。如果站在学术角度来理解它,那么AGEs是在非酶促条件下,蛋白质、氨基酸
    艾迈斯欧司朗 2025-02-27 14:50 92浏览
  • 本文介绍Linux系统主板/开发板(适用Debian10/11、lubuntu系统),安装中文环境和中文输入法。触觉智能EVB3588开发板演示,搭载了瑞芯微RK3588芯片,八核处理器,6T高算力NPU;音视频接口、通信接口等各类接口一应俱全,可帮助企业提高产品开发效率,缩短上市时间,降低成本和设计风险。配置中文环境命令如下:sudo apt-get install locales #安装locales软件包 sudo dpkg-reconfigure locales #配置 locales
    Industio_触觉智能 2025-02-26 18:43 85浏览
  • 本文介绍瑞芯微RK3588主板/开发板Linux系统(Ubuntu20.04/22.04),安装中文环境和中文输入法。触觉智能EVB3588开发板演示,搭载了瑞芯微RK3588芯片,八核处理器,6T高算力NPU;音视频接口、通信接口等各类接口一应俱全,可帮助企业提高产品开发效率,缩短上市时间,降低成本和设计风险。配置中文环境配置前需更新安装列表,否则安装中文时容易遇到报错,命令如下:sudo apt-get update报错示例:1、先点击settings2、点击Manage Installed
    Industio_触觉智能 2025-02-26 18:30 61浏览
  • 应用趋势与客户需求,AI PC的未来展望随着人工智能(AI)技术的日益成熟,AI PC(人工智能个人电脑)逐渐成为消费者和企业工作中的重要工具。这类产品集成了最新的AI处理器,如NPU、CPU和GPU,并具备许多智能化功能,为用户带来更高效且直观的操作体验。AI PC的目标是提升工作和日常生活的效率,通过深度学习与自然语言处理等技术,实现更流畅的多任务处理、实时翻译、语音助手、图像生成等功能,满足现代用户对生产力和娱乐的双重需求。随着各行各业对数字转型需求的增长,AI PC也开始在各个领域中显示
    百佳泰测试实验室 2025-02-27 14:08 74浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦