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

行为型设计模式数量较多,上一篇介绍了模板模式和策略模式,下面对迭代模式进行介绍,挖掘其在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 >>> 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种方式:
如何实现是关键,如何维护游标,如何判断返回元素满足条件,这些需要根据实际业务具体实现。
迭代器在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条件“吐出”符合的元素。
对于比较复杂的情况,如果没有合适的sv内建方法,可以根据业务写一些function()来完成,如果容器的筛选规则经常变化或者需要写一个适用多场景的scoreboard vip,建议创建迭代器的类,专门负责此事,便于扩展。
2018 dvcon us : uvm verification environment based on software design patterns 中将迭代器模式应用到scoreboard中。
常见的scoreboard的构建方式:ovm/uvm scoreboards - fundamental architectures


小米研发IoT模组 智能家居市场风云再起
电器外壳带电的原因和解决方法
蒸汽流量计的使用注意事项盘点
智慧养殖:家禽孵化环境实时监控和异常报警系统
M1的成功证实了高通对计算未来的信念
迭代模式在UVM中的应用有哪些
iOS 7新特性:蜂窝数据和Wi-Fi连接可同时运行
视频卡顿、渣画质,还在怪网络吗?
浅谈MT-ED07 HDMI1000米光纤延长器的应用优势
力科示波器高速串行数据全方位测试方案
全面打响蓝天保卫战!东莞9553家企业被关停取缔
扫描仪类型
人工智能有什么关键是不能少的
动物疾病检测仪的产品性能说明
5G行业应用痛点太多?紫光展锐从芯片到生态,通力打破“困局”
Gocator2520 Pin针的位置度端差检测案例分享
PSOC6的入门案例demo
蓝牙5技术的新功能将如何协助物联网的应用发展
240电缆对接使用小妙招!
直线电机的精度有多少 直线电机的精度由什么决定