AXI4写时序在AXI Block RAM (BRAM) IP核中的应用

在本文中将展示描述了AXI从设备(slave)AXI BRAM Controller IP核与Xilinx AXI Interconnect之间的写时序关系。

Single Write

图1是一个关于32位宽度的BRAM(Block RAM)的单次写入操作的例子。这个例子展示了如何向地址0x1000h的BRAM写入数据,其中C_S_AXI_BASEADDR被设置为0xA000 0000,并且C_S_AXI_HIGHADDR允许超过4k的可寻址BRAM空间。

a97ba0f3caf44b56868ddf13e4eb1ff0.png

图1  AXI单次写事务时序图

在AXI BRAM Controller的操作中,有几个关键点需要注意:

(1)AWREADY信号

AXI BRAM Controller通常会在总线上保持AWREADY信号断言(即置高),以便在S_AXI_AWVALID和S_AXI_AWREADY信号都被断言的时钟周期内捕获地址。一旦写地址流水线(通常有两个深度)满了,从设备(slave)AXI BRAM Controller就会否定(即置低)AWREADY信号。

(2)写数据通道

同样的原则也适用于写数据通道。当数据正在写入块RAM的流水线满时,AXI BRAM Controller会否定WREADY信号。这种情况可能在AXI BRAM Controller正在处理先前的burst写数据操作时发生。

(3)ECC(Error Correction Code)

当在全数据宽度的BRAM写传输中启用ECC时,事务的时序与C_ECC = 0(即ECC被禁用)时相同。这是因为ECC的处理通常在内部进行,对外部接口的时序影响很小或没有影响。ECC通常用于检测和纠正数据在传输或存储过程中可能出现的错误。

在AXI协议中,写数据通道(W通道)上的数据确实有可能在写地址通道(AW通道)上的地址信息之前到达AXI BRAM Controller。然而,在这种情况下,AXI BRAM Controller不会立即启动写事务(即它会忽略这些数据),直到写地址通道上有了有效的地址信息供AXI BRAM Controller接受。

2 Write Burst

图2展示了一个AXI写突发(burst)操作的时序示例,该操作向32位BRAM写入四个字。在地址写通道握手阶段,它传达了突发类型为INCR(递增),突发长度为4个数据传输(AWLEN = 0011b)。写突发操作利用了AXI数据总线的所有字节通道(AWSIZE = 010b)向块RAM传输数据。图3中显示的写突发操作被设置为从BRAM地址0x1000h开始,前提是C_S_AXI_BASEADDR设计参数被设置为0xA0000000,并且C_S_AXI_HIGHADDR允许的地址空间大于4k的可寻址块RAM。

0fd7c569f08e444b91c5e655ccb0ec73.png

图2 AXI突发写时序图

在AXI写事务中,从设备(slave)不会等待写数据通道上的WVALID信号被断言后再断言写地址通道上的AWREADY信号。这种情况可能会导致死锁条件,并且是不被允许的。AXI协议要求写地址通道(AW通道)和写数据通道(W通道)之间的握手必须正确进行,以确保数据被写入正确的地址,并且不会被错误地丢弃或覆盖。

在正常的AXI写操作中,主设备(master)首先通过AW通道发送写地址和突发信息(如突发类型和长度)。从设备在接收到这些信息并准备好接受数据后,会断言AWREADY信号。一旦AWREADY信号被断言,主设备就可以开始通过W通道发送数据。数据通过W通道传输时,主设备会断言WVALID信号,而从设备在准备好接收数据时会断言WREADY信号。只有当WVALID和WREADY信号在同一时钟周期内都被断言时,数据才会被传输。

如果从设备不等待WVALID信号被断言就断言AWREADY信号,那么主设备可能会在没有准备好发送数据的情况下开始通过W通道发送数据,这可能导致数据丢失或写入错误的地址。因此,AXI协议要求从设备必须等待WVALID信号被断言后再断言WREADY信号,以确保数据的正确传输。

3 Narrow Write Bursting

图3展示了AXI BRAM Controller支持窄突发(narrow burst)操作的示例。窄突发是指主设备以小于BRAM数据宽度的数据大小进行突发传输。如果突发类型(AWBURST)被设置为INCR(递增)或WRAP(环绕),那么每个数据节拍(data beat)在AXI总线到BRAM接口的有效数据会进行旋转。AXI BRAM Controller会处理AXI上的每个数据节拍,作为对应到块RAM的数据节拍,无论有效字节通道的大小如何。

69a75fe1dc824505819720b678896200.png

图3  AXI 窄突发写时序

