0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AXI VIP 中产生传输事务的基本方法

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-08-29 14:58 次阅读

本系列我想深入探寻 AXI4 总线。不过事情总是这样,不能我说想深入就深入。当前我对 AXI总线的理解尚谈不上深入。但我希望通过一系列文章,让读者能和我一起深入探寻 AXI4。

欢迎来到深入 AXI4 总线的实战篇,系列第二篇文章中,我们将首先了解调用 AXI VIP 产生激励与响应的方法,并完成一个小目标:实现三种情况下的握手信号

关于平台移植

本文的实战在第一篇的示例工程上,新建 tb 来实现我们的功能。新建 tb 中的逻辑由 demo tb 的内容搬运简化而来。

本来计划新建一个工程,但是阅读 PG267 (IP 核的产品文档)发现,当前 Vivado 对于该 IP 的支持还比较弱,需要将 IP 的实例名以及层次路径硬编码至 tb 中,如果新建工程还比较麻烦。所以本文暂时还是在 example 的基础上展开 。

想要重新搭建工程的读者请注意阅读 demo tb 开头的说明,或者 PG267 第六章中的内容。

本文的场景为主机与从机之间通过 Pass-through (以后叫 ta 中间机?)进行通信。从机选用 mem 模式,有自己的存储模型,即使用 mem_stimulus.sv 作为激励。关于存储模型,我们将在后续的文章中讨论。

我们的改动在于主机的激励部分,以原先的 mst_stimulus.sv 为基础,构建我们自己的主机激励,改动后的 testbench 结构如下图所示。

2fb3fb5e-25a9-11ed-ba43-dac502259ad0.png

是的,新的激励加上了 headbig 字段,这来自于 深入 AXI4 总线 系列文章的英文名:Headbig AXI4。

VIP API 基本调用方式

PG 文档中,Xilinx 表示 VIP 基于 SystemVerilog 语言开发,同时在 API 的设计上,命名与数据结构的设计均参考了 UVM 框架,便于 VIP 在验证系统中的集成。由于本文的重点不在于 UVM 或者 API 的设计,因此仅跟着 demo 以及 PG 中的 API 调用流程过一遍。

主机 master

首先来看主机,定义于 axi_vip_master_mst_stimulus.sv 中

为主机 master ip 创建一个 agent 对象,传入 master ip 的层级路径,后续通过该 agent 控制主机 ip

agent = new("master vip agent",DUT.ex_design.axi_vip_mst.inst.IF);

通过 agent 启动主机

agent.start_master();

在 fork ...join 并发块中同时发出主机的读写传输事务。

fork
 begin
  //调用写传输事务 API
 end
 
 begin
  //调用读传输事务 API
 end
join

产生两者的 API 结构相似,我们以写传输事务为例。例程中依次使用了 3 种 API ,分别产生

完全随机化的写传输事务

multiple_write_transaction_full_rand ("single write",1);

定制化的写传输事务

single_write_transaction_api("single write with api",
                   .id(mtestWID),
                   .addr(mtestWADDR),
                   .len(mtestWBurstLength), 
                   .size(mtestWDataSize),
                   .burst(mtestWBurstType),
                   .wuser(mtestWUSER),
                   .awuser(mtestAWUSER), 
                   .data(mtestWData)
                   );

部分随机化的写传输事务

multiple_write_transaction_partial_rand(相关参数);

我们常说,不想知道 API 函数之下发生了什么的程序员不是好程序员,IC 工程师同样如是。以较简单的定制化写传输事务函数为例,所谓函数实质上是一个 sv task,以下是 task 中的主要内容:

  axi_transaction                wr_trans;
  wr_trans = agent.wr_driver.create_transaction(name);
  wr_trans.set_write_cmd(addr,burst,id,len,size);
  wr_trans.set_prot(prot);
  //...
  wr_trans.set_data_block(data);
  agent.wr_driver.send(wr_trans); 

首先声明一个 axi 传输事务对象,然后在主机 ip 的 agent 下建立传输事务。

