0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PCIe—Bar空間是怎么生效的

Spinal FPGA ? 來(lái)源:Spinal FPGA ? 2023-06-05 10:47 ? 次閱讀

PCIe接口相對(duì)來(lái)講還是打交道比較多的接口。無(wú)論是Intel還是Xilinx的IP也都接觸到過(guò)。談及PCIe,就不可避免地涉及Bar空間。當(dāng)然廠商的IP還是包裝的可以的,我們直接配置就行。但在使用時(shí)關(guān)于Bar空間的配置,往往牽涉到這么幾個(gè)概念:

IO/Mem

Prefetchable

32位/64位

早前這東西不假思索,抄抄之前的設(shè)計(jì)照著配置就好了。乍看pcieext-cocotb中的實(shí)現(xiàn),不禁思索,這些參數(shù)軟件是如何識(shí)別的呢?像下面EP常涉及的配置空間:

019adca8-034b-11ee-90ce-dac502259ad0.jpg

配置空間中所涉及到的只有6個(gè)Base Address Registers,似乎并無(wú)很明顯的指示~ 》協(xié)議解讀

先來(lái)看看Spec中關(guān)于Base Address Registers的定義:

01a0dab8-034b-11ee-90ce-dac502259ad0.jpg

關(guān)于如何區(qū)分是Mem空間還是IO空間,Spec中定義了:

bit0:為1表示Memory Space,為0則表示I/O Space。

(I/O空間僅支持32位,且現(xiàn)在PCIe設(shè)備里也較少使用,這里不再展開(kāi),感興趣小伙伴可自行翻看Spec)

對(duì)于Memory類型空間,bit[3:0]均為只讀。在bit[2:1]中定義了Memory類型空間

01a8ab6c-034b-11ee-90ce-dac502259ad0.jpg

可見(jiàn),當(dāng)bit[2]為1時(shí)表示64位地址空間,否則為32位地址空間。

而當(dāng)bit[3]為1時(shí),表示該Bar空間為Prefetchable,為0則不是非prefetchable。

看到這里,上面的疑問(wèn)也基本可以解答了。在cocotbext-pcie中的配置方式也有所驗(yàn)證:

01aecfba-034b-11ee-90ce-dac502259ad0.png

》Prefetchable

關(guān)于Prefetchable這個(gè)屬性,一直也沒(méi)有非常清晰的認(rèn)識(shí)。按照Spec中的定義:

A Function is permittedto mark a range as prefetchable if there are no side effects on reads, the Function returns all bytes on reads regardless ofthe byte enables, and host bridges can merge processor writes into this rangewithout causing errors.

Any device that has a range that behaves like normal memory should mark the range as prefetchable. A linear frame buffer in a graphics device is an exampleof a range that should be marked prefetchable.

一般而言,在PCIe設(shè)備里,Bar空間基本用于實(shí)現(xiàn)寄存器讀寫,是基本符合上面所描述的情況的,所以配置成prefetchable還是有必要的。而且在spec中,也提到了: PCI Express adapters with Memory Space BARs that request a large amount of non-prefetchable Memory Space(e.g., over 64 MB) may cause shortages of that Space on certain scalable platforms, since many platforms supporta total of only 1 GB or less of non-prefetchable Memory Space.This may limit the number of such adapters that

can be supported on those platforms. For this reason, it is especially encouraged for BARs requesting largeamounts of Memory Space to have their Prefetchable bit Set, since prefetchable Memory Space is more bountifulon most scalable platforms.

On PCI Express systems that meet the criteria enumerated below, setting the Prefetchable bit in a candidate BARwill still permit correct operation even if the BAR’s range includes some locations that have read side-effects orcannot tolerate write merging. This is primarily due to the fact that PCI Express Memory Reads always contain an

explicit length, and PCI Express Switches never prefetch or do byte merging. Generally only 64-bit BARs are goodcandidates, since only Legacy Endpoints are permitted to set the Prefetchable bit in 32-bit BARs, and mostscalable platforms map all 32-bit Memory BARs into non-prefetchable Memory Space regardless of thePrefetchable bit value.

