棋子 · 5月7日

PCIe 配置:bus master en设计细节

1.Bus Master Enabl信号

Bus Master Enable位于command寄存器的bit2,用于控制Memory and I/O Read/Write Requests。

image.png
image.png

  • Type0的function:控制function发起Memory and I/O Read/Write Requests

    • Bus Master Enable为0,不允许function发起Memory and I/O Read/Write Requests
    • PF的Bus Master Enable 位于PF配置空间的Command Register的bit2,仅仅控制PF自身的请求,不会控制所属VF的请求
    • VF的Bus Master Enable,位于VF配置空间的Command Register的bit2,仅仅控制VF自身的请求
    • MSI和MSI-X消息属于memory write,因此当Bus Master Enable为0时,无法成功发送。
  • Type1的function:控制function向Upstream方向转发Memory and I/O Read/Write Requests

    • Switch upstream port的Bus Master Enable为0,

      • 会将downstream side收到的Memory and I/O Read/Write Requests当做UR处理
      • Switch upstream port自身不允许向upstream 方向发出Memory and I/O Read/Write Requests

image.png

在芯片设计中,Bus Master Enable常常作为数据路径的控制信号,传输到到用户逻辑,用于控制数据请求(Memory and I/O Read/Write Requests)的发送:当Bus Master Enable为0时,有如下3种常见的实现方式:

实现1:用户逻辑不向PCIe core发送数据,用户逻辑对request起反压

实现2:用户逻辑向PCIe core发送数据,由PCIe core对用户逻辑起反压,并且逐级传递到request

实现3:用户逻辑不向PCIe core发送数据,用户逻辑选择丢包,并且给request返回错误请求响应,不向request起反压(推荐)

NOTE:

具体硬件实现可以根据PCIe core的要求和芯片应用场景选择不同的实现方式,但是实现1和实现2在部分场景中会造成阻塞。例如:多function的Endpoint,如果function0的Bus Master Enable为0,其他function的Bus Master Enable为1,此时其他function的请求是允许发送的,而实现1和实现2造成的反压可能会阻塞其他function的请求。    

2.endpoint的Bus Master Enable 什么时候会从1置0      

1)收到cfg wr,将Bus Master Enable 置0

2)收到FLR,将Bus Master Enable 置0

a.在EP收到flr请求时,pcie core不会立即将Bus Master Enable,而是等到用户返回了flr ack时才会将Bus Master Enable置0。

3)收到hot reset和,产生PCIe core的复位,将Bus Master Enable 置0

4)收到perst复位,产生PCIe core的复位,将Bus Master Enable 置0

NOTE: 仅仅链路不稳定,例如ltssm退出L0状态,但是dl_link_up(链路层保持link up,不需要重新协商初始信用量)为1,此时不会将将Bus Master Enable 置0

参考文档:PCI Express Base Specification, Rev. 5.0 Version 1.0

作者:IC小鸽
文章来源:IC芯视界

推荐阅读

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