- 博客(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
原创 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
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