首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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宏,否则会报出多驱动问题)

我们只需要修改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包好的很多组件都不能直接调用。(自己的观点)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230311A05QUP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券