自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (1)
  • 收藏
  • 关注

原创 TCL基础入门3

TCL基础入门3过程局部变量和全局变量字符串操作format命令scan命令regexp命令文件访问过程TCL支持过程的定义和调用,在TCL中,过程可以看作是用TCL脚本实现的命令,效果与TCL的固有命令相似。TCL中过程是由proc命令产生的:%proc add {x y} {expr $x+$y}proc命令的第一个参数是你要定义的过程的名字,第二个参数是过程的参数列表,参数之间用空格隔开,第三个参数是一个TCL脚本,代表过程体。proc生成一个新的命令,可以象固有命令一样调用:%add

2021-12-24 16:46:04 2580

原创 TCL基础入门2

TCL基础入门2相关命令表达式List控制流:if命令循环命令:while循环变量:forforeach命令switch命令命令相关命令unset这个命令从解释器中删除变量,它后面可以有任意多个参数,每个参数是一个变量名,可以是简单变量,也可以是数组或数组元素。%unset a b day(monday)append命令把文本加到一个变量的后面%set txt hello %append txt "!How are you"//Hello hello!How are you i

2021-12-22 22:36:13 528

原创 TCL基础入门

TCL基础入门引言TCL核心基础语法置换(substitute)变量置换命令置换反斜杠置换双引号和花括号变量:简单变量变量:数组引言TCL(Tool Command Language)是一种解释执行的脚本语言(Scripting Language)。它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。由于TCL的解释器是用一个C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作一个C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函

2021-12-19 19:32:32 733

原创 (11)UVM 寄存器模型的常规方法

(11)UVM 寄存器模型的常规方法mirror、desired和actual value预测方式自动预测(auto prediction)显式预测(explicit prediction)UVM_reg的访问方法reset()和get_reset()set()和update()mirror、desired和actual value在应用寄存器模型的时候,除了利用它的寄存器信息,也会利用它来跟踪寄存器的值。寄存器模型中的每一个寄存器,都应该有两个值,一个是镜像值(mirrored value),一个是期

2021-11-27 10:02:29 2192

原创 (11)UVM 寄存器模型集成(下)

UVM 寄存器模型集成(下)寄存器模型集成Adapter 示例Adapter 解析寄存器模型集成adapter对不同的transaction做一个映射;将uvm_reg_item映射到bus_seq_item在具备了MCDF总线UVC之后,需要实现adapter。每一个总线对应的adapter所完成的桥接功能即是在uvm_reg_bus_op和总线transaction之间的转换。在开发某一个总线adapter类型时,需要实现下面几点:uvm_reg_bus_op与总线transaction中各

2021-11-26 11:50:57 865

原创 (11)UVM 寄存器模型集成(上)

(11)UVM 寄存器模型集成(上)总线UVC示例总线UVC的解析MCDF寄存器设计代码param_def.vreg.v控制寄存器接口首先需要在每一个时钟解析cmd。当cmd为写指令时,即需要把数据cmd_data_in写入到cmd_addr对应的寄存器中。当cmd为读指令时,即需要从cmd_addr对应的寄存器中读取数据,在下一个周期,cmd_addr对应的寄存器数据被输送至cmd_data_out接口。总线UVC示例下面是一段8位地址线,32位数据线的总线UVC实现代码。class mcdf

2021-11-25 14:42:05 559

原创 (11)UVM 寄存器模型概览

(11)UVM 寄存器模型概览概述UVM寄存器中心化管理方式uvm_reg相关概念概述寄存器是模块之间互相交谈的窗口,一方面可以通过读出寄存器的状态,获取硬件当前的状况,另外一方面也可以通过配置寄存器,使得寄存器工作在一定的模式下。在验证的过程中,寄存器的验证排在了验证清单的前列,只有首先保证寄存器的功能正确,才会使得硬件与硬件之间的交谈是“语义一致”的。如果寄存器配置结果与寄存器配置内容不同,那么硬件无法工作在想要的模式下,同时寄存器也可能无法正确反映硬件的状态。关于UVM寄存器模型的介绍中,会

