- 博客(76)
- 资源 (1)
- 收藏
- 关注
原创 TCL基础入门
TCL(Tool Command Language)是一种解释执行的脚本语言,提供通用的编程能力:支持变量、过程和控制结构;同时还拥有功能强大的固有的核心命令集。
2022-08-04 22:59:28
5292
原创 UVM入门与进阶学习笔记17——寄存器模型(3)
目录寄存器模型的常规方法mirror、desired和actual valueprediction的分类自动预测显式预测uvm_reg的访问方法mem与reg的联系和差别内建(built-in)sequences寄存器模型内建序列存储模型内建序列寄存器健康检查寄存器应用场景寄存器检查功能覆盖率概述覆盖率自动收集模式覆盖率外部事件触发收集寄存器模型的常规方法mirror、desired和actual value在应用寄存器模型时,除了利用它的寄存器信息,也会利用它跟踪寄存器的值。寄存器模型中的每
2022-01-27 21:57:33
5720
9
原创 UVM入门与进阶学习笔记17——寄存器模型(2)
目录寄存器模型集成总线UVC的实现总线UVC解析MCDF寄存器设计代码Adapter的实现Adapter的集成访问方式前门访问后门访问前门与后门的比较前门与后门的混合应用寄存器模型集成总线UVC的实现MCDF访问寄存器的总线接口时序较为简单。控制寄存器接口上首先需要在每个时钟解析cmd。cmd为写指令时,需要把数据cmd_data_in写入到cmd_addr对应的寄存器中。cmd为读指令时,需要从cmd_addr对应的寄存器中读取数据,在下一个周期cmd_addr对应的寄存器数据被输送至cm
2022-01-26 23:53:41
2312
原创 UVM入门与进阶学习笔记17——寄存器模型(1)
目录寄存器模型概览中心化管理方式uvm_reg相关概念MCDF寄存器模型寄存器建模模型使用流程寄存器模型概览寄存器是模块间互相交谈的窗口,一方面可通过读出寄存器的状态获取硬件当前的状况,另一方面也可通过配置寄存器使寄存器工作在一定的模式下。验证过程中寄存器的验证排在验证清单的前列,只有先保证寄存器的功能正确,才使得硬件与硬件间的交谈“语义一致”;若寄存器配置结果与其配置内容不同,则硬件无法工作在想要的模式下,同时寄存器可能无法正确反映硬件的状态。硬件中的各功能模块可以由处理器来配置功能以及访问
2022-01-26 21:29:23
1916
原创 UVM入门与进阶学习笔记16——sequencer和sequence(2)
目录sequence的层次化Hierarchical SequenceVirtual SequenceLayering Sequencesequence的层次化就水平复用而言,在MCDF各个子模块的验证环境中,它指的是如何利用已有资源,完成高效的激励场景创建。就垂直复用来看,它指的是在MCDF子系统验证中,可以完成结构复用和激励场景复用两个方面。无论是水平复用还是垂直复用,激励场景的复用很大程度上取决于如何设计sequence,使得底层的sequence实现合理的粒度,帮助完成水平复用,进一步
2022-01-26 11:49:13
1634
原创 UVM入门与进阶学习笔记16——sequencer和sequence(1)
目录sequence宏概述发送sequence/item方法建议发送sequence/item方法解析发送序列的相关宏sequencer的仲裁特性sequencer的锁定机制就sequence挂载到sequencer的常用方法做出总结,可通过对这些常用方法和宏的介绍了解它们不同的使用场景。多个sequence需要同时挂载到sequencer时,那就面临仲裁的需要,uvm_sequencer自带仲裁特性,结合sequence的优先级设定,最终可以实现想要的效果。sequence宏概述可以正确区
2022-01-25 22:13:52
1310
原创 UVM入门与进阶学习笔记15——sequencer和driver
目录端口和方法事务传输过程分析(重点)通信时序driver同sequencer之间的TLM通信采取get模式,即由driver发起请求,从sequencer一端获得item,再由sequencer将其传递至driver。作为driver,永远停不下来,只要它可以从sequencer获取item,它就一直工作。sequencer和item只应该在合适的时间点产生需要的数据,怎么处理数据则由driver实现。端口和方法为了便于item传输,UVM专门定义了匹配的TLM端口供sequence
2022-01-25 16:58:54
2991
原创 UVM入门与进阶学习笔记14——sequence和item
目录Sequence ItemItem和Sequence的关系Flat SequenceHierarchical Sequencesequence指的是uvm_sequence类,而item指的是uvm_sequence_item类。对于激励生成和场景控制,是由sequence来编织的,而对于激励需要的具体数据和控制要求,则是从item的成员数据得到。Sequence Itemitem是基于uvm_object类,这表明它具备UVM核心基类必要的数据操作方法,例如copy()、clone(
2022-01-25 16:08:13
2513
原创 UVM入门与进阶学习笔记13——新手上路
目录新手上路序列组件的互动继承关系新手上路在UVM世界利用其核心特性,在创建了组件和顶层环境并完成组件之间的TLM端口连接以后,接下来就可以使得整个环境开始运转了;经过一番实践掌握了组件之间的TLM通信方式,开辟了建筑之间的道路、桥梁和河道以后,就可以进入紧张繁忙的物流期了。运转的必要条件是组件之间有事务(transaction)传送,这就同管道连接好需要引入水流一样。如果按交通道路的车流打比方,sequence就是道路,sequence item是道路上行驶的货车,sequencer是目的地的
2022-01-25 11:18:30
744
原创 UVM入门与进阶学习笔记12——TLM2通信(2)
目录同步通信元件uvm_eventuvm_barrieruvm_callback同步通信元件SV用来做线程同步的几种元件,它们分别是semaphore、event、mailbox。在UVM中,需要同步线程不再只局限于同一个对象中,还需要解决不同组件之间的线程同步问题。一旦线程同步要求发生在不同组件,这就要求组件间可通过某种方法实现同步。考虑到UVM组件封闭性原则,最好不要通过层次索引的形式在组件中索引公共的event或者semaphore,UVM为了解决封闭性的问题,定义了如下的类满足组件之
2022-01-24 22:27:46
1003
原创 UVM入门与进阶学习笔记12——TLM2通信(1)
目录接口实现传送数据时间标记TLM是为了构建更高级抽象模型的传输方式。虽然SV本身没有原生的TLM传输方式,但是TLM在UVM很好地集成进来,并且在组件传输中得到了充分运用。伴随着SystemC模型的广泛引用,SystemC通信机制TLM2.0业发展起来,成为SystemC模型之间的核心传输方式。TLM协议本身并不依赖于某一种语言,而是可以跨语言来实现其传输标准;TLM2.0是SystemC模型之间的核心传输方式。与TLM1.0相比,TLM2.0提供了更丰富更强大的传输特性,主要包括:双向的阻
2022-01-24 21:45:01
1249
原创 UVM入门与进阶学习笔11——TLM通信(3)
目录通信管道TLM FIFOAnalysis PortAnalysis TLM FIFORequest & Response通信管道通信管道TLM通信的实现方式的共同点在于都是端对端的,同时target一端需实现传输方法,例如put()或者get()。对于monitor、coverage collector等组件在传输数据时,会存在一端到多端的传输,如何解决这一问题?几个TLM组件和端口可帮助用户解决问题:TLM FIFO、analysis port、analysis TLM FIFO
2022-01-24 16:24:47
1201
原创 UVM入门与进阶学习笔11——TLM通信(2)
目录单向通信双向通信分类多向通信单向通信单向通信指的是从initiator到target之间的数据流向是单一方向的,或者说initiator和target只能扮演producer和consumer中的一个角色。UVM中单一数据流向的TLM端口有很多类型:(其中PORT代表了三种端口名:port、export、imp)uvm_blocking_put_PORTuvm_nonblocking_put_PORTuvm_put_PORTuvm_blocking_get_PORTuvm_nonb
2022-01-24 11:19:18
2791
原创 UVM入门与进阶学习笔11——TLM通信(1)
目录什么是TLM基本概念分类端口的使用什么是TLM在芯片开发流程中,系统原型和芯片验证对项目的助推起到了关键作用。系统原型一般是通过硬件功能描述文档来模拟硬件行为,而行为要求不同于RTL模型。系统原型可以提供一个准确到硬件比特级别、按照地址段访问、不依赖于时钟周期的模型,该模型通常基于SystemC语言;系统原型中各个模块通过TLM可以实现宽松时间范围内的数据包传输。芯片验证是在RTL模型初步建立之后,通过验证语言和方法学来构建验证平台。该平台的特点是验证环境整体基于面向对象开发,组件之间的通
2022-01-24 10:12:30
1058
原创 UVM入门与进阶学习笔记10——构建验证环境的内经
目录环境构建的四要素单元组件的自闭性回归创建通信端口连接顶层配置环境元素分类成员变量子组件子对象环境构建的四要素在发送测试序列前,首先需要创建一个结构化的环境,将环境建立的核心要素拆解,可分为四个部分:单元组件的自闭性、回归创建、通信端口连接、顶层配置。单元组件的自闭性自闭性指的是单元组件自身可以成为独立行为、不依赖于其它并行的组件。例如driver同sequencer之间,虽然driver需获取sequencer的transaction item,但它本身可以独立例化,而它们之间的通信也是
2022-01-24 00:04:03
825
原创 UVM入门与进阶学习笔记8——UVM结构回顾
目录uvm_topuvm_test构建环境的主要组件uvm_componentuvm_envuvm_testuvm_componentuvm_topuvm_top是uvm_root类的唯一实例,它由UVM创建和管理,其所在的域是uvm_pkg。uvm_top是所有test组件的顶层,所有验证环境中的组件在创建时都需指明它的父一级,如果某些组件在创建时指定父级的参数为null,那么它将直接隶属于uvm_top。uvm_top提供一系列的方法控制仿真,例如phase机制、objection防止仿真
2022-01-23 21:02:55
724
原创 UVM入门与进阶学习笔记7——组件家族
目录uvm_driveruvm_monitoruvm_sequenceruvm_agentuvm_scoreboard类uvm_envuvm_test类SV环境的验证组件按功能需要分为激励器(stimulator)、监测器(monitor)和检查器(checker);它们与验证环境的三个关键特性对应:激励、监测和检查。UVM组件家族是从UVM基类继承的一个核心分支即uvm_component类,从它继承的类均可构成验证环境,因为它们都从uvm_component类继承了phase机制,都会经历各个
2022-01-23 16:54:20
1715
原创 UVM入门与进阶学习笔记6——消息管理
目录消息方法消息处理消息宏消息机制回调函数一个好的验证系统应该具有的消息管理特性:通过一种标准化的方式打印信息;过滤(重要级别)信息;打印通道。这些特性在UVM中均有支持。UVM提供了一系列丰富的类和方法来生成和过滤消息:消息方法、消息处理、消息机制。消息方法在UVM环境中/之外,只要有引入uvm_pkg,均可通过下面方法按照消息的严重级别和冗余度来打印消息。function void uvm_report_info(string id, string message, int v
2022-01-22 23:18:09
1788
原创 UVM入门与进阶学习笔记5——config机制
目录interface传递变量设置object传递为验证环境的复用性,通过外部的参数配置使环境在创建时可根据不同参数选择创建的组件类型、组件实例数目、组件之间的连接以及组件的运行模式等。在更细致的环境调节中有更多变量需配置,例如for-loop的阈值、字符串名称、随机变量的生成比重等。比起重新编译,在仿真中通过变量设置修改环境就显得更灵活,UVM config机制正是提供这么做的方法。UVM提供uvm_config_db的配置类以及几种很方便的变量设置方法来实现在仿真时的环境控制。常见的uv
2022-01-22 22:08:32
1299
1
原创 UVM入门与进阶学习笔记4——UVM仿真的开始与结束
目录UVM的编译和运行顺序UVM仿真开始UVM世界的“诞生”UVM仿真结束UVM的编译和运行顺序下图是UVM的编译运行顺序,非常重要的知识点!在加载硬件模型调用仿真器之前,要完成编译和建模阶段。在开始仿真之前,分别执行硬件的always/initial语句,以及UVM的调用测试方法run_test和几个phase,分别是build、connect、end_of_elaboration和start_of_simulation。在开始仿真后,执行run phase或对应的12个分支phase。
2022-01-22 14:40:25
7932
原创 UVM入门与进阶学习笔记3——phase机制
传统硬件设计模型在仿真开始前已完成例化和连接;而SV软件部分,类的例化需要在仿真开始后完成。虽然类的例化通过调用构建函数new()实现,但仅通过new()函数无法解决一个重要问题——验证环境层次化时需要保证例化的先后关系,以及在确立各个组件均完成例化后的连接。且如果需要实现高级功能,如顶层到底层的配置时,也无法在底层组件例化之前提前完成配置逻辑。因此UVM引入phase机制,通过该机制可以清晰地将UVM仿真的阶段层次化。不单单是对各个phase的先后顺序,处于同一phase中的层次化组件之间的phase也
2022-01-22 14:08:05
2017
原创 UVM入门与进阶学习笔记2——核心基类
目录uvm_object域的自动化copy和clone的区别比较(compare)打印(print)打包和解包(pack&unpack)uvm_objectUVM世界的类都是从uvm_void根类继承,实际上该类并没有成员变量和方法。uvm_void只是一个虚类,还在等待将来继承于它的子类去开垦。继承于它的子类中有uvm_object类和uvm_port_base类。UVM世界的类库地图中除事务接口类继承于uvm_port_base,其他所有类都从uvm_object类一步步继承。
2022-01-22 14:03:32
2657
原创 UVM入门与进阶学习笔记1——UVM概述、类库地图、工厂机制、覆盖方法
目录验证方法学概述UVM的优势类库地图UVM核心类库工厂机制覆盖方法前言:个人学习UVM的在线笔记。学习的过程中借鉴一些大佬的笔记和路科验证学习资料,只做个人学习交流使用,感谢!验证方法学概述UVM的优势UVM融合其他验证方法学的积极意义在于,打通了各个EDA公司和IC设计公司的验证技能通道,便于验证技术交流和人才流动,也方便IC设计公司的技术及工具选择。用户不再受限于使用何种仿真器、使用哪一家的验证IP,而只需要将主要精力着眼于设计的功能验证,由此也提升了验证效率。SV核心特性包括面向对象
2022-01-22 00:17:53
10281
10
原创 SystemVerilog学习笔记8——类型转换、虚方法、虚函数、对象拷贝、回调函数、参数化的类
目录类型转换动态转换子类句柄赋值于父类句柄父类句柄转换为子类句柄虚方法非虚函数的调用虚函数的调用对象拷贝回调函数参数化的类实现一个简化的mailbox类型转换类型转换可以分为静态转换和动态转换:静态转换在转换的表达式前加上单引号即可,该方式并不会对转换值做检查。如果发生转换失败也无从得知。动态转换需要使用系统函数$cast(tgt,src)做转换;静态转换和动态转换均需要操作符号或系统函数介入,统称为显式转换。不需要进行转换的一些操作称为隐式转换。例如赋值语句右侧是4位的矢量,而左侧是5位的矢量
2022-01-20 20:56:38
2469
原创 SystemVerilog学习笔记7——覆盖率
目录代码覆盖率断言覆盖率漏洞率曲线功能覆盖率功能覆盖策略覆盖组覆盖组的采样触发数据采样bin的创建和应用条件覆盖率翻转覆盖率wildcard覆盖率忽略的bin非法的bin交叉覆盖率排除部分cross bin精细的交叉覆盖率指定覆盖选项注释覆盖次数限定覆盖率目标covergroup方法数据分析覆盖率是衡量设计验证完备性的一个通用词语;随着测试逐步覆盖各种合理的组合,仿真过程会慢慢勾画出设计的情况;覆盖率工具会在仿真过程中收集信息,然后进行后续处理并得到覆盖率报告;通过该报告找出覆盖外的盲区,然后修
2022-01-20 14:48:21
4750
原创 SystemVerilog学习笔记6——线程
目录线程的使用程序和模块什么是线程?线程的控制fork并行线程语句块等待所有衍生线程线程间的通信event事件semaphore旗语mailbox信箱线程的使用程序和模块module作为RTL模型的外壳包装和实现硬件行为,在更高层的集成层面,模块之间也需要通信和同步;对于硬件的过程块,它们之间的通信可理解为不同逻辑/时序块间的通信或同步,是通过信号的变化来完成的;从硬件实现的角度来看,Verilog通过always、initial过程语句块和信号数据连接实现进程间通信;可将不同module
2022-01-19 21:46:04
1890
原创 SystemVerilog学习笔记5——随机约束和分布
目录随机约束和分布为何需要随机?为何需要约束?需要随机什么?声明随机变量的类什么是约束?权重分布约束块控制打开或关闭约束内嵌约束随机函数数组约束数组的属性约束随机化句柄数组随机控制随机约束和分布为何需要随机?芯片体积增大,复杂度越来越高,定向测试已无法满足验证的需求,而随机测试的比例逐渐提高;定向测试能找到认为可能存在的缺陷,随机测试可以找到意想不到的缺陷;随机测试的环境要求比定向测试复杂,需要激励、参考模型、在线比较;随机测试相对定向测试可以减少很多代码量,产生的激励较定向测试也更多样。
2022-01-19 15:47:01
2529
1
原创 SystemVerilog学习笔记4——OOP、句柄、对象、静态变量/方法、类、包
目录类和对象的概述验证为何需要OOP?OOP概念要素句柄的传递对象的销毁静态变量静态方法类的成员类与结构体的异同类与模块的异同类的相关问题类的继承句柄的使用包的使用类和对象的概述类是将相同个体抽象出来的描述方式,对象是实体,其具备有独立行为的能力;具有相同属性和功能的对象属于同一类,不同类之间可能有联系(继承)或没有联系;C语言中,编程基于过程方法,在Verilog中提供了笨拙的类对象编程可能性,即在module中定义方法,而后调用module实例中的方法;Verilog的module+met
2022-01-18 23:22:24
2576
原创 SystemVerilog学习笔记2——硬件设计描述(MCDF)
目录MCDF接口描述MCDF接口时序MCDF寄存器描述激励发生器Channel initiatorRegister initiatorFormatter responder监测器内部信号监测建议比较器多通道数据整形器(MCDF, multi-channel data formatter),它可以将上行(uplink)多个通道数据经过内部的FIFO,最终以数据包(data packet)的形式送出;其上行数据和下行数据的接口协议不同;有寄存器的读写接口,可以支持更多的控制功能。上行数据的通道从端(
2022-01-18 11:15:58
3692
原创 SystemVerilog学习笔记1——基本概念
目录数据类型组合/非组合型数组定宽数组和动态数组关联数组显示转换初始化和赋值队列结构体枚举类型字符串过程块和方法函数function任务task变量生命周期设计例化和连接验证结构前言:个人学习SV的在线笔记。学习SV的过程中借鉴一些大佬的笔记和路科验证学习资料,只做个人学习交流使用,感谢!数据类型logic和reg、wire的区分和联系:-Verilog作为硬件描述语言,designer懂得所描述的变量应该被实现为寄存器还是线网类型,这有利于后端综合工具以及便于阅读和理解;SV侧重于验证,不
2022-01-18 10:12:37
2737
2
原创 UVM实战 卷I学习笔记18——UVM常用宏汇总
目录扩展寄存器模型中的数据位宽扩展寄存器模型中的地址位宽自定义字选择(byteenable)位宽去除OVM中过时的用法,使用纯净的UVM环境宏与运行时的命令行参数不同。它有两种定义方式,一是直接在源文件中中使用define进行定义:`define MACRO或者:`define MACRO 100二是在编译时的命令行中使用如下方式:<compile command> +define+MACRO或者:<compile command> +define+MACR
2022-01-14 11:01:20
1498
原创 UVM实战 卷I学习笔记17——UVM命令行参数汇总
目录打印出所有的命令行参数指定运行测试用例的名称在命令行中设置冗余度阈值设置打印信息的不同行为重载冗余度设置全局的超时时间ERROR到达一定数量退出仿真打开phase的调试功能打开objection的调试功能打开config_db的调试功能打开resource_db的调试功能使用factory机制重载某个实例类型重载在命令行中使用set_config命令行参数指的是运行时的命令行参数,而不是编译时的命令行参数。打印出所有的命令行参数<sim command> +UVM_DUMP_CMD
2022-01-14 11:00:03
2628
原创 UVM实战 卷I学习笔记16——DUT代码清单
目录带双路输入输出端口的DUT:带寄存器配置总线的DUT:带计数器的DUT:带双路输入输出端口的DUT:module dut(clk, rst_n, rxd0, rx_dv0, rxd1, rx_dv1, txd0, tx_en0, txd1, tx_en1);input clk;input rst_n;input[7:0] rxd0;input rx_dv0;input[7:0] rxd1;input rx_dv1;output [7:0] txd
2022-01-14 10:59:08
711
原创 UVM实战 卷I学习笔记15——附录A SystemVerilog使用简介
目录结构体的使用从结构体到类类的封装类的继承类的多态randomize与constraintSystemVerilog是一种面向对象的编程语言。与非面向对象的编程语言相比,面向对象语言最重要的特点是所有功能都要在类(class)里实现。结构体的使用非面向对象编程最常用的是函数。要实现一个功能,就要实现相应函数。要实现的功能较简单时,函数可轻易完成目标。如计算一串数据流的CRC校验值,虽然CRC的算法比较复杂,但完全可以用一个函数实现。但当要实现的功能比较复杂时,仅使用函数实现会显得比较笨拙。假设
2022-01-14 10:46:59
370
原创 UVM实战 卷I学习笔记14——OVM到UVM的迁移
目录对等的迁移一些过时的用法*sequence与sequencer的factory机制实现sequence的启动与uvm_test_done*手动调用build_phase纯净的UVM环境对等的迁移UVM从OVM衍生而来,因此UVM几乎完全继承OVM所有特性。从OVM到UVM的迁移,很大程度上只是ovm前缀到uvm前缀的变更。所有ovm_xxx宏都可以变更到uvm_xxx宏。ovm_component变更为uvm_component,ovm_object变更为uvm_object。关于前缀的变更,U
2022-01-13 17:13:45
1251
原创 UVM实战 卷I学习笔记13——UVM高级应用(4)
目录聚合参数聚合参数的定义聚合参数的优势与问题config_db换一个phase使用config_db*config_db的替代者*set函数的第二个参数的检查聚合参数聚合参数的定义验证平台用到的参数有两大类,一类是验证环境与DUT中都要用到的参数,这些参数通常都对应DUT中的寄存器,前面已经将这些参数组织成一个参数类;另一类是验证环境独有的,比如driver中要发送的preamble数量的上限和下限。本节讲述如何组织这类参数。大项目要配置的参数可能有千百个。如果全部使用config_db写法,
2022-01-13 16:40:35
970
原创 UVM实战 卷I学习笔记13——UVM高级应用(3)
目录sequence的其他问题*心跳功能的实现只将virtual_sequence设置为default_sequencedisable fork语句对原子操作的影响DUT参数的随机化使用寄存器模型随机化参数*使用单独的参数类sequence的其他问题*心跳功能的实现某些协议需要driver每隔一段时间向DUT发送一些类似心跳的信号。这些心跳信号的包与其他普通的包并没有本质区别,其使用的transaction也都是普通的transaction。发送这种心跳包有两种选择,一种是在driver中实现,
2022-01-12 16:30:43
908
原创 UVM实战 卷I学习笔记13——UVM高级应用(2)
目录layer sequence*复杂sequence的简单化layer sequence的示例layer sequence与try_next_item*错峰技术的使用layer sequence*复杂sequence的简单化在网络传输中,以太网包是最底层的包,其上还有IP包、UDP包、TCP包等。现在只考虑IP包与mac包。my_transaction(mac包)在前文中已经定义过了,下面给出IP包的定义:class ip_transaction extends uvm_sequence_it
2022-01-12 14:59:02
2760
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人