在这种情况下,AXI WSTRB(Write Strobe,写选通)信号会被转换为BRAM的写使能(write enable)信号。只有当BRAM地址遇到全地址(数据)宽度边界时,才会进行递增,这是由于进行了窄突发写入块RAM。

在图3中,以一个32位BRAM为例,AXI主设备请求的是一个半字(halfword,即16位)突发,包含4个数据节拍。AWSIZE被设置为001b,这表示每次突发传输的数据大小是半字。在这种设置下,BRAM Controller会将每个16位的数据节拍映射到BRAM的适当位置,并且只在遇到32位边界时才会递增BRAM地址。这意味着尽管突发操作是以16位为单位进行的,但BRAM地址的更新是以32位为单位的。

Unaligned Write Bursting

AXI BRAM Controller支持非对齐突发传输。非对齐突发传输发生在例如32位字突发大小不是从与字内存位置匹配的地址边界开始时。起始内存地址允许不是0x0h、0x4h、0x8h等。

图4所示的例子说明了一个非对齐的字突发传输,该传输包含4个数据节拍,从地址偏移量0x1002h开始(假设C_S_AXI_BASEADDR被设置为0xA000 0000,并且C_S_AXI_HIGHADDR允许超过4k的可寻址内存)。相关的时序关系如图5所示。

5a2b49acf1624d60b08f29bed9b9a87b.png

图4 AXI非对齐突发写传输

非对齐地址对应于写端口的BRAM_WE信号,以反映有效的字节通道。

在非对齐突发传输中,AXI BRAM Controller需要能够处理从非字边界开始的突发传输。也就是说,如果突发传输的起始地址不是字地址的整数倍(即不是0x0h、0x4h、0x8h等),那么传输的数据可能需要跨越多个内存位置。

AXI BRAM Controller通过检查每个数据节拍的字节使能(byte enable)或写选通(write strobe)信号来确定哪些字节是有效的,并将这些数据正确地写入BRAM。在写操作中,BRAM_WE信号用于指示哪些字节通道是活动的,并且应该被写入数据。

3a4f94480db34464a11132df981263c9.png

图5 AXI非对齐突发写时序

5 ECC Write Burst

图6展示了一个AXI写突发操作的两个数据节拍的时序。

由于需要执行读-修改-写序列以正确更新块RAM中的ECC(错误检查和纠正)校验位,所以存在额外的延迟。

b3c62f0f553b4ef985118290dadb1ebc.png

图6  带ECC的AXI写突发

6 Write Pipeline

AXI BRAM Controller IP核支持两个活动的写操作,它可以同时接收两个写地址请求(通过写地址通道AW),但数据(通过写数据通道W)需要按照地址的顺序来传输。当写地址流水线已满时,控制器会通过否定AWREADY信号来通知总线。只有当第一个流水线操作完成后,新的写传输才可以发生(这通过AWREADY信号的断言来指示)。

AXI BRAM Controller不支持写数据的交织。在写数据通道上的数据必须与写地址通道上呈现的地址(对于该数据)顺序相同。

写数据通道通过断言WREADY信号来响应写传输。当写数据通道没有因前一个事务而忙碌时,AXI BRAM Controller会接受数据。它还支持在AWVALID和AWREADY之前提前断言WREADY到WVALID,以便在地址验证之前就开始准备接收数据。

当写地址(通过写地址通道AW)有效并被AXI BRAM Controller接收时,Controller可以在同一个时钟周期内从写数据通道(W)接收数据。写地址和相应的写数据可以在连续的时钟周期内几乎同时到达,只要Controller准备好(通过WREADY信号指示)并且遵循AXI协议的时序要求。

WREADY信号是AXI BRAM Controller中用于指示接收端何时准备好接收写数据的一个信号。当WREADY被断言(即设置为高电平或逻辑真)时,发送端(如AXI Interconnect或其他AXI主设备)知道它可以在下一个时钟周期发送写数据(通过WVALID信号和WDATA总线)。

AXI BRAM Controller确保BREADY信号(用于指示接收端准备好接收从BRAM读取的数据)不会在WVALID和WREADY之前被断言。这是为了确保在数据被写入BRAM之前,任何潜在的读取操作都不会开始。这有助于防止数据冲突和不一致,并确保系统的正确性和可靠性。

图7展示了AXI BRAM Controller中写地址的流水线能力。这个示例说明了AXI BRAM Controller从AXI Interconnect看到写数据通道上的间隙时的情况。

593b859eb572447a84a2088cbb110c54.png

图7  AXI流水线突发写传输

