PCIe 知识点:bus number是如何获取的

科技   2024-10-21 17:13   江苏  

Bus number是指当前PCIe设备在PCIe系统结构中被分配的总线号。PCIe的部分TLP(Transaction Layer Packet)传输需要确定总线号才能完成。在PCIe系统中,总线号是用来标识不同的PCIe总线的,每总线都有一个唯一的总线号。设备号是指在特定总线上的设备编号。PCIe允许在单个PCI总线上最多有32个设备号。每个设备都必须实现Function 0,并且可能包含多达8个Function的集合。设备号用于在总线上标识不同的设备        

 

1.PCIE EP是如何响应不同的bus number和device number的  

为支持ID路由,每个PCIE设备(端点和交换开关)中都应设置有贮存设备总线号的寄存器,PCIE协议中并没在PCIe配置头空间定义bus number,bus number号存在事务层的寄存器中。复位时,该寄存器清0。每当PCIe设备收到有效的Type0类型的cfgwr时,PCIe设备就将TLP header中的第8字节写入bus number寄存器。此处需要注意:必须是有效的cfgwr0才会触发bus number捕写入动作,即不是Poison TLP、nullified TLP、也不是malformed TLP和unsupported TLP。

1.1.协议原文描述  

Spec 2.2.6.2存在如下描述       

 

   always @(posedge clk or negedge rstn)   begin: ID_CHECK     if (rstn == 1'b0) begin       busnum_captured    <= 8'b0;     end else if (srst==1'b1 || k_upstr==1'b0) begin       busnum_captured    <= 8'b0;     end else begin       // Capture bus and device numbers then start checking ID when a CfgWr0 is received;       // but not when TLP is nullified, poisoned, malformed, unsupported because core will not       // return a successful completion in these cases.       // (ECRC error cannot be checked at this point so it is not included in above cases)       if (rx_hvalid==1'b1 && is_rxcfgwr0==1'b1 && rx_hnull==1'b0 && rx_header[`TLP_EP]==1'b0                   && err_iocfg==1'b0 && err_pfx==1'b0 && be_err_n==1'b0 && up_cfg0_ok==1'b1) begin         busnum_captured    <= rx_header[`TLP_CFG_BUS+:8];
end    

2.参考文档  

PCI Express Base Specification Revision 4.0 Version 1.0    


本文内容仅代表作者观点,不代表平台观点。

如有任何异议,欢迎联系我们。

如有侵权,请联系删除。


往期精彩回顾





2021年的第一场雪!英特尔2020年Q4财报解读



利用硬件辅助验证工具加速功能仿真


博文:裸片尺寸和光罩难题——光刻扫描仪吞吐量的成本模型


博文速递:Race condition in digital circuits


IP与SoC设计
《IP 与SoC》依托无锡国家“芯火”平台,全面报道全球IP与SoC设计技术的发展和国内外应用经验,为中国IC设计行业搭建一个IP与SoC资讯交流、产业促进的平台,为中国IC设计行业提供IP与SoC专业知识及相关信息支持和服务。
 最新文章