(UVM ic验证)AHB master VIP 实现二级流水线传输

AHB master VIP 二级流水线传输的实现分为下面几个部分:

        1、trans的获取与缓存:在driver中实现对trans的get并且进行缓存,由于AHB实现的是二级流水线,因此trans的缓存队列深度为2。

        2、控制信号驱动:在上一个trans的控制信号发送结束时,对trans缓存队列进行pop_front并驱动该trans的控制信号,并通过trans_count++的方式,告知数据信号驱动部分在下一个时钟可以进行数据的驱动,同时将其缓存进入“待完成”队列,“待完成”队列的深度同样为2。

        3、数据信号的驱动:由于数据的驱动需要在控制信号的驱动下一周期进行,因此对trans_count的数值进行判断后进行驱动,当trans_count大于0时,代表先前已经有控制信号驱动,可以驱动数据信号。

        4、trans完成判断:通过对ahb总线上的hready等信号进行判断是否有trans完成,若存在完成的trans则将“待完成”队列进行一次pop_front,并返回rsp。

具体代码如下:

其中的驱动函数中通过事件驱动,首先进行trans完成判断,然后进行数据驱动,最后进行控制驱动,由于在控制驱动之后数据才会进行驱动,因此数据会比控制晚一拍。

1、trans的获取与缓存

其中trans-queue是对trans的第一步缓存。

2、控制信号驱动

push_trans_control与push_trans_data分别用于“待完成”控制与数据的缓存,在存入队列的同时也进行控制信号的驱动。并将transcount++以表示数据信号可以驱动。

 3、数据信号的驱动

对transcount进行判断并驱动数据信号。

4、trans完成判断

通过对hready信号以及“待完成”队列数量判断当前clk是否有trans完成了控制与数据的传输,当判断完成时,对“待完成”队列进行pop front并返回rsp。

5、sequence代码:

  • 1
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值