棋子 · 2023年09月13日

4种常见的流控机制(二)主动管理的流控

上一篇我们讲解了一种简单的流控机制:fifo与流控。今天同样是将fifo与流控,不同的是今天的流控稍微复杂一点,在同样的流水深度下,能够有效减少fifo深度。

1、流控机制

在数据发送过程中,发送者向接收者发送数据,通常需要接收者通知发送者自身是否可以接收数据,当接收者即将无法接收数据时(如FIFO快满时),发送者需要停止发送数据,这就是流控机制。

image.png

2、流控机制过程 

初始化流程:

  1. 复位释放后,初始化,module b 通过信号fc_update_signal 通知module a 自身fifo深度是多少。

    fc_update_signal一个周期的高电平表示存在一个存储深度。

  2. Tx_fc_ctrl 收到初始化信息后,得知module b存在有效fifo 缓存,通知ren_ctrl允许产生读使能ren
  3. ren_ctrl产生读使能ren
  4. ren输出给tx_fc_ctrl,module b的有效fifo深度减一
  5. tx_fc_ctrl计算module b是否存在有效数据,有则允许ren_ctrl产生读使能
  6. ren_ctrl产生读使能ren,并通知到tx_fc_ctrl,module b的有效fifo深度减一
  7. tx_fc_ctrl计算module b是否存在有效数据,有则允许ren_ctrl产生读使能,没有则不允许ren_ctrl产生读使能

a. Module b模块fifo已存在有效数据,从fifo读取一个数据,此时已释放出一个fifo深度

b. Fc_update更新fc_update_signal,通知tx_fc_ctrl模块module b已释放一个fifo空间,tx_fc_ctrl记录的有效深度加1

c. 此时tx_fc_ctrl允许ren_ctrl产生读使能

3、优缺点比较

此种流控机制需要发送端和接收端配合管理有效缓存空间。相对比单一bit的flow ctrl信号来说,稍微复杂一些,但是有个显著的优点,相对于简单的fc流控,能够有效减少module b中的Data fifo的深度。

如图所示,data pipeline的深度是不确定的,可能是20~100个周期,而流控信号只有4个pipe,在考虑其他方面的延时有3拍,

不考虑性能的情况下:保证不溢出,module b的fifo深度最小只需要1:而单纯的fc信号流控需要的深度为1+100+4+3。

满足最大性能的情况下,保证下游不断流:module b的fifo深度需要:本文流控机制:100+4+3+1 ;  而单纯的fc信号流控需要的深度:2 * (100+4+3+1)

作者: IC小鸽
文章来源:IC的世界

推荐阅读

更多IC设计干货请关注IC设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
19602
内容数
1303
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息