通过 API 函数设定写命令信息,设定传输属性以及待传输的数据块。数据块的数据类型为

bit [4 * 1024 * 8 - 1:0]

从机 slave

接下来,我们看一下从机的相关流程,定义于 axi_vip_master_mem_stimulus.sv 中。

同样为从机创建并启动相应 agent,此处与主机相似不表。

在 demo 中构造了一个虚拟数据作为后续对主机读数据的回应,因为本文的主要工作是得到握手信息的波形,因此并不会实际存储主机写入的数据,而是在主机读取任意地址时,返回这个虚拟数据。

最后,从机调用 API 产生 wready 信号应答

  task user_gen_wready();
   axi_ready_gen              wready_gen;
   wready_gen = agent.wr_driver.create_ready("wready");
   wready_gen.set_ready_policy(XIL_AXI_READY_GEN_OSC);
   wready_gen.set_low_time(1);
   wready_gen.set_high_time(2);
   agent.wr_driver.send_wready(wready_gen);
  endtask

此处表示 wready 信号在从机空闲时周期性生成,有效时间为 2/3,我们可以在后续的波形中看到。

握手波形

我们对主机的激励代码进行修改,仅保留单次定制化的读写传输事务,地址为 0x0,突发长度为 0。在波形中我们得到了三种情况下的握手信号。

(1)VALID 信号等待 READY 信号

2fc32c3c-25a9-11ed-ba43-dac502259ad0.png

在 tb 中主机并行地启动读写传输事务,AR/W VALID 同时置高,在等待从机给出 READY 信号后完成地址与控制信号的传输,此时地址为 0x0.

(2)READY 信号等待 VALID 信号

2fd8e180-25a9-11ed-ba43-dac502259ad0.png

主机在发出读传输事务后,置高 RREADY 信号等待接收从机返回的读数据。在从机置高 RVALID 后,读传输事务完成。

(3)READY 与 VALID 信号同时置起

在设置从机的 READY 信号类型时,我们设置为周期性置高 READY,从下图中可以看到,READY 信号在送出 2 个周期高电平后置低 1 个周期。

2fe625e8-25a9-11ed-ba43-dac502259ad0.png

在这个场景中,写数据通道中的 WREADY 信号正好与 WVALID 信号同时置起,解锁了最后三种握手姿势中的最后一种,OK 本文实战篇收工了。

结语

本文首先介绍了 AXI VIP 中产生传输事务的基本方法。基于 demo 修改了一个简单纯粹的例子,并基于这个例子观察到了握手信号。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6509

    浏览量

    87552
  • 存储
    +关注

    关注

    12

    文章

    3845

    浏览量

    84639
  • 编码
    +关注

    关注

    6

    文章

    834

    浏览量

    54452
  • AXI总线
    +关注

    关注

    0

    文章

    65

    浏览量

    14154

