异步FIFO的UVM验证(VCS+Verdi 附源代码)

6 篇文章 7 订阅


1.DUT 设计

本设计框图及信号端口如下,同经典asyn_fifo设计。
在这里插入图片描述

2.UVM 验证

2.1 测试功能点

在这里插入图片描述

2.2 环境搭建

验证框图大致为:
在这里插入图片描述

2.2 功能仿真测试

2.2.1 复位测试

2.2.1.1 写复位

在这里插入图片描述
wrst_n 复位信号拉低,winc 和 wdata 随即拉低,wptr指向0。功能正常。
此测试共发送20笔write transaction,因为复位丢失的数据会在复位释放后,继续发送,比如上述的96,数据准备好了半个周期被复位信号打断,在下个clk的上升沿,并不能写入RAM中。在driver添加flag 实现不丢失包的发送。(不知道是不是多次一举)

2.2.1.2 读复位

在这里插入图片描述
同样,读操作,在读复位信号拉低时,rinc 拉低,共发送10笔,由于复位信号打断的会重新驱动。

2.2.2 读写测试

2.2.2.1 带有复位的读写测试

sequence激励代码:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

复位之后,仍能正常工作。并且scoreboard中没有报错,共接收到15笔 write transaction,10笔 read transaction(实际发送了3+10),少了三笔 读空时候的invalid read transaction。

2.2.3 写满及读空 异常测试

1 写满
在这里插入图片描述
连续发送20笔write transaction。从1处开始,DUT write进去第一个数据,mem[0] = 1b… ,发送完第16个transaction后,wptr指向0x10,wfull立即拉高。指针保持不变。第17 18 19 20笔数据并没有写进去。发送完毕后,winc拉低。符合设计。
2. 读空
在这里插入图片描述
连续读20次。从1处,DUT 开始read,rdata被驱动。读完第16笔之后,rptr指向了0x18,rempty拉高。第17 18 19 20笔,dut没有进行操作,rdata无效。
读出的数据 和 上面写入的数据一致。
在这里插入图片描述

2.2.3 时钟测试

2.2.3.1 写快读满

在这里插入图片描述
虚空

2.2.3.2 读快写慢

在这里插入图片描述

  • 30
    点赞
  • 260
    收藏
    觉得还不错? 一键收藏
  • 62
    评论
UVM验证是一种基于SystemVerilog的硬件验证方法,广泛应用于半导体行业。它提供了一套强大的验证框架,可以帮助工程师有效地进行验证工作。 异步FIFO验证UVM验证中的一个重要部分,用于验证异步First-In-First-Out(FIFO)电路。异步FIFO电路在大多数存储器系统中被广泛使用,因此验证其功能和性能非常重要。 在异步FIFO验证中,需要编写UVM验证环境和测试用例,以验证FIFO电路的功能和时序。首先,可以使用UVM的类来建立一个FIFO模型,包括读写指针、写入和读出逻辑等。然后,可以编写Constrained Random测试用例,以测试FIFO的各种情况,例如空FIFO、满FIFO和部分写入/读出的情况。验证环境会控制测试用例的生成和执行,同时收集和分析验证结果。 在异步FIFO验证中,还需处理时序相关的问题。由于读写指针的异步性质,可能会出现读指针追赶写指针或写指针追赶读指针的情况。为了验证这些情况,可以引入时序检查和约束,以确保FIFO电路在各种时序条件下都能正常工作。 总结来说,UVM验证是一种基于SystemVerilog的硬件验证方法,可以帮助工程师进行有效的验证工作。在异步FIFO验证中,需要建立UVM验证环境和编写测试用例,以验证异步FIFO电路的功能和时序。该验证过程涉及到建模、生成测试用例和进行时序验证等步骤,以确保FIFO电路能够正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 62
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值