AXI BRAM Controller确实支持连续数据流下的背靠背(back-to-back)突发写操作,这是AXI协议的一个重要特性,可以显著提高数据传输的效率和吞吐量。

当AXI Interconnect为AXI BRAM Controller提供连续的数据流时,两个流水线化的突发写操作之间在BRAM接口上没有空闲的时钟周期,即数据可以连续不断地写入BRAM,而无需等待前一个操作完成。

图8展示了四个数据节拍(data beats)的背靠背流水线化突发写操作的时序。

为了实现AXI BRAM Controller写端口的100% BRAM接口利用率,需要满足以下条件:

● 没有单个写突发

● 写突发必须大于两个数据节拍

● 写突发操作必须是INCR或WRAP突发类型

c14f6709a25641eba90904fef4785475.png

图8 AXI背靠背写突发时序

7 Delayed Write Address

在接收到有效的写地址之前,会对写数据进行节流(throttle)的行为。具体来说,这意味着在接收到下一个有效的写地址之前的一个数据节拍(data beat)之后,AXI BRAM Controller会暂停接受新的写数据。

在双端口模式下,当ECC(错误检查和纠正)功能被禁用时,AXI BRAM Controller会接收提前的WVALID和WDATA信号。这允许在写地址到达之前就开始准备写数据,从而提高了数据传输的效率。即使在这种情况下,写数据也不会在接收到有效的写地址之前被写入BRAM。

ad8bdb9452f443cba3114cea408a8c2e.png

图9 AXI延迟写地址时序

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/9700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL——变量的浮点数问题处理

新建链接,自带world数据库,里面自带city表格。 DQL #MySQL变量的浮点数问题处理 set dx3.14,dy3.25; select dxdy;#计算显示异常,会有很多00000的提示set resultdxdy; select result; 查询结果

C++青少年简明教程:C++中的常量、变量、表达式和语句

C青少年简明教程:C中的常量、变量、表达式和语句 在C编程中,常量、变量、表达式和语句是基本的编程概念。 常量(Constants):在程序中具有固定值的数据称为常量。常量可以是字面值,如整数、浮点数、字符或…

【挑战30天首通《谷粒商城》】-【第一天】【10 番外篇】 解决docker 仓库无法访问 + MobaXterm连接VirtualBox虚拟机