原文标题:深入AXI4 总线实战:Hello AXI handshake

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    AXI VIP设计示例 AXI接口传输分析

    赛灵思 AXI Verification IP (AXI VIP) 是支持用户对 AXI4 和 AXI4-Lite 进行仿真的 IP。它还可
    发表于 07-08 09:24 1316次阅读

    如何将AXI VIP添加到Vivado工程中

    在这篇新博文中,我们来聊一聊如何将 AXI VIP 添加到 Vivado 工程中,并对 AXI4-Lite 接口进行仿真。随后,我们将在仿真波形窗口中讲解用于AXI4-Lite
    发表于 07-08 09:27 1711次阅读

    如何使用AXI VIPAXI4(Full)主接口中执行验证和查找错误

    AXI 基础第 2 讲 一文中,曾提到赛灵思 Verification IP (AXI VIP) 可用作为 AXI 协议检查工具。在本次第4讲中,我们将来了解下如何使用它在
    发表于 07-08 09:31 2065次阅读

    创建AXI Sniffer IP以在Vivado IP Integrator中使用教程

    在某些情况下,通过嗅探 AXI 接口来分析其中正在发生的传输事务是很有用的。在本文中,我将为大家演示如何创建基本 AXI4-Lite Sniffer IP 以对特定地址上正在发生的读写
    发表于 07-08 09:35 813次阅读

    AXI VIP当作master时如何使用

    AXI VIP当作master时如何使用。   新建Vivado工程,并新建block design,命名为:axi_demo 新建axi vip
    的头像 发表于 07-27 09:19 675次阅读
    <b class='flag-5'>AXI</b> <b class='flag-5'>VIP</b>当作master时如何使用

    高级可扩展接口(AXI)简介

    的设计理念相似,但使用多个专用通道进行读写。像它的前身一样,AXI是基于突发的,并且在交换数据之前使用类似的地址和控制阶段。AXI还包括许多新功能,包括乱序事务,未对齐的数据传输,高速
    发表于 09-28 10:14

    ARM系列 -- AXI协议资料汇总(一)

    地址通道中,主机(master)是发送方,而从机(slave)是接收方;在读数据通道中,主机是接收方,从机是发送方。3、AXI协议传输事务的结构了解完通道握手的依赖关系,我们再看看传输
    发表于 04-08 09:34

    ARM系列 -- AXI协议资料汇总(二)

    1、AXI协议用AxCACHE来控制事务属性来看看事务属性(Transaction Attributes),主要是对cache,buffer和memory controller的规定。按照协议,从机
    发表于 04-08 09:49

    如何使用Xilinx AXI VIP对自己的设计搭建仿真验证环境的方法

    接口进行仿真验证),提前规避和发现一些不满足AXI总线规范的设计问题。本文就跟大家分享如何使用Xilinx AXI VIP对自己的设计搭建仿真验证环境的方法。本文参考的Xilinx官方
    发表于 10-09 16:08

    如何创建基本AXI4-Lite Sniffer IP以对特定地址上正在发生的读写传输事务进行计数

    这将创建一个附带 BD 的 Vivado 工程,此 BD 包含 AXI VIP (设置为 AXI4-Lite 主接口) 和 AXI GPIO IP。这与我们在
    的头像 发表于 04-30 16:24 2097次阅读
    如何创建基本<b class='flag-5'>AXI</b>4-Lite Sniffer IP以对特定地址上正在发生的读写<b class='flag-5'>传输</b><b class='flag-5'>事务</b>进行计数

    使用AXI VIP的几个关键步骤及常见功能

    接口进行仿真验证),提前规避和发现一些不满足AXI总线规范的设计问题。本文就跟大家分享如何使用Xilinx AXI VIP对自己的设计搭建仿真验证环境的方法
    的头像 发表于 10-08 16:07 4022次阅读

    一些高质量的AMBA(APB/AHB/AXI) VIP分享

    关于VIP的好处,估计就不用我安利了,引用最近S家的一句广告语,“拥有VIP,无惧芯片设计挑战”。而在当今的芯片领域,用的最多的可能还是标准总线APB/AHB/AXI等。提到VIP,估
    的头像 发表于 12-06 14:58 1142次阅读

    AXI协议的几个关键特性

    AXI 协议有几个关键特性,旨在改善数据传输事务的带宽和延迟
    的头像 发表于 05-06 09:49 761次阅读

    AXI VIP当作master时如何使用?

    AXI接口虽然经常使用,很多同学可能并不清楚Vivado里面也集成了AXI的Verification IP,可以当做AXI的master、pass through和slave,本次内容我们看下
    的头像 发表于 07-27 09:16 900次阅读
    <b class='flag-5'>AXI</b> <b class='flag-5'>VIP</b>当作master时如何使用?

    AXI传输数据的过程

    AXI-Stream,其中AXI-Lite和AXI-Full都是基于memory map的形式实现数据传输(即包括地址总线),而AXI-St
    的头像 发表于 10-31 15:37 454次阅读
    <b class='flag-5'>AXI</b><b class='flag-5'>传输</b>数据的过程