2021-11-24 10:13:56 779

原创 (10)UVM 层次化序列之Layering Sequence

(10)UVM 层次化序列之Layering Sequence介绍Layering Sequence示例介绍在构建更加复杂的协议总线传输,例如PCle,USB3.0等,那么通过一个单一的传输层级会对以后的激励复用、上层控制不那么友好。对于这种更深层次化的数据传输,在实际中无论是VIP还是自开发的环境,都倾向于通过若干抽象层次的sequence群落来模拟协议层次。通过层次化的sequence可以分别构建transaction layer、transport layer和physical layer等从

2021-11-23 09:52:19 521

原创 (10)UVM 层次化序列之Virtual Sequence

UVM 层次化序列之Virtual SequenceVirtual Sequence介绍Virtual Sequence示例Virtual Sequence建议virtual sequence和Hierarchical Sequence一样,都是对于各个sequence的协调。但也存在不同点,hierarchical sequence面对的对象是同一个sequencer,即hierarchical sequence本身也会挂载到sequencer上面,而对于virtual sequence而言,它内部不同

2021-11-22 20:54:00 1374 1

原创 (10)UVM 层次化序列之Hierarchical Sequence

(8)UVM Hierarchical SequenceHierarchical Sequence介绍Hierarchical Sequence示例就水平复用而言,它指的是在设计的各个子模块的验证语境中,指的是如何利用已有资源,完成高效的激励场景创建。就垂直复用而言,它指的是在设计的子系统验证中,可以完成结构复用和激励场景复用两个方面。无论是水平复用还是垂直复用,激励场景的复用很大程度上取决于如何设计sequence,使得底层的sequence实现合理的粒度,帮助完成水平复用,进一步依托于底层激励场景

2021-11-22 14:10:36 986

原创 (9)UVM Sequencer的仲裁特性介绍

UVM Sequencer的仲裁特性介绍介绍Sequencer的仲裁示例结果总结uvm_sequencer类自建了仲裁机制用来保证多个sequence在同时挂载到sequencer时,可以按照仲裁规则允许特定sequence中的item优先通过。介绍在实际使用中,可以通过uvm_sequencer::set_arbitration(UVM_SEQ_ARB_TYPE val)函数来设置仲裁模式,这里的仲裁模式UVM_SEQARB_TYPE有下面几种值可以选择:UVM_SEQ_ARB_FIFO:默认模

2021-11-22 09:42:01 648

原创 (8)UVM Sequencer和Sequence

(8)UVM Sequencer和Sequence概述Sequence和Item的发送实例概述了解了 sequencer与 drive之间传递 sequence item的握手过程,同时也掌握了 sequence与item之间的关系。接下来需要就 sequence挂载到 sequencer的常用方法做出总结,可以通过对这些常用方法和宏的介绍,了解到它们不同的使用场景面对多个 sequence如果需要同时挂载到 sequencer时,那就面临着仲裁的需要, uvm_sequencer自带有仲裁特性,结合

2021-11-21 21:18:32 732

原创 (8)UVM Sequencer和Driver

UVM Sequencer和Driver概述端口和方法实例通信时序握手建议概述driver同sequencer之间的TLM通信采取了get模式,即由driver发起请求,从sequencer一端获得item,再由sequencer将其传递至driver。作为driver,只要它可以从sequencer获取item,它就可以一直工作下去。sequencer和item只应该在合适的时间点产生需要的数据,而至于怎么处理数据,则会由driver来实现。端口和方法为了便于item传输,UVM专门定义了匹

2021-11-21 14:14:57 1191

原创 (8)UVM Sequence和Item

(8)UVM Sequence和Item概述itemitem示例概述在介绍如何使用item和 sequence,可以有序穿过 sequencer抵达 driver之前,有必要首先认识 sequence与item之间的关系。这里的 sequence指的是 uvm_ sequence类,而item指的是uvm_sequence_item类,我们简称其为 sequence和item。对于激励生成和场景控制,是由 sequence来编织的,而对于激励所需要的具体数据和控制要求,则是从item的成员数据得来的。

