K-3L

...

UVM中的TLM1.0通信 | UVM笔记 2

TLM1.0 TLM是Transaction Level Modeling的缩写,表示事务级建模。transaction指的是把具有某一特定功能的一组信息封装在一起而成为的一个类。 TLM通信中常见的操作有put,get以及transport。put表示发送一个transaction,get表示索取一个transaction,transport表示发送并索取。动作发起者的端口均是PORT...

UVM基础 | UVM笔记 1

uvm_component与uvm_object uvm_object是最基础的类;uvm_component派生自uvm_object。uvm_component能够在new时指定parent参数来形成一种树形结构,另外还具有phase的自动执行特点。 派生自uvm_object的类 派生自uvm_component的类 ...

验证平台搭建案例(2) | Systemverilog 笔记 11

经过一段时间的学习。大概了解了SystemVerilog的语法,以及一个验证平台的搭建流程。可以说,验证平台的搭建方法是相对固定的。因为验证组件是确定的,无非就是generator,driver,monitor,scoreboard等。不过要真正掌握搭建过程,还是需要不断的练习。 下面验证如下一个加法器。 验证平台的结构还是如下图所示。 `include "interfac...

验证平台搭建案例(1) | Systemverilog 笔记 10

下面搭建一个验证内存设计的平台。 Generator用于生成随机化的事务,并发送给Driver。Driver收到事务后,通过Interface发送给DUT。Monitor监控DUT的测试结果,并把Interface信号转换成事务发送给Scoreboard。Environment是一个包含了Generator,Driver,Monitor,Scoreboard的容器,负责验证环境的有序运...

明确一些概念(1) | Systemverilog 笔记 9

ref端口 在一些参数传递时,常常用ref代替input/output,这是因为使用了ref可以直接引用目标参数,而不是选择复制。如此可以提高代码性能。同时,可以让任务或函数实时追踪参数的变化。ref参数只能被用于带automatioc参数的子程序中。注意,一个变量连接到多个ref端口,可能会引起竞争,端口可能同时更新该变量。 task load_array(int len, ref i...

功能覆盖率 | Systemverilog 笔记 8

功能覆盖率是衡量有多少设计特征已被测试的一个指标。 代码覆盖率是衡量有多少设计代码已被执行的一个指标。 下面给出功能覆盖率的简单例子。覆盖组与类相似,使用前需要实例化,若在类中定义,则可以直接用覆盖组的名字,否则要另起名字。一个覆盖组可以有多个测量点,且都同时测量。 program automatic test(busifc.TB ifc); class Transaction...

面向对象编程的高级技巧指南 | Systemverilog 笔记 7

为什么需要继承? 在面对一系列的设计时,有的类的功能需求是相近的,如果重写,加入一些新的属性方法,显然会增加工作量。因此使用继承就能够很好地发挥原本类的作用,同时拓展其功能。 如何继承类? 首先需要一个基类,然后定义派生类。 /*基类*/ class Transaction; rand bit[31:0] src,dst,data[8]; bit[31:0] crc;...

线程以及线程间的通信 | Systemverilog 笔记 6

创建线程的方法 fork …join_none以及fork…join_any。两者的区别在于,前者在调度块内语句时,父线程继续执行,且父线程的后续语句早于fork内线程;后者则在块内任一个语句完成后。线程内的语句是并行的。而传统的fork…join则需要等到块内所有语句执行完成后才进行后续语句执行。 停止线程的方法 使用disable forklabel来停止线程。若没有指明线程标记,...

随机化 | Systemverilog 笔记 5

为什么要随机化? 随着设计复杂度的增加,验证的难度也会增加。这体现在激励的角度上,就是需要尽可能多样的激励进行验证。如果人为的去增加各种激励,显然工作量非常大,所以要采用随机化的方法。用受约束随机的手段,尽可能多地覆盖各种激励。 需要随机化的方面有器件配置;环境配置;原始输入数据;封装后的输入数据;协议异常;延时;事务状态;错误和违规。 如何随机化? 建立具有随机变量及其约束的类,然...

面向对象编程基础 | Systemverilog 笔记 4

什么是类? 一种将复杂数据及操作数据的方法封装在一起的数据类型。 如何声明类? class firstcls;/*类名*/ logic [7:0] data; /*数据,即属性*/ static int count=0; /*共享属性(静态变量)*/ function void display; /*显示数据的函数,即方法;方法可以在类之外定义(ext...