首页
学习
活动
专区
圈层
工具
发布

IC设计:缓存容量管理先扣除再补偿

以下文章来源于IC小鸽,作者IC小鸽

1. 数据流处理

在如下的设计中,模块 a 负责产生原始数据(data_payload)。模块a知道模块 c 内部包缓存(pkt_buffer)总容量(pkt_buffer_max_byte)并且负责计算模块 c 内部包缓存(pkt_buffer)有效存储字节(pkt_buffer_valid_byte);当模块 a 发现 pkt_buffer_valid_byte 小于即将发送的 pkt 所占用的 byte 总量时,会停止发送 pkt data payload。

模块b负责给pkt组包添加包头(pkt_head)和包尾(pkt_tail)字段并且负责包格式检查,一旦发现不符合规范,则丢弃数据。

模块c拥有pkt_buffer负责存储pkt。当满足一定条件时会将pkt从pkt_buffer中读出。

2. Buffer size管理

因为模块b会添加pkt_head和pkt_tail并且还会丢包,因此模块a不知道一个包真实占用模块c中pkt_buffer的多少有效byte。此时,即使模块a知道pkt_buffer的总容量也不知道该如何管理缓存(pkt_buffer)有效存储字节(pkt_buffer_valid_byte)。所以在设计上,我们采用这样一套方法来实现:首先减去一个包可能会占用pkt_buffer的最大容量,当下游模块能够知道当前包真实占用缓存容量时,将多扣除的容量补偿回来。

初始状态,模块c中的pkt_buffer没有数据,模块a中pkt_buffer_valid_byte等于pkt_buffer_max_byte。模块C发出pkt之前会计算出当前pkt可能占用的最大byte(current_pkt_max_byte),仅仅当pkt_buffer_valid_byte不小于current_pkt_max_byte时,模块c才会发出当前pkt。一旦发出pkt后,模块c会更新包缓存有效存储字节,即pkt_buffer_valid_byte=pkt_buffer_valid_byte-current_pkt_max_byte。模块c发出的pkt会通过a2b_pkt_vld/a2b_pkt_md 传递给模块b,其中current_pkt_max_byte会赋值给a2b_pkt_md中的len字段。模块b收到pkt时,在完成包头、包尾添加和丢包判断后,会根据实际情况判断当前pkt的包长真实字节(current_pkt_real_byte),丢包时,current_pkt_real_byte为0。一旦模块b发现current_pkt_max_byte大于current_pkt_real_byte,则会通过b2a_credit_comp_vld/b2a_credit_comp_num信号补偿模块a中的pkt_buffer_valid_byte,其中b2a_credit_comp_num等于current_pkt_max_byte减去current_pkt_real_byte。当模块a收到补偿时,更新pkt_buffer_valid_byte,即pkt_buffer_valid_byte=pkt_buffer_valid_byte+b2a_credit_comp_num,此操作保证了被额外扣除的有效缓存size会被补偿回来。

当模块C中的pkt从pkt_buffer中读出时,模块c会通过c2a_credit_feedback_vld/c2a_credit_feedback_num信号将已被释放的缓存字节还给模块a,模块a会更新pkt_buffer_valid_byte,即pkt_buffer_valid_byte=pkt_buffer_valid_byte+c2a_credit_feedback_num。

3. 案例说明

如图所示,第一个包(黄色)、第二个包(橙色)、第三个包(蓝色),pkt_buffer_max_byte等于600。

第一个包在模块a计算current_pkt_max_byte等于100;初始状态pkt_buffer_valid_byte等于600,减去100后得到500。第一个包在经过模块b时实际包长current_pkt_real_byte等于80,因此模块b需要补偿20个字节给模块a,如图c2a_credit_comp_num=20,此时pkt_buffer_valid_byte更新为520,当包从模块C中缓存读出时,模块c给模块a反馈80字节,如图c2a_credit_feedback_num=80,pkt_buffer_valid_byte在520的基础上加上80得到600。

明天直播,报名即将关闭!

  • 发表于:
  • 原文链接https://page.om.qq.com/page/ODE9dGZoEO8pyPfXnwQctLBA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券