2021-11-21 09:20:01 599

原创 (8)UVM 序列组件的互动

(7)UVM 序列组件的互动概述序列组件的互动sequencedriversequence_itemsequencer继承关系总结概述在UVM世界,利用其核心特性,在创建了组件和顶层环境,并且完成组件之间的TLM端口连接以后,接下来就可以使得整个环境开始运转了。在经过一番实践,掌握了组件之间的TLM通信方式,开辟了建筑之间的道路、桥梁和河道以后,就可以进入紧张繁忙的物流期了运转的必要条件是组件之间需要有事务(transaction)传送,这就同管道连接好需要引入水流一样。如果按交通道路的车流来打比方,

2021-11-20 14:24:51 439

原创 (7)UVM objection机制

(7)UVM objection机制objection机制控制objection的最佳选择UVM-1.1之后,结束仿真的机制有且只有一种,那就是利用objection挂起机制来控制仿真结束。objection机制参与到objection机制中的参与组件,可以独立的各自挂起objection,来防止run_phase退出,但是只有这些组件都落下objection后,uvm_objection共享的counter才会变为0,这意味run_phase退出的条件满足,因此可以退出run_phase。task

2021-11-20 10:25:17 1934

原创 (6)UVM phase机制

(6)UVM phase机制概述phase机制执行机制task phase和function phaseUVM编译和运行顺序phase的执行顺序概述SV的验证环境构建中,可以发现,传统的硬件设计模型在仿真开始前,已经完成例化和连接了;而SV的软件部分对象例化则需要在仿真开始后执行。虽然对象例化通过调用构建函数new()来实现,但是单单通过new()函数无法解决一个重要问题,那就是验证环境在实现层次化时,如何保证例化的先后关系,以及各个组件在例化后的连接。此外如果需要实现高级功能,例如在项层到底层的配置

2021-11-19 13:28:28 1002

原创 (5)UVM工厂机制中覆盖详讲

UVM工厂机制中覆盖详讲任务和函数的重载使用factory机制进行重载factory机制式的重载重载的方式及种类复杂的覆盖之连续覆盖复杂的覆盖之替换式覆盖常用的重载重载transaction重载sequence覆盖component重载driver以实现所有的测试用例factory机制的本质覆盖的最大优势是使得一个子类的指针以父类的类型传递时,其表现出的行为依然是子类的行为。任务和函数的重载SystemVerilog是一种面向对象的语言。面向对象语言都有一大特征:覆盖。当在父类中定义一个函数/任务时,

2021-11-19 10:19:17 1466 2

原创 (5)UVM工厂机制

