自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 不同层次上的测试关注点

边界:根据对功能文档的解读,验证出设计者们之间的矛盾,消除边界争议,实现一致。并发:验证多线程并发状态下的功能是否可以实现。功能:从核心功能到次要功能,对代码块的验证。出错:设计是否能应对只进行了一半的事务。

2024-05-07 11:19:03 198

原创 DDR学习

8.几个bank意味着几个不同的array,bank独立充电, 提升ddr工作效率。7.x2 就是从2个array阵列里同时存取, x4就是4个array。rank:由chip组成,凑齐64bit就是一个rank。6.ddr底层由电容构成,易漏电,因此需要refresh。9.问题:ddr和固态硬盘的区别。5. DIMM:内存条。

2023-11-06 15:13:10 95

原创 UVM环境中数据输送的整个过程,以及ahb ram的driver如何写。

通过uvm_seq_defines里我们可以看到·uvm_do、uvm_do_on_with等宏定义都基于一个宏·uvm_do_on_pri_with这个宏;当seq完成了挂载之后,driver就可以使用uvm_driver里面定义的port去调用imp:uvm_sequencer_base中的方法:get_next_item(req),然后将req数据向vif的做驱动,完成之后clone一个rsp,将开始req的id给rsp调用item_done就可以完成一次数据的传输。2.$cast语句的作用。

2023-07-03 21:35:03 1130 1

原创 ahb_timer模块里的断言及ovl断言库使用

assert_impalication:通过预设一个先行表达式,该检测器在时钟的上升沿(之前)持续采样,当满足该表达式,验证后面结论表达式是否为真。断言时序检查例如:在psel拉高时写入的地址不能是未知的,pready拉高的情况下在psel拉高后的下一拍penable拉高,penable拉高的下一个周期penable拉低,penable和pwite拉高时pwdata信号发生变化,penable拉低后paddr和pwrite信号不变直到下一次psel来。对同一个地址做连续两次读。断言包括立即断言和并行断言。

2023-07-02 22:20:38 345 1

原创 APB_timer的coverage model怎么写

当从subscriber里捕捉到reg_trigger的时候,将传递来的寄存器的名字做一个case语句,当名字为CTRL时,t1采样寄存器模型里的CTRL里的值;当名字是RELOAD时,t2采样RELOAD寄存器里的值;当名字是INTSTAT时,t5根据当前寄存器中的transaction的行为采样寄存器模型的INTSTAT.STATUS值。t2计数covergroup:保证32位数counter均能够正常的下行计数,这里采样了高16位的每个bit位,覆盖这些bit位为1的过程和跳转的过程。

2023-07-01 16:04:50 135

原创 AHB_timer模块的scoreboard怎么写

根据ref model内定义的变量去模拟timer的计数行为:@(posedge vif.clk iff cfg.scbenable && timer_enable)的时候,观察当前计数值counter,如果counter等于1且中断寄存器打开,则中断值置1,如果counter等于0则把初始值赋给counter,如果counter是其它值的话则counter减一;使用forever语句持续比较ref model里面的counter值和vif上的counter值,如果他们之间的差大于规定的最大误差值则报错。

2023-07-01 14:40:39 104

原创 【UVM】中的m_sequencer和p_sequencer理解

怎么解决这个问题呢,很简单,只需要对m_sequencer做一个类型转换即可,将父类类型转化为子类类型就可以访问子类类型的成员了。上面是uvm_sequence_difine中用到的一个宏,uvm_declare_p_sequencer(SEQUENCER),这里需要传入一个sequencer类型,为一个子类sequencer类型,p_sequencer被定义为这个类型,随后就将原来的m_sequencer转化为p_sequencer类型,也就相当于父类类型转换为了子类类型,这样就解决了上面的问题。

2023-06-30 11:51:52 511 1

原创 学习笔记5 AHB_mtx功能覆盖率采样

4.优先级仲裁:创建一个采样二维数组bit[3:0][] val的covergroup以同时捕捉多个端口的优先级,在这个covergroup里不仅对每一个val[i]收集优先级,而且针对不同的val[i]进行cross,从而建立3个端口优先级不同的bins;在coverage中的采样逻辑如下:当从subscriber中捕捉到寄存器访问后,从各个优先级寄存器拿到配置的优先级,将其放到一个bit[4:0][]类型的动态数组中,然后使用上述covergroup采样该动态数组。多端口并行访问寄存器。

2023-06-29 12:11:03 261 1

原创 学习笔记4.AHB_mtx 颗粒测试序列

继承于base_element_seq,我们写了用于单独发送数据的single_write_seq,单独读数据的single_read_seq,对mem写后读再检查的mem_read_after_write_check_seq,单个地址检查的single_addr_check_element_seq(继承于mem_read_after_write_check_seq)和非法地址检查的illegal_addr_check_element_seq。

2023-06-28 16:47:49 164 2

原创 [SV/UVM]关于AHB_mtx中需要做类型转换的几处

在这里父类函数wait_trigger_data(tmp)传递回来的类型父类类型,$cast将其转化为子类,这样子类不仅可以调用父类的方法也可以调用本身子类的方法。这里代码的目的是将req句柄指向的对象的clone,然后把req赋值给rsp,但是clone返回的是object类型,父类句柄不能赋值给子类句柄(子类句柄不能指向父类对象),因此在这里需要做类型的转化,将父类句柄转化为子类句柄。bus_item为父类句柄,t为子类句柄。由于父类句柄无法访问子类对象,因此在这里需要将父类句柄转化为子类句柄。

2023-06-28 16:01:56 160 1

原创 学习笔记2 AHB_mtx寄存器模型的生成和重构

在生成寄存器模型之后,为了满足三个mst同时访问我们在在一个reg_block下生成了三个reg_map,对应每个mst_id,并且reg_map的数量也是可以根据mst_num做更改的。因此,便可以直接使用寄存器模型来检查多端口并行访问。版权声明:上述表格为CSDN博主「小小verifier」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/SummerXRT/article/details/121970295。

2023-06-27 16:39:52 281 1

原创 ahb_mtx学习笔记1+.可配置验证环境拓展

一种结构体slv_addr_range_type用来规定slv端地址的始末位,并且为每一个slv端口设置了存储地址的队列slv_range_addr_t[ ][$], 定义了具备将slv_addr_range_type类型句柄push到队列里的function add_addr_range。当然,在cfg中,我们也定义了用于检查当前地址是否在slv地址范围内的检查函数is_address_in_range,以及生成一个地址范围的函数create_an_range,生成非法地址函数。

2023-06-27 15:28:32 252 1

原创 学习笔记1.AHB_mtx的uvm环境搭建

ahb_mtx验证环境搭建

2023-06-27 11:29:11 396

原创 【IC/FPGA】Makefile理解

makefile

2023-06-26 16:19:45 327

原创 ahb_mtx验证小结3-寄存器

ahb_mtx中关于寄存器检测seq

2023-06-20 10:48:36 1133 2

原创 【SV】类的继承的几个问题

Sv类的继承中易混淆的两个问题

2023-02-16 17:34:06 650 1

空空如也

空空如也

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

TA关注的人

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