0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

迭代模式在UVM中的应用有哪些

ruikundianzi 来源:IC Verification Club 2023-08-14 17:15 次阅读

行为型设计模式数量较多,上一篇介绍了模板模式和策略模式,下面对迭代模式进行介绍,挖掘其在UVM中的应用。

迭代器模式

Iterator Design Pattern: 对容器 (聚合类,集合数据等) 的遍历操作从容器中拆分出来,放到迭代器中,实现迭代操作的解耦。

大部分编程语言都提供了多种遍历集合的方式,比如for循环,foreach循环等。对于简单的遍历,可以利用语言提供的迭代方式完成遍历操作,对于复杂条件的集合遍历,比如支持广度优先和深度优先遍历的树结构,用户需要自己创建迭代器。

迭代器模式的结构分为迭代器接口和迭代器实现类,容器接口和容器实现类。接口类是为了面向接口编程。迭代器中一般包含next()函数用于返回容器中的元素,布尔型变量hasNext判断是否结束循环。

Python中的迭代器

Systemverilog对聚合类型数据(Aggregate data types)的操作并没有把迭代器 “暴露” 出来,先从Python开始了解。Python允许用户自定义类对迭代的支持。

引用Python Documentation

迭代器是一个表示数据流的对象;这个对象每次只返回一个元素。Python 迭代器必须支持 __next__() 方法;这个方法不接受参数,并总是返回数据流中的下一个元素。如果数据流中没有元素,__next__() 会抛出 StopIteration 异常。

内置的 iter() 函数接受任意对象并试图返回一个迭代器来输出对象的内容或元素,并会在对象不支持迭代的时候抛出 TypeError 异常。Python 有几种内置数据类型支持迭代,最常见的就是列表和字典。如果一个对象能生成迭代器,那么它就会被称作 iterable。

>>> L = [1, 2, 3]
>>> it = iter(L)
>>> it  
<...iterator object at ...>
>>> it.__next__()  # same as next(it)
1
>>> next(it)
2
>>> next(it)
3
>>> next(it)
Traceback (most recent call last):
  File "", line 1, in 
StopIteration
>>>

Python 有不少要求使用可迭代的对象的地方,其中最重要的就是 for 表达式。在表达式 for X in Y,Y 要么自身是一个迭代器,要么能够由 iter() 创建一个迭代器。以下两种表达是等价的nonedisplay: none;'>

生成器表达式和列表推导式

迭代器的输出有两个很常见的使用方式,1) 对每一个元素执行操作,2) 选择一个符合条件的元素子集。比如,给定一个字符串列表,你可能想去掉每个字符串尾部的空白字符,或是选出所有包含给定子串的字符串。

列表推导式和生成器表达时(简写:"listcomps" 和 "genexps")让这些操作更加简明,这个形式借鉴自函数式程序语言 Haskell(Haskell Language)。你可以用以下代码去掉一个字符串流中的所有空白字符nonedisplay: none;'>

通过列表推导式,你会获得一个 Python 列表;stripped_list 就是一个包含所有结果行的列表,并不是迭代器。生成器表达式会返回一个迭代器,它在必要的时候计算结果,避免一次性生成所有的值。这意味着,如果迭代器返回一个无限数据流或者大量的数据,列表推导式就不太好用了。这种情况下生成器表达式会更受青睐。

生成器表达式两边使用圆括号 (" ( ) ") ,而列表推导式则使用方括号 (" [ ] ")。

SV数组内建方法

和数组定位相关的,SV提供了6种方式:

0a13436a-3a83-11ee-9e74-dac502259ad0.png

如何实现是关键,如何维护游标,如何判断返回元素满足条件,这些需要根据实际业务具体实现。

迭代器在scoreboard中的应用

scoreboard一边接收dut transaction放入容器actual_array, 一边接收golden transaction放入容器golden_array。如果是保序的,则可以直接按先后顺序对比,如果不是保序的,则需要按照相应规则遍历容器筛选出transaction。

如果规则是Packet不是保序的,但是addr保持不变,则可以通过SV内建方法 find_index() with (item.addr == addr)在容器中筛选出待比较的Packet。find_index() with (expression) 中内建了迭代器,根据所给的expression条件“吐出”符合的元素。

ication Environment Based on Software Design Patterns 中将迭代器模式应用到scoreboard中。

常见的scoreboard的构建方式:OVM/UVM Scoreboards - Fundamental Architectures






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • UVM
    UVM
    +关注

    关注

    0

    文章

    182

    浏览量

    19167
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84628
  • DUT
    DUT
    +关注

    关注

    0

    文章

    189

    浏览量

    12373
  • for循环
    +关注

    关注

    0

    文章

    61

    浏览量

    2502
  • 迭代器
    +关注

    关注

    0

    文章

    43

    浏览量

    4307