UVM工厂机制工厂的意义工厂的注册和创建UVM_coreservice_t类注册宏`uvm_{component,object}_utils工厂提供的便利——覆盖(override)覆盖方法set_type_override()set_inst_override()确保正确覆盖的代码要求工厂机制也是软件的一种典型设计模式(design pattern)。关于工厂机制的介绍将从下面几点展开:工厂的意义工厂提供的便利覆盖方法确保正确覆盖的代码要求工厂的意义UVM工厂的存在就是为了更方便地替换

2021-11-18 14:49:50 1576

原创 (4)UVM TLM2.0

UVM TLM2.0概述接口实现传送数据时间标记示例概述TLM是一种为了构建更高级抽象模型的传输方式。虽然SV语言本身没有原生的TLM传输方式,但是TLM在UVM很好地集成进来,并且在组件传输中得到了充分运用。之前的UVM各个组件之间的通信是通过TLM1.0方式实现的,而伴随着SystemC模型的广泛引用,SystemC通信机制TLM2.0也引起了UVM标准委员会的兴趣。TLM协议本身并不依赖于某一种语言,而是可以跨语言来实现其传输标准。TLM2.0是SystemC模型之间的核心传输方式,它于20

2021-11-18 09:52:16 553

原创 (4)UVM TLM通信之FIFO上的端口及调试

TLM通信之FIFO上的端口及调试FIFO上的端口及调试FIFO和IMP的取舍FIFO上的端口及调试上图中所有以圆圈表示的EXPORT虽然名字中有export,但是本质上都是IMP。这里面包含了12种IMP,用于分别和相应的PORT及EXPORT连接。peek端口与get相似,其数据流、控制流都相似,唯一的区别在于当get任务被调用时,FIFO内部缓存中会少一个transaction,而peek被调用时,FIFO会把transaction复制一份发送出去,其内部缓存中的transaction数量并不

2021-11-17 15:51:09 1931

原创 (4)UVM TLM通信之通信管道

TLM通信之通信管道概述TLM_FIFOAnalysis PortAnalysis TLM FIFORequest & Response通信管道概述TLM通信的实现方式,这些通信有一个共同的地方即都是端对端的,同时在target一端需要实现传输方法,例如put()或者get()。这种方式在实际使用也可能会给用户带来一些烦恼,如何可以不自己实现这些传输方法,同时可以享受到TLM的好处?对于monitor、coverage collector等组件在传输数据时,会存在一端到多端的传输,如何解决这

2021-11-17 12:42:57 897 1

原创 (4)UVM TLM通信之单向通信、双向通信和多向通信

UVM TLM通信之单向通信、双向通信和多向通信单向通信双向通信多向通信单向通信单向通信(unidirectional communication)指的是从initiator到target之间的数据流向是单一方向的,或者说initiator和target只能扮演producer和consumer中的一个角色。在PORT代表了三种端口名:port、export和imp。按照UVM端口名的命名规则,它们指出了通信的两个要素:是否是阻塞的方式(即可以等待延时)何种通信方法阻塞传输方式将block

2021-11-16 16:02:08 1708

原创 (4)UVM TLM通信之端口的互联

UVM TLM通信之端口的互联PORT与EXPORT的连接PORT和IMPORT的连接EXPORT和IMP的连接PORT和PORT的连接EXPORT和EXPORT的连接PORT与EXPORT的连接如图所示,ABCD四个端口, 要在A和B之间、C和D之间通信。为了实现这个目标,必须要在A和B之间、C和D之间建立一种连接关系,否则的话,A如何知道是和B通信而不是和C或者D通信呢?所以一定要在通信前建立连接关系。如A要和B通信(A是发起者),那么可以这么写:A.port.connect(B.export)

2021-11-16 12:55:29 628 1

原创 (4)UVM TLM通信(Transaction Level Modeling)

UVM TLM通信(Transaction Level Modeling)概述基本概念TLM的定义TLM通信分类UVM的PORT、EXPORT和IMPORTPORTEXPORTIMPORT端口的使用概述系统原型阶段和芯片验证阶段均使用了TLM通信方式。前者是为了更快地实现硬件原型之间的数据通信,后者是为了更快地实现验证组件之间的数据通信。仿真速度是TLM对项目进度的最大贡献,同时TLM传输中的事务又可以保证足够大的信息量和准确性。TLM并不是某一种语言的产物,而是作为一种提高数据传输抽象级的标准存

2021-11-15 15:50:37 600 1

原创 (2)UVM基础之config_db机制

UVM基础——config_db机制UVM中的路径config_db基础set和get函数的参数省略get语句跨层次的多重设置非直线的设置和获取config_db机制对通配符的支持check_config_usegeinterface传递变量设置object传递建议在验证环境的创建过程build phase中,除了组件的实例化,配置也是必不可少的。为了验证环境的复用性,通过外部的参数配置,使得环境在创建时可以根据不同参数来选择创建的组件类型、组件实例数目、组件之间的连接以及组件的运行模式等。在更细致的环境

2021-11-14 22:43:37 3337

原创 UVM学习目录

UVM学习目录以下是uvm学习目录UVM是什么类库地图核心基类和组件家族UVM树形结构域的自动化field automation以下是uvm项目目录UVM验证平台搭建——介绍UVM验证平台搭建——driver以下是uvm学习目录UVM是什么https://blog.csdn.net/qq_40051553/article/details/121281575?spm=1001.2014.3001.5502类库地图https://blog.csdn.net/qq_40051553/article/de

2021-11-14 20:07:52 338

原创 (2)UVM基础之域的自动化(field automation)

UVM基础——域的自动化field automationfield automation机制相关的宏field automation机制的常用函数field automation机制中标志位的使用示例从UVM通过域的自动化,使得用户在注册UVM类的同时也可以声明今后会参与到对象拷贝、克隆、打印等操作的成员变量。域的自动化解放了verifier的双手,这使得在使用uvm_object提供的一些预定义方法时,非常便捷,而无需再实现自定义方法。在了解了域的自动化常用的宏之后,用户需要考虑哪些成员变量在注册UV

2021-11-14 13:44:05 7043

原创 (3)UVM验证平台搭建之driver

年轻人的第一个UVM验证平台搭建——driver最初版本引入factory机制、objection机制和vitual interface之后最初版本`ifndef MY_DRIVER__SV`define MY_DRIVER__SVclass my_driver extends uvm_driver; function new(string name = "my_driver", uvm_component parent = null); super.new(name, pare

2021-11-14 10:30:00 3664

原创 (3)UVM验证平台搭建之介绍

年轻人的第一个UVM验证平台搭建——介绍验证平台的组成UVM验证平台的框图验证平台介绍目录验证平台的组成验证用于找出DUT中的bug,这个过程通常是把DUT放入一个验证平台中来实现的。一个验证平台要实现如下基本功能:验证平台要模拟DUT的各种真实使用情况,这意味着要给DUT施加各种激励。验证平台要能够根据DUT的输出来判断DUT的行为是否与预期相符合,完成这个功能的是记分板(scoreboard)验证平台要收集DUT的输出并把它们传递给scoreboard,完成这个功能的是monitor。验证

2021-11-13 15:45:00 1947

原创 (2)UVM基础之UVM树形结构

UVM基础——UVM树形结构UVM树的根uvm_topuvm_test构建环境的主要组件uvm_componentuvm_envuvm_test层次结构相关的函数UVM采用树形的组织结构来管理验证平台的各个部分。sequencer、driver、monitor、agent、model、scoreboard、env等都是树的一个结点。UVM树的根UVM是以树的形式组织在一起的,作为一棵树来说,UVM中真正的树根是一个称为uvm_top的东西,在测试用例里实例化env,在env里实例化scoreboard

2021-11-13 11:00:49 2558 1

原创 (2)UVM基础之核心基类和组件家族

核心基类UVM世界中的类最初都是从一个uvm_void根类(root class)继承来的,而实际上这个类并没有成员变量和方法。uvm_void只是一个虚类(virtual class),还在等待将来继承于它的子类去开垦。在继承于uvm_void的子类中,有两个类,一个为uvm_object类,另外一个为uvm_port_base类。在UVM世界的类库地图中除过事务接口(transaction interface)类继承于uvm_port_base, 其它所有的类都是从uvm_object类一步步继承

2021-11-12 21:55:15 1085 1

原创 (2)UVM基础之类库地图

类库地图在SV模块中,验证环境整体的构建,是从底层模块的验证组件搭建到通信和激励生成。这些元素无论是软件对象的创建、访问、修改、配置,还是组件之间的通信等都是通过用户自定义的方式来实现的。UVM验证方法学作为之前所有方法学的融合版本,从自身初衷而言,就是将验证过程中可以重用和标准化的部分都规定在其方法学的类库当中,通过标准化的方式减轻了验证人员构建环境的负担。在可以看到对验证环境的共同需求是:组件的创建和访问环境的结构创建、组件之间的连接和运行不同阶段的顺序安排激励的生成、传递和控制测试的

2021-11-12 20:21:55 597

原创 (1)UVM是什么

UVM入门概述验证介绍验证语言对比什么是方法学学习内容验证介绍现代IC(Integrated circuit,集成电路)前端的设计流程如下图所示。通常的IC设计是从一份需求说明书开始的,IC工程师会把它们细化为特性列表。设计工程师根据特性列表,将其转化为设计规格说明书,在这份说明书中,设计工程师会详细阐述自己的设计方案,描述清楚接口时序信号,使用多少RAM资源,如何进行异常处理等。验证工程师根据特性列表,写出验证规格说明书。在验证规格说明书中,将会说明如何搭建验证平台,如何保证验证完备性,如何测试每一

2021-11-12 10:10:18 1623

原创 (十二)面向对象编程的高级技巧

面向对象编程的高级技巧继承扩展基类更多的OOP术语类型转换$cast使用$cast作类型向下转换虚方法回调函数参数化的类示例一些关于参数化的类的建议类的三要素:封装和继承还有虚方法父类里面所有的变量和方法,子类都继承了,比如super.def正是由于类的多态性,使得用户在设计和实现类时,不需要担心句柄指向的对象类型是父类还是子类,只要通过虚方法,就可以实现动态绑定(dynamic binding),或者在SV中称之为动态方法查找(dynamic method lookup)。继承继承允许从一个现在

2021-11-11 15:13:54 647

原创 (十一)System verilog中事件和信箱

事件Verilog事件可以实现线程的同步。在Verilog中,一个线程总是要等待一个带操作符的事件。这个操作符是边沿敏感的,所以它总是阻塞着,等待事件的变化。其他的线程可以通过->操作符来触发事件,解除对第一个线程的阻塞。在System Verilog,事件成为了同步对象的句柄,可以传递给子程序。这个特点允许在对象间共享事件,而不用把事件定义成全局的。最常见的方式是把事件传递到一个对象的构造器中。在Verilog中,当一个线程在一个事件上发生阻塞的同时,正好另一个线程触发了这个事件,则竞争的可能

2021-11-10 20:00:00 1909 1

原创 (十)System Verilog中线程

System Verilog中线程线程的使用使用fork...join和begin...end使用fork...join_none和begin...end使用fork...join_any和begin...end在类中创建线程动态线程线程中的自动变量等待所有衍生线程在线程中共享变量停止线程在实际硬件中,时序逻辑通过时钟沿来激活,组合逻辑的输出则随着输入的变化而变化。所有这些并发的活动在Verilog的寄存器传输级上是通过initial和always块语句、实例化和连续赋值语句来模拟的。为了模拟和检验这些语

2021-11-10 13:37:02 1373 1

原创 (九)system verilog的随机化(1)

system verilog的随机化介绍System Verilog中的随机化带有随机变量的简单类什么可以被随机化约束简单表达式等效表达式权重分布集合成员和inside运算符条件约束双向约束使用合适的数学运算来提高效率解的概率介绍随着设计变得越来越大,要产生一个完整的激励集来测试设计的功能也变得越来越困难了,编写足够多的定向测试集已经不太现实了。解决的办法是采用受约束的随机测试法(CRT)自动产生测试集。定向测试集能找到可能存在的Bug,CRT方法通过随机激励、约束来选择测试方案,只产生有效的激励,以及

2021-11-09 16:08:35 1127

原创 (八)system verilog面向对象的编程(2)

面向对象的编程基础(下)类的方法类的方法

2021-11-08 17:00:00 432

原创 (七)system verilog面向对象的编程(1)

面向对象的编程基础概述OOP术语创建对象声明和使用一个句柄定制构造函数new()和new[]的区别对象和对象的句柄的区别使用对象概述      面向对象(OOP)使用户能够创建复杂的数据类型,并且将他们跟使用这些数据类型的程序紧密地结合在一起,用户可以在更加抽象的层次建立测试平台和系统级模型,通过调用函数来执行一个动作而不是改变信号的电平。当使用事务来代替信号翻转的时候,就会更加高效。    &nbsp

2021-11-07 19:26:43 721

FSM初学者教程 FSM编程-菜鸟入门(清晰版)

FSM初学者教程 FSM编程-菜鸟入门(清晰版)

2021-11-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除