這里貼上Spec中的原話,總結(jié)起來(lái):盡可能配置成64 bit prefetchable.

》Bar空間的初始化

對(duì)于Bar空間,其核心除了上述的屬性檢測(cè)外另一重點(diǎn)便是為Bar空間分配指定大小的地址空間。

對(duì)于Base Address Registers,Bar空間的大小只能配置成2的n次方。以32位Memory 空間為例,其可配置的范圍是16Byte~2GB(低四bit用于設(shè)置Bar空間屬性)。

對(duì)于指定大小所占用的位,其只讀并且始終為0,若沒(méi)有被使用,則其會(huì)返回全0。在初始化時(shí)軟件可以向Bar空間寫全1然后回讀。

對(duì)于讀會(huì)的數(shù)據(jù),將低4bit清零,然后所有bit取反后加1即為對(duì)應(yīng)的Bar空間大小。分配好地址空間好將Base地址寫回到Base Address Registers中~





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5294

    瀏覽量

    119814
  • PCI
    PCI
    +關(guān)注

    關(guān)注

    4

    文章

    662

    瀏覽量

    130139
  • PCIe
    +關(guān)注

    關(guān)注

    15

    文章

    1200

    瀏覽量

    82352
  • PCIe接口
    +關(guān)注

    關(guān)注

    0

    文章

    120

    瀏覽量

    9665

原文標(biāo)題:PCIe——Bar空間是怎么生效的

