知乎用户ljgibbs授权转发

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

声明1:部分时序图以及部分语句来自 ARM AMBA 官方手册

(有的时候感觉手册写得太好了,忍不住就直接翻译了。。)

声明2:AXI 总线是 ARM 公司的知识产权

备注

  • 下载手册可以到ARM官网搜AMBA ,需要注册 ARM 账号。官方手册developer.arm.com

  • 百度文库应该有中文翻译版本。

VALID/READY 握手机制

AXI 总线共有 5 个独立的通道,分别为写地址、写数据、写回应、读地址、读数据通道。5 条通道相互独立,有一些细小的差别,但共同使用一套握手机制:VALID/READY 机制,来实现信息的传递。

VALID/READY 机制这个赛高啊,这个好啊,ARM 的手册上这么夸:

作为一种双向流控机制,VALID/READY 机制可以使发送接收双方都有能力控制传输速率。

在握手机制中,通信双方分别扮演发送方(Source)和接收方(Destination),两者的操作(技能)并不相同。

发送方置高 VALID 信号表示发送方已经将数据,地址或者控制信息已经就绪,并保持于消息总线上。

接收方置高 READY 信号表示接收方已经做好接收的准备。

当双方的 VALID/READY 信号同时为高,在时钟 ACLK 上升沿,完成一次数据传输。所有数据传输完毕后,双方同时置低自己的信号。

所谓的双向流控机制,指的是发送方通过置起 VALID 信号控制发送的时机与速度,接收方也可以通过 READY 信号的置起与否控制接收速度。

发送方拥有传输的主动权,但接收方在不具备接收能力时,也能够置低信号停止传输,反压发送方。

VALID/READY 的三种情况

VALID/READY 信号按照到达的先后顺序可以分为 3 种情况:

1.VALID 信号先到达

发送方 VALID 信号早早就到了,这时还不到 T2 时刻,并带来了新鲜的数据(数据通道),地址或者控制信息(地址通道),总之是信息(Information)。

但过了 T2 也没见到接收方的 READY 信号。原来是接收方还忙着,可能上一次的数据还没存完,还堵在数据通路上,忙过了 T2 才来。

好吧,那也行,T3 时刻传输完成。

在这种情况下,接收方通过 READY 信号控制了传输速度,反压了发送速度。

协议规定在这种情况下,VALID 信号一旦置起就不能置低,直到完成握手(handshake occurs),至少传输一周期数据。

在设计接收方逻辑时,检测到 VALID 信号置起,如果系统正忙,完全可以让发送方等待,发送方在完成传输之前都不会置低 VALID 信号,不需要考虑发送方撤销传输的可能。

协议另外规定:发送方不能通过等待接收方 READY 信号来确定置起 VALID 信号的时机

这句中文阅读理解有点难,原文为:

A source is not permitted to wait until READY is asserted before asserting VALID.

笔者个人理解,READY 信号可能先到达,如下图的情况。但是设计发送方逻辑时,不能将 READY 信号作为置高 VALID 逻辑的条件,比如将 READY 信号通过组合逻辑生成 VALID 信号。

换句话说,发送方准备发送,置起 VALID 信号是完全主动与独立的过程。接收方 READY 信号按照协议可以依赖发送方 VALID 信号,但如果此时发送方也依赖接收方信号,就会造成死锁的情况,所以协议在这里强调了 VALID 信号的主动性。

module axi_src
...
//assign VALID = SRC_CONDITION && READY;//NOT permitted and may cause deadlock
assign VALID = SRC_CONDITION;//permitted
...
endmodulemodule axi_dst
...
assign READY = CONDITION && VALID;//permitted
...
endmodule

2.READY 信号先到达

READY 信号很自由,可以等待 VALID 信号到来再做响应,但也完全可以在 VALID 信号到来前就置高,表示接收端已经做好准备了。

而且,READY 信号与 VALID 不同,接收方可以置起 READY 之后发现:其实我好像还挺忙,然后置低 READY 信号。只要此时 VALID 信号没有置起,这种操作是完全可以。

3.同时到达

同时到达就很简单,等到下一个时钟上升沿 T2,传输就这么轻松愉快地在一个时钟周期里完成了。

实现细节

本文的最后讨论一个协议的实现细节。如果读者仅仅想了解 AXI 协议的使用,那么每篇文章的实现细节章节可以跳过。这个章节面向有实现 AXI 协议需求的读者。

前文我们讨论过, READY 信号原则上由接收方自身的接收状况以及 VALID 信号控制。(或者仅由接收方自身的接收状况决定)协议中没有规定 READY 信号的默认状态,即未进行传输时的电平状态(default value)。

协议建议 AW/AR READY 信号(这里 AW/AR 指的是读写地址通道的 READY 信号,将在第二章中正式引入)的默认电平为高电平。若默认电平为低,则每次传输至少需要 2 个周期才能完成,第一个周期置高 VALID 信号,第二个周期从机才会置高 READY 信号。相当于每次传输增加 1 个周期时间开销,这在某些情况下会对传输效率有较大的影响。