文章目录 课程介绍 1、解决docker 仓库无法访问 2、 MobaXterm连接VirtualBox虚拟机 Stage 1:下载MobaXterm选择适合你的版本 Stage 2:vagrant ssh 连接,开启ssh访问 Stage 2-1:su获取root账号权限,输入密码(默认vagra…

【Web】CTFSHOW 七夕杯 题解

目录 web签到 easy_calc easy_cmd web签到 CTF中字符长度限制下的命令执行 rce(7字符5字符4字符)汇总_ctf中字符长度限制下的命令执行 5个字符-CSDN博客7长度限制直接梭了 也可以打临时文件RCE import requestsurl "http://4ae13f1e-8e42-4afa-a6a6-1076acd08211.c…

C++ Builder XE EnumWindowsProc遍历所有窗口的名称

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { // 这里可以添加你的处理逻辑 // 例如,将句柄添加到列表中或者其他操作 // 这里我们仅仅输出到调试窗口 OutputDebugString(L"枚举窗口句柄: "); char windowHandle[10];…

ICode国际青少年编程竞赛- Python-4级训练场-while语句入门

ICode国际青少年编程竞赛- Python-4级训练场-while语句入门 1、 while Flyer.disappear():wait() Dev.step(2)2、 Dev.step(1) while Flyer.disappear():wait() Dev.step(5)3、 while Flyer[0].disappear():wait() Dev.step(3) Dev.step(-1) while Flyer[0].disappear():…

准实时数仓搭建指南:以仓储式会员商超为模拟场景

在电商和新零售持续冲击传统零售商超的今天,仓储式会员店反而成功逃脱曾经的“水土不服”预测,业绩一路向好。与此同时,随着人工智能、大数据、智慧物流等技术的不断革新,零售批发的消费场景也进一步拓展,对数据分析的…

RERCS系统-WDA+BOPF框架实战例子 PART 1-新建List UIBB(列表组件)并分配Feeder Class和Node Element

需求背景: 已有的项目主数据功能,新增一个列表UIBB显示主数据额外的关联数据明细。 1、Fiori页面通过右键-技术帮助打开对应的组件配置; 2、双击对应的组件配置,调整对应的页面新建UIBB; 3、填写对应的UIBB属性字段&a…

doris 启动be报错

doris版本是1.2.4 java版本是:1.8 刚开始我以为是版本不兼容问题,后面发现思路错了,版本是兼容的,报以下错我的原因是操作系统没有达到安装要求 以下是博主在部署doris x64(avx2)版本中遇到的小bug 在大家使用doris的时候应该…

OpenNJet,够轻更强云原生应用引擎

前言: 在正式介绍OpenNJet之前,我们先来看看它的技术架构,如下图所示,OpenNJet正是NGINX的Pro版,在100%兼容NGINX基础上,新增了动态配置加载、主动式健康检测、集群高可用、声明式API等多种强大功能。 NGIN…

2024.05.10作业

TCP服务器 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QList> #include <QMessageBox> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class Widget; …

【神器来袭】快速解放双手,朋友圈自动转发工具,告别繁琐操作!

朋友圈作为一个重要的营销推广渠道&#xff0c;如果能实现自动转发&#xff0c;那对于很多企业或个人来说&#xff0c;是极好的。下面&#xff0c;就给大家分享一个实用且便捷的朋友圈运营工具——个微管理系统&#xff0c;让大家都能快速推广。 1、多账号登录&#xff0c;定时…

适用于 macOS 的最佳独立 HBO Max 客户端

适用于 macOS 的最佳独立 HBO Max 应用程序。不再在浏览器选项卡之间切换。只需直接从 Dock 启动 Clicker for HBO Max 即可开始狂欢。 HBO Max 客户端 Clicker for HBO Max 下载 Clicker for HBO Max mac版安装教程 软件下载完成后&#xff0c;双击pkg根据提示进行安装 Clic…

ssh远程免密登录

ssh远程连接分为五个阶段 版本号协商阶段密钥和算法协商阶段认证阶段会话请求阶段交互会话阶段 而上图的SessionKey即是在阶段2&#xff1a;密钥和算法协商阶段&#xff0c;服务器端和客户端利用DH交换&#xff08;Diffie-Hellman Exchange&#xff09;算法、主机密钥对等参数…

编译适配纯鸿蒙系统的ijkplayer中的ffmpeg库

目前bilibili官方的ijkplayer播放器&#xff0c;是只适配Android和IOS系统的。而华为接下来即将发布纯harmony系统&#xff0c;是否有基于harmony系统的ijkplayer可以使用呢&#xff1f; 鸿蒙版ijkplayer播放器是哪个&#xff0c;如何使用&#xff0c;这个问题&#xff0c;大家…

暴力法解决最近对问题和凸包问题-实现可视化

目录 最近对问题 凸包问题 最近对问题 顾名思义就是采用蛮力法求出所有点之间的距离&#xff0c;然后进行比较找出第一个最近对&#xff0c;一个一个进行比较。 大概思路就是如图&#xff08;每个圈代表一个数对&#xff09; 第一个和其他四个比较 第二个和其他三个比较 …

新版文件同步工具(Python编写,其中同时加入了多进程计算MD5、多线程复制大文件、多协程复制小文件、彩色输出消息、日志功能)

两个月前&#xff0c;接到一个粉丝的要求&#xff0c;说希望在我之前编写的一个python编写的文件同步脚本(Python编写的简易文件同步工具(已解决大文件同步时内存溢出问题)https://blog.csdn.net/donglxd/article/details/131225175)上加入多线程复制文件的功能&#xff0c;前段…

英语学习笔记8——What‘s your job?

What’s your job? 你是做什么工作的&#xff1f; 词汇 Vocabulary policeman 男警察 policewoman 女警察 police n. 警力 集合名词&#xff0c;永表复数 西方国家警察管的事很多。交警&#xff0c;刑警&#xff0c;武警一般不分开。 taxi driver 出租车司机 taxi / cab n.…

空间复杂度

前言 通过上一节的学习&#xff0c;我们知道了衡量一个算法是否高效的标准就是复杂度&#xff0c;我们已经学习了时间复杂度&#xff0c;那么本节我们就了解一下空间复杂度的相关知识&#xff0c;那么我们废话不多说&#xff0c;正式进入今天的学习 空间复杂度 空间复杂度也是…

python爬虫(三)之虎嗅网汽车文章爬虫

python爬虫&#xff08;三&#xff09;之虎嗅网汽车文章爬虫 闲来没事&#xff0c;闲鱼上有个好兄弟要我从虎嗅网上抓一些汽车文章的爬虫&#xff0c;于是大力出奇迹&#xff0c;我写了一个python程序&#xff0c;将这个网站上所有的汽车文章全部抓取下来了&#xff0c;存储到…