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

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

3天内不再提示

在valid ready协议中对ready进行timing修复打拍的方法

冬至子 来源:数字逻辑电路小站 作者:孟祥志 2023-06-27 16:20 次阅读

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

在valid/ready 握手协议中,valid 与 data的时序优化比较容易理解。

但是有时候,关键路径是在ready信号上,如何对ready信号打拍呢?

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

图片

(图1)

尝试直接对ready打一拍

1.jpg

(仅示例,非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

    可以总结成下面的样子:

1.jpg

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

当READY_UP为高的时候,可以接受数据;

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

是不是很像一个FIFO?

用FIFO去解决

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

图片

(图2)

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

也就是:

1.jpg

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

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

FIFO设计多深?

因为本身valid/ready协议是 反压协议 ( 也就是READY_UP为0的时候,不会写FIFO,而不会导致FIFO溢出 )而且此处的读写时钟是同一个时钟,是一个同步FIFO,所以FIFO深度是1或者2就足够了。

深度是1还是2要看极端情况下需要存储几笔数据。

简单分析可以知道,只有一种情况会去向FIFO中存储数据:

  • READY_UP是1,可以从upstream接收数据
  • 同时READY_DOWN是0,不可以向downstream发送数据

这种情况在极端情况下最多维持多久呢?

答案是: 一个周期

因为如果cycle a 时:READY_DOWN=0,那么cycle a+1时,READY_UP变为0了,开始反压,所以只用存一个数就够了。

所以设计为一个深度为1的FIFO就可以了。

深度为1的FIFO有很多特点,设计起来比较简单。比如:wr_ptr/rd_ptr始终指向地址0,所以我们可以删掉wr_ptr和rd_ptr,因为是一个常值0。

简单的depth-1 FIFO实现

使用depth-1 FIFO传输数据,可以这样设计:

1.jpg

这解决了READY打拍的问题。但是这里有一些可以改进的地方,比如:

  • 是不是可以挤掉多于的气泡?
  • 在FIFO为空的时候,数据是不是可以直接bypass FIFO?

无气泡传输

具体的说,就是既然你这里有个深度为1的FIFO了,那么我是不是可以利用起来,放点数据啊……

当READY_DOWN持续是0的时候,READY_UP依然可以有一个cycle去接收一笔数据,把FIFO资源利用起来:

1.jpg

同样的原因,在RESET情况下,READY_UP可以为1,可以将复位值修改。

那么FIFO穿越呢?

FIFO穿越

考虑一个特殊情况(case 2):

假设READY_DOWN在复位之后始终为1,

然后某个时刻开始VALID_UP为1了。

是不是每个周期,数据都可以直接传下来而不用进入FIFO,即使READY_DOWN打过一拍?

换句话说: ***如果READY_UP=1, READY_DOWN=1, FIFO是空的这种情况下,数据可以直通*** 。

  • 上文特殊情况(case 2),READY_DOWN/READY_UP一直是1,显然可以。
  • READY_UP从0到1的跳变:READY_DOWN也会在前一周期有一个从0到1的跳变。在READY_DOWN为0时,有一笔数据存到FIFO里边(无气泡传输);当READY_DOWN在时刻a从0变到1时,READY_UP在时刻a+1也会从0变为1。如果此时READY_DOWN也为1,可以直通,不用进入FIFO。也就是:

1.jpg

注意在直通时,我们不希望数据进入FIFO:

1.jpg

将所有这些结合起来:

1.jpg

1.jpg

1.jpg

(注:代码未经详细验证)

换一种思路

经过上面对FIFO的分析,我们可以总结起来,主要是以下几点:

  • 加入一个深度为1的同步FIFO,这个FIFO在READY_DOWN为0,且READY_UP为1时暂存一个数据;
  • 在READY_DOWN从0->1时,FIFO里边的数据先输出到下级;
  • 如果READY_DOWN继续为1,数据可以绕过FIFO直通;

深度为1的FIFO(不管是同步还是异步FIFO),都是一个特殊的逻辑单元。

对于深度为1的同步FIFO,其实就是一拍寄存器打拍。

所以,我们可以这样重新设计:

  1. 加一级寄存器作为buffer(实际上就是深度为1的FIFO)

  2. 当以下条件满足,这一级寄存器会暂存一级数据:

    2.1 READY_DOWN是0,并且

    2.2 READY_UP是1,并且

    2.3 VALID_UP是1;

也就是:

1.jpg

  1. 当READY_UP是1时,数据可以直接暴露在下级接口:READY_UP为1时,BUFFER中一定是空的,因为上一个时钟周期数据已经排空了。也就是:

1.jpg

这其实就是上面的FIFO直通模式。同样我们可以挤掉气泡:

1.jpg

把这所有的总结起来:

1.jpg

1.jpg

(注:代码未经详细验证)

其他

  1. 我在电脑上简单跑了两个波形,FIFO方法和Buffer方法结果是一样的。
  2. 用FIFO去隔离开上下两个interface思考,比较容易想明白。
  3. 无气泡传输、FIFO直通这两个小feature拿掉,也可以工作、也是能实现READY_DOWN时序优化的设计目标的。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5317

    浏览量

    120000
  • AXI总线
    +关注

    关注

    0

    文章

    66

    浏览量

    14249
  • FIFO存储
    +关注

    关注

    0

    文章

    103

    浏览量

    5963
收藏 人收藏

    评论

    相关推荐

    时序优化之接收端打拍策略探讨

    这篇文章是探讨对接收端进行时序优化(即ready打拍,或称backward打拍)的方式。
    的头像 发表于 12-04 10:20 590次阅读
    时序优化之接收端<b class='flag-5'>打拍</b>策略探讨

    valid-ready握手协议和enable-xoff协议对比

    这一篇主要对比下valid-ready握手协议和enable-xoff协议,当然这个对比仅限于同时钟域下的信号传输。
    的头像 发表于 12-04 10:32 722次阅读
    <b class='flag-5'>valid-ready</b>握手<b class='flag-5'>协议</b>和enable-xoff<b class='flag-5'>协议</b>对比

    add_ready_list_end

    /*add task_ptr to the ready list end*/void add_ready_list_end(RAW_RUN_QUEUE *rq, RAW_TASK_OBJ
    发表于 06-08 17:26

    任务处于Ready状态如何调试?

    Hi: 各位大侠好,我们调试的时候遇到有几个任务处于Ready状态,但是Ready了的任务不执行,而是Idle任务执行的问题,现象如下图所示:请问遇到这种问题如何调试?
    发表于 01-02 15:07

    Stream的halfPipe方法为什么会导致带宽减半?

    。pipelinedStream诸多打拍握手方法,或许你记起来比较麻烦,那么可以使用时采用下面的方法:m2s:
    发表于 06-23 15:57

    FATFS格式化FR_NOT_READY错误怎么解决?

    对U盘进行格式化,返回了一个错误是FR_NOT_READY错误挂载的时候f_mount(fs \"1:\" 0);返回FR_OK挂载的时候 f_mount(fs \"1:\" 1);也是返回FR_NOT_READY错误,这FR_
    发表于 10-18 07:32

    什么是“HD Ready”标准

    什么是“HD Ready”标准 欧洲EICTA(欧洲通信家电工业联合会)日前推出了高清显示器标志“HDTV Ready”以及获得该标志需要满足的条件。凡带有该标志
    发表于 02-05 10:39 893次阅读

    小鱼易连多款设备获得IPv6 Ready Logo认证

    近日,上海赛连信息科技有限公司旗下多款小鱼易连智能视频会议终端在下一代互联网国家工程中心-全球IPv6测试中心正式通过IPv6 Ready核心协议Phase-2测试。获由国际组织IPv6 Forum
    发表于 08-23 14:06 928次阅读

    SD-WAN Ready工业互联网的实践

    近日,第三届SD-WAN产业发展论坛上,网银互联郑永为参会企业带来了《SD-WAN Ready工业互联网的实践》的主题演讲。
    的头像 发表于 02-18 15:09 1510次阅读
    SD-WAN <b class='flag-5'>Ready</b><b class='flag-5'>在</b>工业互联网的实践

    setup/hold的概念

    协议,需要打拍的信号间存在时序的耦合。 所以问题就简化成如何在遵循valid -ready协议的master和slave 之间完成“
    的头像 发表于 07-25 10:09 1998次阅读

    AXI4协议五个不同通道的握手机制

    AXI4 协议定义了五个不同的通道,如 AXI 通道中所述。所有这些通道共享基于 VALIDREADY 信号的相同握手机制
    的头像 发表于 05-08 11:37 1188次阅读
    AXI4<b class='flag-5'>协议</b>五个不同通道的握手机制

    在握手协议Valid及data打拍技巧

    AXI 协议使用的是valid-ready握手的方式去传输数据。
    发表于 06-27 16:12 1537次阅读
    在握手<b class='flag-5'>协议</b><b class='flag-5'>中</b>的<b class='flag-5'>Valid</b>及data<b class='flag-5'>打拍</b>技巧

    validready信号有哪三种情况

    validready信号分三种情况: (1)valid信号先到达 主机valid信号早早就到了,T2时刻并没有见到接收方的ready信号。
    的头像 发表于 10-31 15:44 1928次阅读
    <b class='flag-5'>valid</b>与<b class='flag-5'>ready</b>信号有哪三种情况

    Valid-Ready握手协议的介绍与时序说明

    "Valid-Ready" 握手协议是一种常用于数字电路的接口协议,用于控制数据的传输和处理。
    的头像 发表于 12-04 10:37 1418次阅读
    <b class='flag-5'>Valid-Ready</b>握手<b class='flag-5'>协议</b>的介绍与时序说明

    AI ready是什么?文明的发展需要做好准备

    接入”那么简单,还需要做好“AI ready”。 AI ready及其重要性 AI ready这个概念最早是由飞书提出的,去年11月末的飞书7发布会上,飞书CEO谢欣提到:“
    的头像 发表于 01-17 10:19 561次阅读
    AI <b class='flag-5'>ready</b>是什么?文明的发展需要做好准备