AHB VIP Example 的tb_ahb_svt_uvm_basic_ral_sys中关于slave和master接口连接的问题

1 篇文章 0 订阅

AHB 的tb_ahb_svt_uvm_basic_ral_sys中关于slave和master接口连接的问题(这里代码不完整太多没有截完)

一、原始使用方法

hdl_interconnect中文件的DUT的部分内容是:

DUT外面还做了封装,封装成了ahb_svt_dut_sv_wrapper.sv,部分代码如下:

此DUT的作用是:

a.接收来自master的数据(这部分数据是传给slave的),传送给AHB bus,再由AHB bus传送给slave的interface。

b.接收自slave的数据,传送给AHB bus(AHB总线),再由AHB bus传送给master的interface。

注意顶层定义的是svt_ahb_if,其中包含有两个接口,一个是master_if,一个是slave_if。

top的部分代码:

svt_ahb_if部分代码,注意master_if和slave_if中的*_bus,最终会赋值给interface内部的*,比如hrdata_bus会赋值给master的hrdata,haddr_bus会赋值给salve的haddr(这里宏SVT_AHB_DISABLE_IMPLICIT_BUS_CONNECTION是没有定义的):

这里跑的ral_reg_write_read_test波形如下:

二、不使用ahb bus做中间转换的使用方法

如果我们还是定义svt_ahb_if,里面包含master_if和slave_if,但是不使用ahb bus做中间转换,那么顶层以及hdl_interconnnect中文件应该怎么写呢?即是否可以直接将master和slave的interface直接相连?答案,是可以的。(这样的情况不管怎样需要定义SVT_AHB_DISABLE_IMPLICIT_BUS_CONNECTION宏,否则会报出多驱动问题)

1.我们只需要修改ahb_svt_dut_sv_wrapper.sv,将ahb_if.*_bus换成对应的master或slave的接口,修改后的代码如下:

2.定义宏:

3.注意salve interface中有两个hready信号,其中一个hready是slave自己发出的,而hready_in则是slave要接收的(协议里面的interconnect给的,interconnect也会发送此signal给master),在原始方法中hready_bus最中会赋值给slave的hready_in和master的hready。这里由于没有使用ahb bus所以需要自己给slave的hready_in赋值。

dut和ahb_svt_dut_sv_wrapper.sv需要增加对slave的hready_in的赋值。修改ahb_svt_dut_sv_wrapper.sv和dut代码如下:

这里跑出来波形和上面是一样的。

三、

如果我们不定义svt_ahb_if,而只定义master_if和slave_if,那么顶层以及hdl_interconnnect中文件应该怎么写呢?(这种方式是最好理解的,但是并不是最好用的)

可以是可以,但是很麻烦,就上面的AHB给的例子代码会有很多要修改的地方。可能master和slave都需单独定义,但是这样vip env包好的很多组件都不能直接调用。(自己的观点)

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值