文章出處:【微信號(hào):Spinal FPGA,微信公眾號(hào):Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    6678通過(guò)pcie進(jìn)行boot時(shí),PC無(wú)法寫bar空間

    我使用windriver開(kāi)發(fā)了pcie的驅(qū)動(dòng),可以通過(guò)windriver看到分配的bao0和bar1空間,其地址范圍對(duì)應(yīng)的是DDR3的空間,此時(shí)出現(xiàn)問(wèn)題:可以通過(guò)windriver對(duì)
    發(fā)表于 03-28 16:06

    求教:關(guān)于DM8168的PCIe寄存器

    : ?????????????? 1.如何將DM8168 PCIe寄存器(地址是0x51000000)映射到它的內(nèi)核空間,這樣我就可以在內(nèi)核空間通過(guò)訪問(wèn)其對(duì)應(yīng)的虛擬地址查看PCIe寄存
    發(fā)表于 05-28 01:52

    關(guān)于PCIEBAR配置的問(wèn)題。

    \drv\exampleProjects\PCIE_exampleProject 里面的例子 這個(gè)工程可以成功跑起來(lái),并且在PC端通過(guò)用WinDriver可以看到設(shè)備,但是目前有一個(gè)關(guān)于例程中BAR配置
    發(fā)表于 06-19 00:50

    關(guān)于C6678的PCIEBAR配置問(wèn)題

    設(shè)備?,F(xiàn)在有幾個(gè)問(wèn)題想要搞明白: 1.pdk的PCIE例程中配置了bar1基地址為0x70000000,我通過(guò)WinDriver查看bar1基地址也是0x70000000,然后用WinDriver在
    發(fā)表于 06-19 04:33

    C6657 PCIE 問(wèn)題咨詢

    link 完成后, 在本地PCIE config空間映射的 EP端的config空間, 后續(xù)初始化EP端Bar base地址的時(shí)候,就是操作?gpPCIE_remote_EP_reg
    發(fā)表于 06-21 18:49

    C6678,PCIeBAR的地址范圍

    it to the?internal bus side.” 1.這段話的大概意思是說(shuō)PCIe接收數(shù)據(jù)包是有條件的,只有數(shù)據(jù)包中的PCIe地址在BAR配置的地址范圍內(nèi)時(shí),PCIe模塊才
    發(fā)表于 06-21 18:17

    如何通過(guò)BAR0和BAR1訪問(wèn)(讀/寫)寄存器?

    各位大家好,我正在嘗試使用我在Xilinx論壇下載的SP605連接套件參考設(shè)計(jì),我閱讀了用戶指南:我了解了如何通過(guò)BAR0和BAR1訪問(wèn)(讀/寫)寄存器,但我不明白如何通過(guò)PCIe(當(dāng)然還有DMA
    發(fā)表于 07-09 08:40

    如何使用AXI-PCIe橋接IP與我的邏輯進(jìn)行通信

    嗨,我正在使用AXI-PCIe橋接IP與我的邏輯進(jìn)行通信。我的poroject要求有128K內(nèi)存。我不知道如何配置AXI BAR地址來(lái)擴(kuò)展內(nèi)存。我閱讀了IP文檔,但沒(méi)有任何意義。目前我能夠從具有32K PCIe
    發(fā)表于 06-19 10:14

    關(guān)于PCI9054在BAR3空間讀取SDRAM數(shù)據(jù)地址需要*4的問(wèn)題

    板卡集成了16M*32Bit的SDRAM, 可通過(guò)BAR空間+頁(yè)地址訪問(wèn)。BAR3空間在本協(xié)議中規(guī)定為1M*32Bit的空間。所有的SDR
    發(fā)表于 05-14 16:23

    如何解決PCIe采集卡在3588J開(kāi)發(fā)板無(wú)法進(jìn)行大容量高端BAR Memory空間分配的問(wèn)題

    | 一、貴司3588J開(kāi)發(fā)板,4x PCIe插槽插入我司的PCIe采集卡,無(wú)法進(jìn)行大容量64MB的高端 BAR Memory地址空間分配問(wèn)題:1、lspci、lspci -vvv 及相
    發(fā)表于 10-20 14:56

    IMX8 PCIE BAR 15沒(méi)有空間是怎么回事?

    0x18900000-0x1890ffff pref][5.246523] pci 0000:01:00.0:BAR 0:[mem size 0x400000000 64bit pref]沒(méi)有空間[5.254191
    發(fā)表于 04-11 06:30

    體驗(yàn)紫光PCIE之使用WinDriver驅(qū)動(dòng)紫光PCIE

    可以表明主機(jī)與FPGA硬核能夠鏈接成功,link_up后主機(jī)內(nèi)核程序可以讀到PCIE的配置空間信息,進(jìn)而給FPGA的PCIE分配PCIE總線域空間
    發(fā)表于 11-17 14:35

    PCIeBar空間是怎么生效的?

    最近在研究cocotbext-pcie的實(shí)現(xiàn),對(duì)于學(xué)習(xí)PCIe還是挺有幫助的,陸陸續(xù)續(xù)做個(gè)總結(jié),有時(shí)間也會(huì)在SpinalHDL下實(shí)現(xiàn)類似的方針功能。
    的頭像 發(fā)表于 07-03 17:47 ?3822次閱讀
    <b class='flag-5'>PCIe</b>—<b class='flag-5'>Bar</b><b class='flag-5'>空間</b>是怎么<b class='flag-5'>生效</b>的?

    PCIe相關(guān)問(wèn)題解答

    CPU 發(fā)起的,訪問(wèn)PCIe設(shè)備配置空間的數(shù)據(jù)流。這種數(shù)據(jù)流主要是BIOS/Linux PCIe driver 對(duì)設(shè)備進(jìn)行初始化、資源分配時(shí),讀寫配置空間的。包括
    的頭像 發(fā)表于 09-15 09:39 ?1529次閱讀
    <b class='flag-5'>PCIe</b>相關(guān)問(wèn)題解答

    PCIEBAR空間介紹

    PCIE是一種高速串行總線接口標(biāo)準(zhǔn),用于連接計(jì)算機(jī)內(nèi)部的各種外設(shè)和組件。在PCIe架構(gòu)中,BAR(Base Address Register)空間是用于映射I/O端口或內(nèi)存地址
    的頭像 發(fā)表于 04-22 11:00 ?3896次閱讀