深入AXI4总线- [一] 握手机制相关推荐

  1. 深入 AXI4 总线(一)握手机制

    VALID/READY 握手机制 AXI 总线共有 5 个独立的通道,分别为写地址,写数据,写回应,读地址,读数据通道.5 条通道相互独立,有一些细小的差别,但共同使用一套握手机制:VALID/REA ...

  2. AXI4协议学习:架构、信号定义、工作时序和握手机制

    目录 1 AXI是什么? 2 AXI怎么工作? 3 AXI协议 3.1 架构 3.1.1 通道定义 3.1.2 接口与互连(interconnect) 3.1.3 Register slices 3. ...

  3. 数字IC验证:总线握手协议(VALID/READY握手机制)

    写在前面: 最近学习总线协议,涉及握手,因此整理本文.若内容有疑惑或错误之处,请在评论区指出,感谢! 文章目录 1 什么是"握手"? 2 VALID/READY握手机制 3 Cas ...

  4. AXI_02 AXI4总线简介(协议、时序)

    本篇文章内容在各大资料上都可找到,内容摘自专业书籍,这里作为该系列文章的原理篇. 由于该系列文章阅读有顺序性,所以请跳转至该系列文章第一篇从头开始阅读,并按照文章末尾指示按顺序阅读,否则会云里雾里,传 ...

  5. axi时序图_深入 AXI4总线(E3)实战:制作一个 AXI 接口 IP

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

  6. axi4协议的乱序_一篇文章读懂读透FPGA AXI4 总线协议

    新一代FPGA中采用的基本都是AXI4总线协议,例如与slaver侧的DMA或DDR等通信.这篇讲AXI4的文章感觉讲的很清楚. 0.绪论AXI是高级扩展接口,在AMBA3.0中提出,AMBA4.0将 ...

  7. 带你快速入门AXI4总线--AXI4-Stream篇(1)----AXI4-Stream总线

    写在前面 随着对XILINX器件使用的深入,发现越来越多的IP都选配了AXI4的接口.这使得只要学会了AXI4总线的使用,基本上就能对XILINX IP的使用做到简单的上手.所以学会AXI4总线,对X ...

  8. FPGA控制DDR读写(AXI4总线接口)

    FPGA控制DDR读写(AXI4总线接口) 范围 本文适用于FPGA控制DDR读写 MIG核 MIG信号注释 DDR型号为 MT41K256M16TW-107 下面是MIG IP核的相关信号 图2.1 ...

  9. 深入 AXI4总线 (四):RAM 读取实战

    光说不练,云玩家.这篇文章中我们就通过访问一个 AXI4 接口的 RAM 的实际操作,加深我们对 AXI4 总线的理解. 我们的实验平台是 ISE 14.7 以及 modelsim 10.2, RAM ...

最新文章

  1. ubuntu 14.04服务器上使用nginx搭建wordpress博客详解
  2. vue 修改div宽度_vue 拖动调整左右两侧div的宽度
  3. javase-NIO
  4. VTK:PolyData之PointsProjectedHull
  5. 利用Scala特征(trait)的堆叠操作特性进行切面编程
  6. SharePoint2007 配置MOSS基于AD的Forms验证
  7. linux vi刷新页面,vim的神级配置 - bubifengyun的个人页面 - OSCHINA - 中文开源技术交流社区...
  8. 深入了解Java的SPI机制
  9. Firefox 和 Chrome 性能测试对比
  10. ROW_NUMBER
  11. IE下easyui 缓存问题
  12. micropython开发idethonny_esp32 micropython using uPycraft IDE
  13. OCP考试题库(精准无比)
  14. Java爬虫学习——实例:获取起点中文网站小说并保存成txt文件
  15. c++质数判定及输出质数表
  16. NPDP是什么考试?产品经理必知
  17. 0x80004005错误代码解决方法,哪种方法快捷有效?
  18. 线结构光传感器的标定
  19. larval PHP artisan命令
  20. 航天软件通过注册:年营收15亿 航天科技控制63.8%股权

热门文章

  1. 【无标题】百度地图的基本使用
  2. 【数据结构】顺序表详解 | 从零开始步步解读 | 画图理解并调试分析
  3. 多级评论回复功能(纯前端,未连数据库)
  4. 杨超越杯编程大赛上热搜:不懂技术真不敢追星
  5. 每日持续签到,累计签到,送积分
  6. 2006-09-28 墨子的双眼皮
  7. 一个利用html5的图片裁剪功能(已解决ios压扁缩放等bug)
  8. Macos安装lightgbm时遇到的坑
  9. crt和zoc7的快捷键记录
  10. 音乐 组件 (音频, 视频)