什么是变量的引用(引用的基本概念)

什么是变量的引用(引用的基本概念)

上一节讲了PSS函数可以帮助动态运行,实现自身调用和调用外部过程接口的能力。在本节我们将介绍PSS是如何通过函数定义代码模板以便生成测试代码块,继而实现静态预生成代码的功能。

生成的代码块将会被用于测试目标平台,它们也被称为目标模板(target template)。这些模板也是由具体的外部测试语言构成的字符串,还可以引用PSS环境中的一些变量。也因为生成的代码用于测试,所以这些模板限于在body, run_start, run_end等这些典型的测试阶段的执行块中预生成。

在一个action, flow/resource object, struct等类型中如果有多个目标模板的相同执行块代码,也是允许的,它们会把生成的代码最终拼接在一起(当然,这也需要看PSS工具是否能够支持该功能)。

我们先来看下面这段标准中的示例,在exec body后使用了目标语言’C’,并且使用”””将目标模板的字符串嵌入了进去,同时在目标模板内还可以通过{{expression}}的形式来引用目标模板以外的变量或者作为表达式做运算。

理论上,PSS工具对外部测试语言的支持可以不限于C/C /SV,且只要它能够支持,那么就可以置入相应的测试语言标志以指示当前的目标模板最终用于生成什么语言类型的测试代码。之所以建议明确告诉PSS工具其所用于测试的生成代码类型,是因为同一段测试场景,如果对接到不同语言的目标模板,就有可能同时生成不同测试语言的测试,比如SV部分的代码是用于模块验证,而C/C 部分的代码是用于系统验证。这种分别指示的方式符合实际验证中的需求,也让代码生成的配置更为灵活。

在下面示例中对变量的引用还可以看到,由于是字符串格式化的本质,目标模板以外的变量可以用于帮助生成任何有助于测试的字符串(例如func_{{func_id}}({{b}}),即是用来调用某个函数并且为其传递某个变量值)。

component top { struct S { rand int b; } action A { rand int a; rand bit[1:0] func_id; rand bit[3:0] b; rand S s1; exec body C = “”” printf(“a={{a}} s1.b={{s1.b}} a b={{a s1.b}}\n”); func_{{func_id}}({{b}}); “””; }}

就是这样一个简单的示例,将作为我们从下一篇PSS应用篇的基点,可能读者现在有点好奇的地方是,为什么从上一节开始我们已经没有给出求解结果和随机调度图了呢?这是因为这两节的重点是在底层的关系接口,即PSS与最终目标求解和测试运行平台之间的关系,而且我们所采用的DVT工具目前还只能作为随机调度和求解的协助工具,等到了PSS函数过程接口这部分就已经无法切入了,而需要等到我们从PSS应用篇开始陆续给大家讲到的inFact工具和PerSpec工具的应用了,它们是会最终对接到目标平台(在我们这里指的是验证平台和仿真工具)。

此外,PSS在目标模板生成时还引入了如何定义函数模板(function target-template,对于汇编语言有帮助),以及PSS 2.0新引入的用于细化过程接口函数中定义、变量、赋值、返回等内容的过程控制概念,我们这里也不讲述(我们在后续PSS应用中的代码主要涉及PSS 1.0a的标准)。

好了,这一节似乎很轻松,但它确确实实是在下一节与inFact和仿真器联系紧密的部分,到了下一篇想必读者们就能感受到啦。

系列回顾:PSS测试篇之一:常规的数据随机PSS测试篇之二:场景调度的随机PSS测试篇之三:对象绑定和组件映射中的随机PSS测试篇之四:约束求解的顺序PSS测试篇之五:动作的推断PSS测试篇之六:测试实现的执行块PSS测试篇之七:函数与接口

往期精彩:

路科助力你冲刺春招 | 还担心面试撞衫MCDF?今年春季班终于又加X模块啦!

让诸位久等,V3课程这次真得来了

在V2Pro春季班开班前,你是否还在疑虑这些问题?

相约今晚8点 2021 IC秋招实际情况与经验分享

路科发布| 稳中带涨!25w成芯片校招薪资平均底!2020应届秋招数据全面分析!

UVM RAL模型:用法和应用

如果你突然被裁员了,你的Plan B是什么?

[彩虹糖带你入门UVM]

理解UVM-1.2到IEEE1800.2的变化,掌握这3点就够

发表评论

登录后才能评论