axi时序图_(AXI)握手协议(pvld/prdy或者valid-ready)中ready打拍技巧

本文探讨了在AXI协议中优化ready时序的方法,通过将问题分解为两个接口并引入FIFO,解决了ready打拍的挑战。详细讨论了FIFO的深度、无气泡传输和FIFO穿越等概念,提供了实现ready时序优化的方案。
摘要由CSDN通过智能技术生成

内容提要

  • ready打拍的问题
  • 用FIFO的思路去解决
  • 用Buffer的思路去解决

问题提出:ready时序如何优化?

在valid/ready 握手协议中,valid 与 data的时序优化比较容易理解,(不熟悉valid/ready协议或者valid打拍方法的)大家可以参考上次推送(握手协议(pvld/prdy或者valid-ready或AXI)中Valid及data打拍技巧)。 但是有时候,关键路径是在ready信号上,如何对ready信号打拍呢?

首先将把目标设计想象成一个黑盒子,如图1所示,我们的目标是将READY_DOWN通过打拍的方法获得时序优化。

201fbe35b184ef36760d33cbe8fa8670.png

(图1)

尝试直接对ready打一拍

READY_UP <= READY_DOWN;
VALID_DOWN = valid_up;

(仅示例,非verilog代码。下同)

这样是行不通的。

一个简单的例子(case 1)就是你让READY_DOWN像一个时钟一个,间隔一个cycle起来一次,那么VALID_UP && READY_UP 与 VALID_DOWN && READY_DOWN无法同步,数据无法传输下去。

思路:将其分解成两个interfaces

将ready打拍的逻辑想象成一个黑盒子,去分析这个黑盒子的设计,分为up interface 和down interface将问题细化:

  • up interface 有VALID_UP, DATA_UP, READY_UP
  • down interface 有VALID_DOWN, DATA_DOWN, READY_DOWN 可以总结成下面的样子:
READY_UP <= READY_DOWN; //or READY_UP = function(READY_DOWN_next);
transfer_up = VALID_UP && READY_UP;
transfer_down = VALID_DOWN && READY_DOWN;

如果去解决刚才例子(case 1),那么这个黑盒子:

当READY_UP为高的时候,可以接受数据; 当READY_DOWN为高的时候, 如果我们有数据可发的话,我们可以向downstream发送数据;

是不是很像一个FIFO?

用FIFO去解决

将一个FIFO插在黑盒子这里,那么就会变成这样子:

eba8c4bff4d06418b4859b0cea7d9e5f.png

(图2)

VALID_UP/READ_YUP ==> FIFO ==> VALID_DOWN/READY_DOWN

也就是:

VALID_UP = fifo_push_valid;
READY_UP = fifo_push_ready;
VALID_DOWN = fifo_pop_valid;READY_DOWN = fifo_pop_ready;

现在问题变成了:如何设计这个FIFO呢?

  • 这个FIFO深度多少?
  • 怎么设计,能够保证READY_UP是READY_DOWN打过一拍的呢?

FIFO设计多深?

因为本身valid/ready协议是反压协议(也就是READY_UP为0的时候,不会写F

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值