UVM源码与设计模式
文章平均质量分 94
结合软件的设计模式对UVM中的源码进行分析
Holden_Liu
这个作者很懒,什么都没留下…
展开
-
UVM设计模式 ( 一 ) OOP特性、设计原则、规范与单元测试
开头懂得“数据结构与算法” 写出高效的代码,懂得“设计模式”写出高质量的代码。何为高质量的代码?下面这些词汇是我们常用的形容好代码的词汇:灵活性(flexibility)、可扩展性(extensibility)、可维护性(maintainability)、可读性(readability)、可理解性(understandability)、易修改性(changeability)、可复用(reusability)、可测试性(testability)、模块化(modularity)、高内聚低.原创 2020-12-12 17:49:16 · 5659 阅读 · 3 评论 -
UVM设计模式 ( 二 ) 参数化类、静态变量/方法/类、单例模式、UVM_ROOT、工厂模式、UVM_FACTORY
软件中的设计模式可归纳为三类:创建型,结构型,行为型。本节介绍创建型设计模式在UVM中的应用。在开始创建型设计模式介绍之前,回顾下Systemverilog中的Parameterized classes 和 Static method 的相关语法。参数化的类SV中的参数化的类,类似于Verilog中参数化的模块,例化时指定位宽等的值,在SV中一般用于为类增加数据类型的参数。如下示例,在声明S_bit句柄时,传入的type类型为bit [1:10],W没有指定默认为5,如果type T没有指定原创 2020-12-12 17:48:29 · 10904 阅读 · 15 评论 -
UVM设计模式 (三) 静态类、资源管理、uvm_event、uvm_*_pool、uvm_config_db、UVM_REGEX_NO_DPI
静态类(static class)、成员类(member class)、局部类(local class)、匿名类 (anonymous class)https://blog.csdn.net/qq_30021219/article/details/82661528不可以config_db 队列,联合数组uvm_pool: 内部静态类uvm_queue:队列uvm_config_db优先级scope, 资源存给谁,谁可以取overrideget set historyuvm_pool原创 2021-03-07 16:55:06 · 3567 阅读 · 0 评论 -
UVM设计模式 ( 四 ) 模板模式、策略模式、default_sequence、uvm_callback
上一篇介绍了结构型设计模式:单例模式和工厂模式,接下来介绍行为型设计模式在UVM中的应用。策略模式原创 2020-12-19 14:57:37 · 4048 阅读 · 7 评论 -
UVM设计模式 ( 五 ) 迭代器模式、Python/SV中的迭代器、uvm_callback_iter、scoreboard中的迭代器
行为型设计模式数量较多,上一篇介绍了模板模式和策略模式,下面对迭代模式和xxx进行介绍,并挖掘其在UVM中的应用。迭代器模式Iterator Design Pattern: 对容器 (聚合类,集合数据等) 的遍历操作从容器中拆分出来,放到迭代器中,实现迭代操作的解耦。大部分编程语言都提供了多种遍历集合的方式,比如for循环,foreach循环等。对于简单的遍历,可以利用语言提供的迭代方式完成遍历操作,对于复杂条件的集合遍历,比如支持广度优先和深度优先遍历的树结构,用户需要自己创建迭代器。迭代原创 2020-12-19 14:58:50 · 1531 阅读 · 0 评论 -
UVM设计模式 (六)访问者模式、uvm_phase、uvm objection、uvm_visitor、process control
访问者模式Visitor Pattern:允许一个或者多个操作应用到一组对象上,解耦操作和对象本身。换言之,如果component的数据结构是比较稳定的,但其是易于变化的,那么使用访问者模式是个不错的选择。常见的访问者模式有五种角色:(1) Vistor(抽象访问者):为该对象结构中具体元素角色声明一个访问操作接口。(2) ConcreteVisitor(具体访问者):每个具体访问者都实现了Vistor中定义的操作。(3) Element(抽象元素):定义了一个accept操作,以Vis原创 2020-12-21 16:58:08 · 2451 阅读 · 0 评论 -
UVM设计模式 (七)命令模式、三种sequence启动方式、start_item/finish_item、中介模式、virtual sequence
a原创 2020-12-27 18:20:51 · 16168 阅读 · 2 评论 -
UVM设计模式 (八)适配器模式、寄存器模型详解
寄存器模型结构uvm_reg_field: uvm_reg_data_t类型的存储数据的三个成员变量 value, m_nirrored, m_desire。uvm_reg: 成员变量m_fields加入fields。uvm_reg_block: uvm_reg的集合,uvm_reg需要加入到uvm_reg_map中,且属于同一个uvm_reg_block。每个uvm_reg_block至少包含一个uvm_reg_map。uvm_reg_block中也可以再添加子uvm_reg_block,同时子uv原创 2021-02-27 12:00:13 · 4464 阅读 · 1 评论 -
UVM设计模式 (九) 状态模式、Modelling Finite-State Machines in Testbench
硬件设计中的FSM,不仅是一种电路的描述工具,而且也是一种思想方法;数字逻辑本质上都可以归一化为FSM;RTL描述FSM可以归类为常用的几种方法,通常采用三段式的描述;在我们的验证环境中,有时也需要一个组件专门负责FSM的建模;例如验证USB Device DUT时,验证环境需要模拟USB Host的行为;对于USB协议复杂的状态机,使用专门的FSM组件模拟,可以减少组件间的耦合;也可以将FSM组件的状态赋值到virtual interface上,通过波形协助debug;原创 2021-12-09 15:24:58 · 2084 阅读 · 0 评论 -
UVM设计模式 (十) 观察者模式、uvm_subscriber、TLM、总结
观察者模式Observer Pattern:对象之间定义一个一对多的依赖关系,当一个对象改变的时候,所有依赖对象都会自动收到通知。观察目标(Subject)和观察者(Observer)是一对多的关系。有时候观察者模式也叫做发布-订阅模式(Publisher-Subscriber)。观察者模式将观察者和被观察者代码解耦。示例:股民Investor作为观察者,股票Stock作为观察目标。当股价大于20或者小于10时,观察者将会收到通知,执行各自的函数。可以看到,在Stock中调用notifyOb原创 2021-01-02 15:41:45 · 6274 阅读 · 4 评论