Iam柒年
柒年哦
展开
-
sv中常见算法总结
一些算法总结。原创 2021-05-16 16:34:38 · 142 阅读 · 0 评论 -
uvm中call_back使用
uvm中call_back使用原创 2023-05-13 11:09:15 · 2335 阅读 · 1 评论 -
UART模块验证(1)
带时钟同步信号的数据传输,发送方和接收方在同一时钟控制下,同步传输。通用异步串行收发传输器(,通常称为UART)是一种异步收发全双工传输器。该传输器由两根信号线组成,一根数据发送线TX,一根数据接收线RX,通信时数据以传输帧为单位,一帧数据包括四个部分,分别是起始位数据位奇偶校验位和停止位。通常情况下数据可以为5-8位,奇偶校验位可以奇校验偶校验或是无校验。UART中传输数据逻辑,未进行数据传输时,数据线时钟处于高电平,开始进行一帧数据传输时,数据线上的电平首先会被拉低,当前位为起始位,随后8个数据位(原创 2023-04-29 21:44:19 · 3170 阅读 · 0 评论 -
正则表达式
正则表达式总结原创 2023-02-24 10:19:30 · 140 阅读 · 0 评论 -
SystemVerilog中指定打印格式
本文主要总结一下中的占位符,通过合理的使用占位符,在log中按自己指定的格式打印信息,方便debug。转载 2023-01-19 17:37:00 · 833 阅读 · 0 评论 -
9-层次化设计
层次化设计,线网别名化原创 2022-11-06 15:44:52 · 205 阅读 · 0 评论 -
systemverilog硬件设计与建模
systemVerilog硬件设计与建模原创 2022-10-26 20:49:38 · 398 阅读 · 0 评论 -
always_comb,always_ff,和always_latch语句
always_comb,always_ff,和always_latch语句转载 2022-10-26 20:33:09 · 933 阅读 · 0 评论 -
ubuntu18安装vcs2016和verdi2016
vcs2016安装遇到的问题原创 2022-10-08 23:40:47 · 1035 阅读 · 0 评论 -
后仿真总结
前端后仿真总结原创 2022-09-11 18:42:18 · 491 阅读 · 0 评论 -
SVA断言总结
assert断言总结原创 2022-09-09 19:47:49 · 3774 阅读 · 0 评论 -
关于VIP开发总结
买不到VIP,就只能自己开发了。原创 2022-04-23 17:20:13 · 560 阅读 · 0 评论 -
消息管理机制
验证环境中统一的管理消息特性消息的类型?如何管理消息,过滤消息?原创 2021-02-28 23:16:01 · 3907 阅读 · 0 评论 -
寄存器模型(2)
寄存器模型集成通过寄存器模型发送读写寄存器序列原创 2021-08-08 19:48:11 · 3452 阅读 · 1 评论 -
寄存器模型(1)
寄存器以下寄存器描述:硬件中的各个功能模块可以由处理器来配置功能以及访问状态,而与处理器的对话即是通过寄存器的读写来实现的。寄存器的硬件实现是通过触发器,而每一个比特位的触发器都对应着寄存器的功能描述(function specification)。一个寄存器一般由32个比特位构成,将单个寄存器拆分之后,又可以分为多个域(field),不同的域往往代表着某一项独立的功能。单个的域可能有多个比特位构成,也可能由单一比特位构成,这取决于该域的功能模式可配置的数量。而不同的域,对于外部的读写而言,又原创 2021-08-07 18:37:49 · 5967 阅读 · 0 评论 -
sequence介绍完善
hirearchical sequence以下验证寄存器场景包括以下几点:原创 2021-08-01 17:46:18 · 3994 阅读 · 0 评论 -
sequence系列之sequence和sequencer
sequence和item发送实例未封装实例如下:class bus_trans extends uvm_sequence_item; //bus item定义 rand int data; `uvm_object_utils_begin(bus_trans) `uvm_field_int(data, UVM_ALL_ON) `uvm_object_utils_end ...endclassclass child_seq extends uvm_sequence; //child_原创 2021-07-31 23:42:53 · 1049 阅读 · 0 评论 -
sequence系列之sequence and item,and driver
sequence and item概述sequence指的是uvm_sequence类,而item指的是uvm_sequence_item类。对于激励生成和场景控制,是由sequence来编织的,而对于激励所需要的具体数据和控制要求,则是从item的成员数据得到的。介绍item是基于uvm_object类,这表明了它具备UVM核心基类所必要的数据操作方法,例如copy()、clone()、compare()、record()。item根据数据成员的类型,将划分为:控制类。例如总线协议上的读原创 2021-06-14 16:46:13 · 522 阅读 · 0 评论 -
验证工程师需要掌握的技能
验证工程师需要掌握的技能原创 2021-05-16 22:48:53 · 3984 阅读 · 0 评论 -
同步通信元件
概述SV用来做线程同步的几种元件,它们分别是semaphore、event、mailbox。在UVM中,需要同步线程不再只局限于同一个对象中,还需要解决不同组件之间的线程同步问题。一旦线程同步要求发生在不同组件,这就要求组件之间可以通过某种方法来实现同步。UVM为解决组件封闭性问题,定义了如下类来满足组件之间的同步要求。uvm_event,uvm_event_pool,uvm_event_callback,uvm_barrier,uvm_barrier_pooluvm_eventuvm_eve原创 2021-04-11 23:37:31 · 647 阅读 · 0 评论 -
UVM通信2.0(与SystemC模型通信)
原创 2021-04-05 21:36:43 · 895 阅读 · 0 评论 -
UVM通信1.0
开发流程TLM通信概念a. TLM是一种基于事务(transaction)的通信方式,通常高抽象级语言例如SystemC或者SV/UVM中作为模块之间的通信方式。TLM通信需要两个通信对象,这两个对象分别称为initiator(发起方)和target(响应方)。通信发起方并不代表了Transaction的流向起点,即不一定数据是从initiator流向target,也可能是从target流向了initiator。(数据不一定是由发起方流向响应方,发起方既可以向响应方传递数据(put),也可以向响应原创 2021-03-14 17:12:05 · 4416 阅读 · 0 评论 -
组件家族说明
组件家族常见组件:uvm_driver、uvm_monitor、uvm_sequencer、uvm_agent、uvm_scoreboard、uvm_env、uvm_test继承关系:查看UVM类库地图第5部分,地址。各个组件描述以及扩展的部分uvm_driver类uvm_driver是参数化的类,该组件需要传入参数类,如下所示:class my_driver extends uvm_driver #(type REQ=uvm_sequence_item, type RSP=REQ); /原创 2021-03-07 21:59:53 · 523 阅读 · 0 评论 -
config机制
config机制在build_phase中除了组件的实例化,同时也可以对各个组件进行配置,在仿真前,通过config机制,来给组件传递数据。通过uvm_config_db向内部传参(interface类型的数据可以看成一种特殊的数据类型)传参格式:uvm_config_db#(virtual my_if)::set(this,"env.agent.driver","vif",input_if),传参类型是virtual my_if类型,传参要指定传参的路径,this表示当前的模块,路径是uvm_top原创 2021-02-28 22:28:24 · 996 阅读 · 1 评论 -
phase机制
phase中依次调用的方法原创 2021-02-28 20:58:01 · 1948 阅读 · 0 评论 -
核心基类提供的方法(copy, clone, compare, print, pack/unpack)
uvm_object提供的方法:copy, clone, compare, print, pack/unpack如果要用到以上方法,将其属性加入到域的自动化中:`uvm_object_utils_begin(class_name) //class_name: 组件名 `uvm_field_int(value, UVM_ALL_ON) //value: 属性,UVM_ALL_ON:可操作方法全开,假如该属性不参与copy方法,可设置成成,UVM_NOCOPY`uvm_obj原创 2021-01-31 22:53:46 · 522 阅读 · 0 评论 -
工厂机制(注册,创建,覆盖)
类库地图:地址原创 2020-12-27 18:01:45 · 1419 阅读 · 1 评论 -
参数化的类
目标:提高代码复用率。原创 2020-12-20 21:46:00 · 1572 阅读 · 0 评论 -
使用回调函数
前提在不修改原始类时,引入新的方法,就需要在父类定义方法时,预留回调函数入口,使得在继承的子类中填充回调函数,就可以完成对父类方法的修改。回调函数使用在随机化中用到的回调函数:pre_randomize,post_randomize,这两个函数本身预留出来,给用户自己填充,且在运行随机化randomize() 时,可被动运行。...原创 2020-12-14 23:27:44 · 129 阅读 · 0 评论 -
对象的拷贝方法
浅拷贝(shallow copy)声明句柄,创建对象,如果将p1句柄赋值给p2句柄,实际上创建的对象只有一个,指向这个句柄的对象有两个p1和p2packet p1, p2;p1=new();p2=p1;在创建p2对象时,从p1拷贝其成员变量,比如integer,string,句柄等,这种称之为对象浅拷贝,而不是简单的使用等号进行句柄拷贝。sv中对象的拷贝,无法通过等号来实现,等号实现是句柄得赋值,而不能拷贝对象中的变量。packet p1, p2;p1=new();p2=new() p1;原创 2020-12-13 22:46:42 · 1275 阅读 · 2 评论 -
使用虚方法
参考地址:类的继承虚方法的关键字:原创 2020-12-13 21:27:54 · 1465 阅读 · 0 评论 -
类型的转换
显式类型转换分为静态转换,和动态转换。静态转换:在转换的表达式前加上单引号,不对转换值做检查,属于强制转换,转换失败也不得而知。int a;string b="haha";a=int'(b); //将b静态转换成a$display("a(1) is %0d",a);结果:是转换成功了动态转换:使用系统函数,$cast(tgt,src)做转换,将src转换成tgt。在转换时系统会做检查。int a;string b="haha";$c原创 2020-12-12 22:47:50 · 1089 阅读 · 0 评论 -
覆盖率选项,覆盖率分析
covergroup选项提供不同的覆盖率选项,来计算覆盖率。单独列出每个covergroup实例的覆盖率一个covergroup可能会被多个地方例化使用,默认情况下sv会将所有的实例的覆盖率合并到一起计算。如果需要单独列出每个covergroup实例的覆盖率,需要以下设置覆盖率选项。covergroup cov; coverpoint tr.length; option.per_instance=1; //指定单独计算该覆盖率吧报告endgroup给covergroup传参,这些原创 2020-12-12 21:15:37 · 4299 阅读 · 1 评论 -
覆盖率收集
覆盖率类型覆盖率的两种指定形式:显式的: 直接通过SV来指定出的,如SVA,covergroup。隐式的: 在验证过程中,随"register move"就可以由simulator得到的,如代码覆盖率等。覆盖率类型:代码覆盖率—由仿真器直接提供,只能表示设计的冗余度,与spec关系不大。(toggle/expression/block)功能覆盖率—与spec比较来发现,design是否行为正确,需要按verification plan来比较进度。(assertion/covergroup)断言覆原创 2020-12-06 19:55:05 · 5942 阅读 · 0 评论 -
sv中ref 关键字
SV中增加了一种方式ref,指定为引用而不是复制。task display(string name, ref int q[$]); int val; forever begin wait(q.size()>); endendtask原创 2020-12-06 01:27:41 · 6862 阅读 · 0 评论 -
验证的方法
主要验证方法:原创 2020-12-06 01:21:05 · 1799 阅读 · 0 评论 -
uvm类库地图
uvm类库地图:可分为以下几个类型:原创 2020-12-06 01:20:35 · 1445 阅读 · 0 评论 -
sv线程通信
线程类:问题:线程之间如何通信?在model中,initial 和 always 块作为独立的子线程是通过信号的变化来触发,并且实现进程间的通信。在 sv中, 通常用initial开启父类线程,包括begin end, 以顺序方式执行,但是不消耗时间,fork join 以并行方式执行。initial父类线程可以有多个子线程块,父线程终止时,所有子线程终止,而子线程终止时,父线程可以继续。fork join线程的特点,并行执行其内部语句,当所有的语句执行完毕,退出该线程。fork join_any原创 2020-12-06 00:58:56 · 1983 阅读 · 2 评论 -
数据类型(七)复杂的数据类型
占坑原创 2020-12-05 15:37:33 · 627 阅读 · 0 评论 -
激励随机约束和分布
随机激励包括:器件配置:寄存器和系统信号环境配置:初始环境配置,例如合理的时钟,和外部反馈信号。原始输入数据:数据包的长度,带宽,数据包间顺序延迟:握手信号之间的时序关系,req请求和ack之间的延迟响应。协议异常:给出随机异常反馈,确保dut处理数据的稳定性。...原创 2020-11-29 15:02:02 · 2067 阅读 · 1 评论