systemverilog && UVM
文章平均质量分 50
da
acmgotoac
这个作者很懒,什么都没留下…
展开
-
UVM简单验证平台从0到1
前序本篇文章主要参考《UVM实战:第二章》,虽说只是搭建了一个简单的验证平台,但从书本的零星知识到makefile成功并且dump到正确的波形,还是费了周折,有一定的参考意义。现将过程与学习IC验证的同学分享,也是防止自己日后遗忘。 验证平台拓扑结构(case调用report_phase中的uvm_top.print_topology()函数来打印整个验证平台的拓扑结构):笔者的文件目录:DUTwrapper.vDUT很简单,就是将接收到的数据在下一拍输出,输入输出都由data和valid原创 2022-05-06 17:49:57 · 1187 阅读 · 0 评论 -
UVM应用指南及源码分析:第五章 sequence机制 学习笔记
sequence机制在UVM验证平台中扮演什么样的角色?UVM验证平台中,sequence相当于子弹,sequencer相当于弹夹,driver相当于手枪。主从关系而言,当driver请求发射的时候告诉弹夹准备好子弹。sequence主要负责transaction的产生,UVM平台需要对DUT施加不同的激励,而激励的不同体现在transaction,本质上是通过不同case中不同的sequence产生不同的激励。drvier完全可以产生激励,并对DUT进行驱动,为什么还要多此一举,加入sequence机原创 2022-05-02 10:26:34 · 1213 阅读 · 0 评论 -
关于UVM中get_name(),get_full_name(),get_type_name问题
此博文写的很详细转载 2022-04-19 16:41:15 · 1005 阅读 · 0 评论 -
第一个UVM环境:hello world
参考下载UVM1.1d原码:csdn传送win下解压,将如下文件夹复制到linux原创 2022-04-19 00:56:06 · 268 阅读 · 0 评论 -
system verilog:call back机制的理解
什么是callback?它有什么作用呢?引用自《UVM实战》第九章 UVM中代码的重用性:验证人员希望在在一个项目中开发的验证平台能够用于另一个项目,但是,完全重用是很难实现的,不同项目多少存在差异。但是,将两个项目不同的地方使用callback函数来做,而将相同的地方写成一个完整的env,重用时只要改变callback函数env就可以完全重用。上代码来说明什么是callback参考硅芯思见,很不错的博主代码架构如下:cbb是callback函数的基类(这个类是一个虚类或者说是抽象类,可以被扩展原创 2022-04-15 22:17:11 · 790 阅读 · 1 评论 -
system verilog:虚接口virtual interface
参考绿皮书第十章:高级接口为什么要引入虚接口?接口(interface)代表了实际的物理信号,是静态的,而验证平台需要动态的连接设计,比如一个driver类要连接DUT的不同接口,但你肯定不希望每个接口都写一个对应的driver类和DUT接口连接,而是通过例化传参的方式连接DUT。因此system verilog提出了一种虚接口(virtual interface)的概念,虚接口是物理接口的句柄,在仿真平台运行时,再决定要传入哪一个物理接口的句柄,并产生相应激励。因此,虚接口将物理DUT和仿真验证平台分原创 2022-04-11 21:01:16 · 2320 阅读 · 0 评论 -
UVM:启动sequence的方法
参考UVM实战6.1.2直接调用start任务启动my_sequence my_seq;my_seq = my_sequence::type_id::creat("my_seq");my_seq.start(sequencer);my_seq的实例化采用type_name::type_id::creat()方式,使用factory机制注册过的类才能使用这种方式实例化,这样才能使用factory机制中最强大的功能。(UVM实战2.3.2)还可以用default_sequence启动,本质上原创 2022-04-08 11:08:19 · 648 阅读 · 0 评论 -
UVM:解决phase的执行顺序
uvm中phase有哪些?(参考UVM实战5.1phase机制)build_phaseconnect_phaseend_of_elaboration_phasestart_of_simulation_phaserun_phase(并列:pre,post reset_phase configure_phase main_phase shutdown_phase)extract_phasecheck_phasereport_phasefinal_phasebuild_phase和final原创 2022-04-08 10:31:08 · 1408 阅读 · 0 评论 -
UVM:filed_automation
参考UVM实战3.3 filed_automation机制`define uvm_file_int(ARG, FLAG)class trans; rand bit [47 : 0] dmac; rand bit [31 : 0] dq []; `uvm_object_utils_begin(trans) `uvm_filed_int(dmac, UVM_ALL_ON) `uvm_filed_array_int(dq, UVM_ALL_ON) `uvm_object_util原创 2022-04-08 10:39:58 · 138 阅读 · 0 评论 -
解决$cast
参考绿皮书8.3;参考博文基类句柄可以指向扩展类对象(向下类型转换),但扩展类句柄不能指向基类对象(向上类型转换),除非基类句柄之前指向了一个扩展类或者扩展类的扩展类对象。class bird; virtual function void hungry(); $display("i am a bird, i am hungry"); endfunction function void hungry2(); $display("i am a bird原创 2022-04-07 15:24:43 · 285 阅读 · 0 评论 -
每天实践SV:过程语句
ref的使用ref引用传递数组,节省空间,如果没有ref修饰,会将数组复制到堆栈,当数组很大的时候代价很大。module ref_(); bit [31 : 0] a []; initial begin a = new[5]; a = '{1, 2, 3, 4, 6}; print_checksum(a); end function void print_checksum(const ref bit [31 : 0] a原创 2022-03-28 23:57:27 · 168 阅读 · 0 评论 -
每天实践SV:数据类型
初始化并遍历多维数组module data_type(); int arr[3][2]; //int arr[0 : 2][0 : 1] initial begin arr = '{'{1, 2}, '{3, 4}, '{5, 6}}; foreach(arr[i,j]) $display("arr[%0d][%0d] = %0d", i, j, arr[i][j]); $finish; endendmod原创 2022-03-25 22:41:08 · 775 阅读 · 0 评论