高級FPGA開發(fā)之PCIe IP core
一、PCIe IP核簡介
通過閱讀PCIe spec文檔瞭吃,可以看到UltraScale+器件Integrated Block For PCI Express解決方案IP核是具備高帶寬挨措、高可縮放性和高可靠串行互聯(lián)的解決方案,適用于UltraScale+器件。賽靈思在 UltraScale+ 架構(gòu)內(nèi)提供了 2 個 PCIe 集成塊:PCIE4 集
成塊和 PCIE4C 集成塊解取。
功能特性:
PCI Express端點(diǎn)、傳統(tǒng)端點(diǎn)或根端口模式返顺;
針對PCIe 4和PCIe 4c塊支持x1禀苦、x2、x4遂鹊、x8或x16鏈路帶寬以及Gen1振乏、Gen2和Gen3鏈路速度;
針對PCIe4C塊支持x1秉扑、x2慧邮、x4和x8鏈路帶寬以及Gen4的鏈路帶寬;
AXI4-Stream接口舟陆,可連接到客戶邏輯误澳;
高級錯誤報告(AER)和端到端CRC;
用于傳輸事務(wù)緩沖的塊RAM秦躯;
1個PCI Express虛擬通道和8個流量類忆谓;
最多支持4個PF和252個VF;
完全可配置的3x64位或6x32位基地址寄存器(bar)踱承;
-
支持所有中斷類型:
INTx
32多矢量MSI功能
含最多2048個矢量的MSI-X功能倡缠,具有可選內(nèi)置MSI-X矢量表;
-
內(nèi)置發(fā)起方讀取請求/完成標(biāo)簽管理器
支持最多256項(xiàng)未完成的發(fā)起方讀取請求傳輸事務(wù)
二茎活、PCIe IP核端口描述 --- CQ
2.1 Completer Request Interface
CQ端口將鏈路層收到的所有請求交付給user logic昙沦。
DW表示已經(jīng)配置的數(shù)據(jù)總線寬度(64、128或者256)妙色。
port | IO | Width | description |
---|---|---|---|
m_axis_cq_tdata | O | DW | 從CQ接口輸出的數(shù)據(jù) |
m_axis_cq_tuser | O | 88 | CQ用戶數(shù)據(jù)(這組數(shù)據(jù)包含所傳輸事務(wù)層(tlp)的邊帶信息。) |
m_axis_cq_tlast | O | 1 | CQ數(shù)據(jù)的tlast指示 |
m_axis_cq_tkeep | O | DW/32 | CQ數(shù)據(jù)的tkeep指示慧耍。 |
m_axis_cq_tvalid | O | 1 | CQ數(shù)據(jù)有效身辨。 |
m_axis_cq_tready | I | 1 | CQ數(shù)據(jù)就緒丐谋。 |
pcie_cq_np_req | I | 2 | 輸入可控制內(nèi)部信用值,進(jìn)行選擇性反壓(00-無更改煌珊,01-增加1号俐,10/11-保留) |
pcie_cq_np_req_count | O | 6 | 輸出的信用值,當(dāng)信用值為非0時定庵,才能通過完成器請求接口交付非轉(zhuǎn)發(fā)請求吏饿,該信用值飽和上限為32。 |
其中m_axis_cq_tuser中的邊帶信號描述:
索引 | 名稱 | Width | description |
---|---|---|---|
3:0 | first_be[3:0] | 4 | 有效載荷的首個 Dword 的字節(jié)使能蔬浙。 |
7:4 | last_be[3:0] | 4 | 有效載荷的最后一個 Dword 的字節(jié)使能猪落。 |
39:8 | tyte_en[31:0] | 32 | 用戶邏輯可以選擇使用這些字節(jié)使能位來判定所傳輸?shù)陌挠行лd荷中的有效字節(jié)。 |
40:40 | sop | 1 | 包起始畴博。 |
41:41 | discontinue | 1 | 如果核在從其內(nèi)部 FIFO 存儲器讀取 TLP 有效載荷時檢測到不可糾正的錯誤笨忌,那么它會在 TLP 的最后一個節(jié)拍中斷言此信號有效。當(dāng)核發(fā)出此類錯誤信號時俱病,用戶應(yīng)用必須丟棄整個 TLP官疲。 |
42:42 | tph_present | 1 | 此位表示在通過接口交付的請求 TLP 中存在“Transaction Processing Hint (TPH)”(傳輸事務(wù)處理提示)。 |
44:43 | tph_type[1:0] | 2 | 當(dāng)請求TLP中存在TPH時亮隙,這2個位可提供與提示關(guān)聯(lián)的PH[1:0]字段的值 |
52:45 | tph_st_tag[7:0] | 8 | 當(dāng)請求TLP中存在tph時途凫,輸出可提供與提示關(guān)聯(lián)的8位導(dǎo)向標(biāo)簽 |
84:53 | parity | 32 | 位 i 可提供針對 m_axis_cq_tdata 的字節(jié) i 計(jì)算所得奇校驗(yàn)。 |
87:85 | reserved | 3 | 保留 |
注: 當(dāng)axis_tready和axis_tvalid均處于高位時溢吻,節(jié)拍采用總線傳輸维费。
2.2 Completer Request Interface Formats
描述符長度始終為16字節(jié),并在請求包的前16字節(jié)內(nèi)發(fā)送煤裙。
當(dāng)所傳輸?shù)恼埱骉LP為存儲器讀取/寫入請求掩完、IO讀取/寫入請求或者原子操作(atomic operation)請求時,格式如下:
供應(yīng)商定義的報文完成器請求描述符:
對應(yīng)于ATS報文的完成器請求描述符:
對應(yīng)于所有其它報文的完成器請求描述符格式:
2.3 CQ字段說明
位索引 | 字段索引 | 描述 |
---|---|---|
1:0 | AT 地址類型 | 僅適用于存儲器傳輸事務(wù)和原子操作硼砰。00-地址未轉(zhuǎn)換 01-傳輸事務(wù)為轉(zhuǎn)換請求 10-請求的地址已轉(zhuǎn)換的地址 11:保留 |
63:2 | "address" 地址 | 該字段用于存儲器且蓬、IO和原子請求,必須使用m_axis_cq_tuser的first_be位判定字節(jié)級別的地址 |
74:64 | "dword count"(dword計(jì)數(shù)) | 指示讀取或者寫入的塊大小题翰,對于報文有效范圍0-256恶阴,對于IO訪問,dword計(jì)數(shù)始終為1 |
78:75 | “request type”(請求類型) | 用于識別傳輸事務(wù)類型 |
95:80 | “request ID”(請求器ID) | 請求器ID豹障,[95:88]-bus number,[87:83]-device, [82:80]-function number冯事,如果是non-posted請求,那么用戶必須存儲該字段血公,并將完成數(shù)據(jù)一起重新發(fā)給集成塊 |
103:96 | “tag”(標(biāo)簽) | 與請求關(guān)聯(lián)的PCIe標(biāo)簽昵仅,如果是non-posted事務(wù),用戶必須存儲該字段,然后一起重新返回block |
111:104 | “target function”(目標(biāo)功能) | PF/VF映射 |
114:112 | “BAR ID” | 僅適用于存儲器摔笤、IO和原子操作够滑,可為請求中的地址提供匹配的bar編號 |
120:115 | “BAR aperture” | 僅適用于存儲器、IO和原子操作吕世,提供與請求匹配的bar的間隙設(shè)置 |
123:121 | “traffic class” | 請求關(guān)聯(lián)的PCIe傳輸事務(wù)(TC)彰触,如果是non-posted,必須存儲該字段命辖,并將其與完成的數(shù)據(jù)一起返回集成塊 |
15:0 | “snoop latency”(嗅探時延) | 該字段定義僅適用于 LTR 報文况毅。它可提供報文的 TLP 報頭中的 16 位“Snoop Latency”(嗅探時延)字段的值。 |
111:104 | “message code”(報文代碼) | 該字段定義適用于所有報文尔艇。 |
114:112 | “message routing”(報文路由) | 該字段定義適用于所有報文尔许。這些位可提供來自 TLP 報頭的 3 位路由(Routing) 字段 r[2:0]。 |
15:0 | "destination ID"(目的ID) | 該字段僅適用于供應(yīng)商定義的報文漓帚。 |
2.4 傳輸事務(wù)類型
request type | description |
---|---|
0000 | 內(nèi)存讀請求 |
0001 | 內(nèi)存寫請求 |
0010 | IO讀請求 |
0011 | IO寫請求 |
三母债、PCIe IP核端口描述 --- CC
用戶應(yīng)用生成的完成包通過完成器完成(CC)接口端口來相應(yīng)發(fā)射的完成器請求〕⒍叮可以將所有non-posted傳輸事務(wù)作為獨(dú)立拆分的傳輸事務(wù)來處理毡们。
3.1 Completer Completion Interface
CC接口可持續(xù)接受請求器接口上的新請求,同時針對請求發(fā)送完成(completion)包昧辽。
completer completion interface(CC接口)上衙熔,將每個TLP均作為1個axi-stream數(shù)據(jù)包交付。
接口 | IO | 寬度 | 描述 |
---|---|---|---|
s_axis_cc_tdata | 輸入 | DW | 完成器完成數(shù)據(jù)總線 |
s_axis_cc_tuser | 輸入 | 33 | 完成器完成用戶數(shù)據(jù)搅荞,TLP傳輸包含的邊帶信息 |
s_axis_cc_tlast | 輸入 | 1 | 對應(yīng)完成器完成數(shù)據(jù)的tlast信號 |
s_axis_cc_tkeep | 輸入 | DW/32 | 對應(yīng)完成器完成數(shù)據(jù)的tkeep信號 |
s_axis_cc_tvalid | 輸入 | 1 | 完成器完成數(shù)據(jù)有效红氯。 |
s_axis_cc_tready | 輸出 | 1 | 完成器完成數(shù)據(jù)就緒。 |
其中m_axis_cq_tuser中的邊帶信號描述:
位索引 | 名稱 | 寬度 | 描述 |
---|---|---|---|
0 | discontinue | 1 | 如果傳輸期間用戶應(yīng)用在所傳輸?shù)臄?shù)據(jù)中檢測到錯誤咕痛,并且需要中止該數(shù)據(jù)包痢甘,即可斷言此信號有效。 |
32:1 | parity | 32 | 256位數(shù)據(jù)奇偶校驗(yàn)位 |
3.2 Completer Completion Interface Formats
user logic將完成器請求的完成數(shù)據(jù)作為axi4-stream包發(fā)送至集成塊cc接口茉贡。
每個數(shù)據(jù)包均以1個描述符開頭塞栅,在描述符后可包含有效載荷數(shù)據(jù)。描述符長度始終為12個字節(jié)腔丧,并且在完成包的前12字節(jié)內(nèi)發(fā)送放椰。
當(dāng)用戶應(yīng)用將請求的完成數(shù)據(jù)拆分為多個完成包(split completion)包后,它必須將每個拆分完成包作為獨(dú)立axi4-stream包隨描述符一起發(fā)送愉粤。
位索引 | 名稱 | 描述 |
---|---|---|
6:0 | “l(fā)ower address”(低位地址) | 對于memory read complete包砾医,該字段必須設(shè)置所傳輸?shù)拇鎯ζ鞯钠鹗甲止?jié)地址的7個最低有效位 |
9:8 | “address type”(地址類型) | 該字段定義僅適用于存儲器傳輸事務(wù)和原子操作的完成包。user logic必須將AT位從對應(yīng)的請求描述符復(fù)制到該字段中衣厘。 |
28:16 | “byte count”(字節(jié)計(jì)數(shù)) | 這13個位可包含范圍在0 - 4096個字節(jié)內(nèi)的值如蚜。如果存儲器讀取請求已通過使用單一完成包完成,那么byte count值將以字節(jié)為單位表示“payload length”。IO讀取/寫完成包错邦,必須設(shè)置為4涎显。對于每個“Memory Read Completion”(存儲器讀取完成),“Byte Count”字段必須表明完成請求所需的剩余字節(jié)數(shù)兴猩,包括隨完成包返回的字節(jié)數(shù)。 |
29:29 | “l(fā)ocked read completion”(鎖定讀取完成) | 當(dāng)“l(fā)ocked read”(鎖定讀仍缧)請求的相應(yīng)中包含完成包時倾芝,必須設(shè)置該位,其他為0 |
42:32 | ”dword count“(dword計(jì)數(shù)) | 這11位表示當(dāng)前包的有效載荷大屑(以dword數(shù)為單位) |
45:43 | "completion status"(完成狀態(tài)) | 基于所完成包(completion)包的類型來設(shè)置晨另。000-完成,001-請求不支持(UR)002-完成器異常(CA) |
46:46 | “completion status”(完成狀態(tài)) | 此位可用于對所發(fā)送的tlp進(jìn)行毒化谱姓。針對所有完成包借尿,必須設(shè)置為0 |
63:48 | “requester ID”(請求器ID) | 與請求關(guān)聯(lián)的PCI請求器ID(從請求復(fù)制所得) |
71:64 | “tag”(標(biāo)簽) | 與請求關(guān)聯(lián)的PCIe標(biāo)簽(從請求復(fù)制所得) |
79:72 | “target/device number” | 完成器功能的器件和/或功能編號 |
87:80 | “completer bus number”(完成器總線編號) | 與完成器功能關(guān)聯(lián)的總線編號 |
88 | “completer ID enable”(完成器ID使能) | 端點(diǎn)模式設(shè)置為0 |
91:89 | “transaction class”TC(傳輸事務(wù)類) | 與請求關(guān)聯(lián)的PCIe傳輸事務(wù)類(TC),user logic從關(guān)聯(lián)的請求描述符TC復(fù)制 |
94:92 | 屬性 | 與請求關(guān)聯(lián)的PCIe屬性(從請求復(fù)制所得)屉来,92-"no snoop", 93-"relaxed oerdering", 94-"ID-based ording" |
95 | "force ECRC"(復(fù)制ECRC) | 強(qiáng)制執(zhí)行ECRC插入 |
四路翻、未完待續(xù)
下章將繼續(xù)介紹PCIe Hard IP rc和rq接口。
歡迎關(guān)注知乎:北京不北茄靠,+vbeijing_bubei
歡迎關(guān)注douyin:near.X (北京不北)
歡迎+V:beijing_bubei
獲得免費(fèi)答疑茂契,長期技術(shù)交流。
五慨绳、參考文獻(xiàn)
https://docs.xilinx.com/r/en-US/pg213-pcie4-ultrascale-plus
https://docs.xilinx.com/r/zh-CN/pg213-pcie4-ultrascale-plus