原文标题:UVM设计模式:迭代器模式、Python/SV中的迭代器、callback_iter、scoreboard中的迭代器

文章出处:【微信号:IP与SoC设计,微信公众号:IP与SoC设计】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    谈谈Python 迭代模式

    年,Design Patterns - Elements of Reusable Object-Oriented Software),它提出了23种设计模式迭代模式就是其中的一种
    发表于 11-23 13:10 795次阅读
    谈谈Python <b class='flag-5'>中</b>的<b class='flag-5'>迭代</b>器<b class='flag-5'>模式</b>

    UVM的field automation机制哪些用途

    不知道UVM的field automation机制怎么翻译,不管了,反正就是**机制,理解它能干啥就行了。
    的头像 发表于 07-19 09:45 2080次阅读

    数字IC验证之“什么是UVM”“UVM的特点”“UVM提供哪些资源”(2)连载...

    原文链接:https://zhuanlan.zhihu.com/p/345775995大家好,我是一哥,上章内容主要讲述两个内容,芯片验证以及验证计划。那本章我们主要讲述的内容介绍什么是uvm
    发表于 01-21 16:00

    数字IC验证之“典型的UVM平台结构”(3)连载...

    应用的过程,将uvm的组件封装起来,可以将这些封装的组件呢作为一个整体进行重用,进行芯片级或者是系统级验证的时候,往往会出现多个模块的验证。  此时,测试平台的结构会发生变化,图中的测试平台实现了
    发表于 01-22 15:32

    数字IC验证之“构成uvm测试平台的主要组件”(4)连载...

    的agent为agent的passive模式。  scoreboard积分板,它将会从两个地方获取数据,一个是参考模型发来的期望值,另一个是从slave agent发来的dut的输出值。积分板对这两个
    发表于 01-22 15:33

    什么是uvmuvm的特点哪些呢

    直观的印象,就是uvm验证平台,它是分层的结构。图中的每一个巨型框都代表着平台的一个构成元素。这些元素呢,我们称为平台组建,下面来简单的分析一下。从最底层上来看,agent 包含了driver,monitor和sequencer,其中driver ,monitor
    发表于 02-14 06:46

    请问一下UVM的UVMsequences是什么意思啊

    UVM方法学,UVMsequences 是寿命有限的对象。UVM sequences从uvm_sequence_item基类扩展得到,
    发表于 04-11 16:43

    谈谈UVMuvm_info打印

    上有\`uvm_file和\`uvm_line的传参,它们定义如下:  `define uvm_file `__FILE__  `define uvm_line `__LINE__  
    发表于 03-17 16:41

    UVMseq.start()和default_sequence执行顺序

    下src/base/uvm_task_phase.svh文件。为方便分析,我截图如下。uvm_task_phase类里execute(xxx)函数的第148行和150行确定了seq1和seq2的执行
    发表于 04-04 17:15

    UVM类的例化用new还是create

    UVM类的例化用new和create什么不同?什么时候可以用new?什么时候该用create? new是OOP自带属性,create是UVM override属性,可以理解成
    的头像 发表于 03-21 11:26 1350次阅读

    UVMuvm_config_db机制背后的大功臣

    本次讲一下UVMuvm_config_db,UVM中提供了一个内部数据库,可以在其中存储给定名称下的值,之后可以由其它TB组件去检索。
    的头像 发表于 06-20 17:28 1411次阅读

    UVMuvm_config_db机制背后的大功臣

    本次讲一下UVMuvm_config_db,UVM中提供了一个内部数据库,可以在其中存储给定名称下的值,之后可以由其它TB组件去检索。
    的头像 发表于 06-29 16:57 1276次阅读

    一文详解UVM设计模式

    本篇是对UVM设计模式 ( 二 ) 参数化类、静态变量/方法/类、单例模式UVM_ROOT、工厂模式
    的头像 发表于 08-06 10:38 1785次阅读
    一文详解<b class='flag-5'>UVM</b>设计<b class='flag-5'>模式</b>

    行为型设计模式UVM的应用

    接下来介绍行为型设计模式UVM的应用。
    的头像 发表于 08-09 14:01 702次阅读
    行为型设计<b class='flag-5'>模式</b><b class='flag-5'>在</b><b class='flag-5'>UVM</b><b class='flag-5'>中</b>的应用

    UVM设计的sequence启动方式哪几种呢?

    本篇介绍UVM的sequence,这是UVM中最基础的部分。对于前面介绍的uvm_callback, uvm_visitor等,很少被使用
    的头像 发表于 08-17 10:07 4251次阅读
    <b class='flag-5'>UVM</b>设计<b class='flag-5'>中</b>的sequence启动方式<b class='flag-5'>有</b>哪几种呢?