当前位置: 首页 > news >正文

(六)Virtual-Channel Flow Control and Buffering


Chapter 6: Virtual-Channel Flow Control and Buffering

(本文版权归作者所有,任何形式的转载都请注明出处)

  1. 虚通道(Virtual Channel, VC)的作用类似于多车道,最显著的作用是避免死锁——比如请求和响应分作两路 VC,可以消除资源依赖的环路。常见做法有时分复用或扩展物理通道。其中,时分复用只需要扩展握手信号,Data 通道只留一条,即 1 Cycle 传递 1 包 flit。此外,Buffer 也需要复制多份;若为信用流控,Credit 计数器也要复制多份。

上述多 VC 的信用流控模型可以优化:Data 通路增加isHeadisTail标识,validupdate分别增加VCid标识,其中VCid位宽为 log₂N(N 为 VC 数量)。

  1. Buffer Sharing 优化:时分复用可能造成带宽利用率不足,即某些 VC 可能闲置,VC 数量越多,这种可能性越大。

    举例说明:若存在 VC0/VC1,每个 VC 拥有一个深度为 4 的 FIFO,则 VC0 + VC1 的整体 Buffer 资源数为 8。若 VC0 繁忙、VC1 长期空闲,则 VC1 的 4 深度 FIFO 长期浪费,VC0 只有 4 个资源可用。

对整体资源数 8 重新调配:VC0/VC1 各有深度为 2 的 Private FIFO,其余 4 个资源作为 Shared Buffer。此时,若 VC0 繁忙、VC1 长期空闲,VC0 可使用的 Buffer 资源为 6(2 Private + 4 Shared)。

  • Sender 侧:Credit 计数需要统计 Private 和 Shared,即当(creditCounter[i] > 0) OR (creditShared > 0)时,可以发送对应VC[i]的 flit。
  • Receiver 侧:接收 flit 后会先占用 Private,若 Private 满则占用 Shared;每有 VC 出队,flit 包按Input → Shared → Private → Output次序移动。

显然,Shared Buffer 需要保序,所以需要在 Buffer 内对每个 VC 的 flit 实现串链。Buffer 结构:

  • 每个 VC 记录头指针pH和尾指针pT,空指针为 NULL;
  • Buffer Memory 存储 flit 包,用Available表示 Buffer Entry 是否空闲;
  • Linked List 用于存储next_pointer

最小硬件开销方案:每个 VC 只拥有 1 个 Private 寄存器,所有 VC 共同共享一个 Shared 寄存器。即对于 N 个 VC 场景,只需N + 1个寄存器即可实现。每个 VC 拥有 1 个 Private 寄存器,即可在不插入额外延迟的前提下,若只有单个 VC 活跃,即可满足 100% 吞吐。当有 M 个 VC 活跃时,在未发生阻塞的前提下,每个 VC 可获得 1/M 的带宽。只有当某些 VC 发生阻塞时,Shared 寄存器才会被占用,而其余未阻塞 VC 的吞吐仍能保持 1/M。

  1. 若存在链路延迟(前向延迟Lf,后向延迟Lb):

  • Valid/Ready 流控:每个 Private FIFO 深度至少为Lf + Lb + 1才能保证不丢包;Shared FIFO 深度至少为Lf + Lb + 1保证单个 VC 的 100% 吞吐。若 Private FIFO 深度小于Lf + Lb + 1,当 Private FIFO 满时,就需要 Shared FIFO 有剩余空间才能拉高ready,此时引入了各 VC 之间的依赖,存在死锁风险

  • Credit 流控:每个 Private FIFO 深度为 1 即可保证不丢包;Shared FIFO 深度至少为Lf + Lb - 1保证单个 VC 的 100% 吞吐。


http://www.jsqmd.com/news/1016496/

相关文章:

  • 在飞腾FT2000+上编译openEuler内核踩坑记:为什么make defconfig后系统起不来?
  • 【JAVA毕设源码分享】基于Web的森林资源管理系统设计与实现(程序+文档+代码讲解+一条龙定制)
  • 2026年杭州老酒回收市场深度观察:诚信机构如何选择?价格、鉴定与案例全解析 - 优质品牌商家
  • 别再被Python的TypeError坑了!手把手教你排查‘indices’这类关键字参数错误
  • HARU-Net:混合注意力机制在CBCT图像降噪中的创新应用
  • 2026年6月山东高考分数470到480的民办二本推荐,民办高校金属材料专业/民办二本朝鲜语专业,民办二本哪家名气大 - 品牌推荐师
  • 微信 4.1.1 for Windows 旧版本下载 历史版本
  • 避坑指南:ESP32 MCPWM配置互补PWM时,为什么B路占空比设置会‘失效’?
  • 告别环境配置焦虑:手把手教你用VSCode+CMake搞定K210开发环境(Windows版)
  • 告别手动折腾:用Ansible一键自动化部署Ubuntu 20.04/22.04的NVIDIA驱动和CUDA
  • 2026年亲子家庭合影摄影哪家便宜,高性价比口碑好的服务商排名 - mypinpai
  • 别再让BrokenPipeError打断你的爬虫:requests和aiohttp库中的连接保持与异常处理实战
  • STM32硬件I2C驱动OLED避坑指南:配合HX711实现稳定称重显示
  • YOLO26姿态估计关键点检测 tensort部署加速
  • wps 灵犀-右键可直接使用-不用复制粘贴到ai网站了,但是速度有些慢,大家觉得呢?
  • Anthropic Claude 3.5 API调用实战指南
  • Allegro与OrCAD联动卡顿?一个‘Done’操作习惯就能拯救你的设计效率
  • PyCharm里写pywin32代码没提示?手把手教你配置开发环境与查阅官方文档(以Excel自动化为例)
  • SAP ME21N采购订单增强报错?手把手教你排查ME_PROCESS_PO_CUST里的Z表配置问题
  • 线性代数是数据科学的底层操作系统:从内存布局到GPU核函数
  • CRF序列标注实战:解决标签不一致与转移约束问题
  • 嵌入式网络调试避坑指南:当你的以太网不通时,如何用PHY回环测试快速定位是MAC还是PHY的问题?
  • 保姆级教程:用Nginx的proxy_set_header一招搞定前端跨域403(附常见坑点)
  • K8s Pod间文件同步延迟?别急着改代码,先试试这个NFS挂载参数(lookupcache=positive)
  • Conda安装TensorFlow报错‘Malformed version string’?别慌,这3个地方你肯定没检查
  • 2026年求推荐能做四川纯玩无购物小包团的行程丰富的旅行社推荐,哪家性价比高 - mypinpai
  • 开源大语言模型选型决策地图:6大硬指标实战指南
  • 从‘场图异常’到‘优化失败’:HFSS仿真结果背后的那些‘坑’与正确设置姿势
  • 用逻辑分析仪抓波形:实战分析STM32 HAL库串口接收中断丢数据的根本原因
  • Google Colab数据获取的七种可靠路径与工程实践