自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 芯片验证工程师如何阅读spec

从右边看,该ip具有4个和外界传输的接口,分别是clk,ss(slave select),mosi(master out),miso(master in)。在面对动辄几百页的ip/subsys spec, 芯片验证工程师应该重点关注那些地方?怎么快速阅读芯片的spec。这里以spi的master ip为例进行说明。2. 看整个ip的feature,分解功能点,制定testplan。1. 阅读该ip的架构图,关注interface上的io接口。3. 查看寄存器列表,了解寄存器配置和功能之间的关系。

2024-12-10 18:08:49 444

原创 Clock domain crossing 芯片设计的CDC问题

当reset释放的时候,A=1输出到B,在到C,这个过程中,reset的信号拉高的过程就会和clk_b 对齐 ,就能满足恢复时间和移除时间,进而避免亚稳态的发生。采用握手协议,通过req和ack握手,在握手的过程中,保持要master传送的数据不变,这样就不会出现在传输过程中数据跳变的情况,减少亚稳态和错误数据的传输。如图所示:当F1的输出A恰好在F2的clk_b的上升沿变化,会导致F2的输出出现亚稳态,这个亚稳态会传递给F2的下游,F3,F4,造成电路的不稳定。采用异步复位,同步释放。

2024-12-09 19:17:41 519

原创 实例说明uvm callback的用法

3. 从上一步所创建的类中扩展出所需的call back类。仿真的结果:可以看到,call back的函数已经打印。4. 在顶层实例化并注册Call back对象。2. 创建基本的call back 类扩展。

2024-11-27 21:04:40 335

原创 如何用system verilog创建一个宏定义函数

举例:我想创建一个宏定义函数,在定义这个宏的时候,传入一定的参数,以方便不同的模块灵活调用。summary:本篇介绍了如何创建一个宏定义函数,并介绍使用过程。

2024-11-14 17:15:39 363

原创 怎么理解system verilog中面向对象编程的多态

多态使得同一操作可以在不同对象上表现出不同的行为,是实现代码复用和提高系统灵活性的关键特性。

2024-09-23 11:12:46 365

原创 在testbench中,对sram进行读写操作,验证sram的功能

3)里面调用的sram2p_rd_wr() 函数如下:通过拿到扫描到的参数,按照sram 相应的时序,把数据force到sram里面,再读出来,进行数据比对。3)里面调用的sram1p_rd_wr()函数如下:通过拿到扫描到的参数,按照sram 相应的时序,把数据force到sram里面,再读出来,进行数据比对。summary:本文主要介绍对在testbench中,对多个sram进行读写测试,确保sram的功能能够实现。

2024-08-23 11:01:49 999

原创 c case 与sv 之间的交互

本文简单演示了C case怎么和sv进行交互的过程,希望对C case验证环境迁移到sv环境的开发着有所以启发

2024-07-29 19:34:06 674

原创 uvm_tlm 端口的使用方法详解

1)monitor里面声明 imp端口并编写相应的gett函数。4. 在env里,将agent 的export与fifo相连接,将reference model的port与fifo相连接。3. monitor在agent里面,将agent的export端口与monitor的put port端口连接。3) monitor在agent里面,将agent的export端口与monitor的put端口连接。3) monitor在agent里面,将agent的export端口与monitor的imp端口连接。

2024-04-11 13:09:44 1426 1

原创 在uvm验证环境中,使用$value$plusargs向验证环境传递参数,从而实现不同sequence的调用

在这里,GetDefSeq(string name)函数根据$value$plusargs传递的参数,创建sequence实例,再将该sequence set给virtual sequencer,即可启动test bench开始仿真。每一个验证环境都有很多不同的验证场景,需要使用多个sequence,本文介绍通过$value$plusargs向环境中传递参数,实现不同sequencec的调用。

2024-02-28 20:38:53 665

原创 怎么在sequence中调用uvm_config_db 获得发包的数量

一般来说,我们的sequence都是丢到virtual sequencer上面,sequence中具体的发送transaction,再指定具体的sequencer。在这里需要注意的是:由于sequence不是一个component,uvm_config_db的第一个参数不能写this,而是写null,再通过get_full_name(), 得到sequence完整的hierarchy。这里使用this,指代vsqr,由于sequence的名字一般是不确定的,所以我们的第二个参数使用通配符“*”来指代。

2024-02-26 17:36:36 487 1

原创 在soc验证中,缩短通过总线配置subsys寄存器时间的方法

使用场景:在soc验证中,很多需要通过cpu通过总线路由去配制寄存器,这个过程非常耗时,特别是当subsys有很多寄存器需要配置的时候,非常痛苦。只需要将信号按照apb的时序force到寄存器的入口就可以,可以缩短99%的时间,这里的SUBSYS.PATH 就是subsys寄存器入口的hierarchy。

2023-12-15 20:04:19 221 2

原创 verilog 读取txt, bin文件的集中方式

在读取的过程中,$fgetc每次只能拿到8bit的数据,而我的bin文件数据如下,所以我需要循环读16次才能读完完整的一行数据,最后将读取的数据写入到txt文件中。就只需要修改number,并将full_name = "csdn",即可实现多文件的读取,txt也可以使用同样的方法。1) 如果是写入的,直接声明integer类型,给数值就可以写入,写入的过程中加入“\n”,进行换行。3. 如果有读取多个txt或者bin文件的需求,只需要加如下代码,前提是多个文件需要按照规则命名。

2023-11-15 17:22:08 2802 1

原创 `uvm_analysis_imp_decl()宏的使用

1. 主要解决问题:当出现analysis_imp所在的component需要接收多路数据的情况时,但write只有一个,那么该如何定义。这时就用到了宏uvm_analysis_imp_decl。3. 在my_monitor和my_model中的使用。

2023-10-28 21:31:23 3012 1

原创 gvim 的快捷使用技巧

ctrl+v模式进入到virtual block编辑模式,可以进行列编辑。

2023-07-04 16:29:47 225

空空如也

空空如也

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

TA关注的人

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