国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何從CPU角度來理解PCIe

SSDFans ? 來源:未知 ? 作者:胡薇 ? 2018-10-28 10:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、概述

CPU訪問外設寄存器與內存編址方式;

CPU如何訪問PCIe配置空間;

CPU能夠通過寄存器訪問配置空間,為什么還需要映射PCIe配置空間;

如何掃描PCIe樹并且為PCIe分配ID;

如何將pcie域地址映射到存儲器域地址空間。

通過本篇文章將對問題1、2、3做出解答。

二、統(tǒng)一編址于獨立編址

CPU編址是程序指令與物理地址線建立鏈接的方式,在CPU內部有專門的地址集合,編址過程是由CPU體系架構所決定的,參考示意圖如圖 1所示(僅僅代表示意圖,講解一種邏輯結構,不代表實際電路)。CPU編址時就已經(jīng)指定了0x8000_0000~0xFFFF_FFFF這個地址空間為連接到圖中內存的地址線,內存如何連接到CPU需要當參考CPU的datasheet,當CPU程序指令對0x8000_0000這個物理地址地址發(fā)起訪問時,等價于是在訪問圖中2G內存的首地址。

圖1

內存通過CPU地址總線來尋址定位,然后通過CPU數(shù)據(jù)總線讀寫數(shù)據(jù)。CPU的地址總線位數(shù)是CPU設計時確定,因此一款CPU所能尋址的地址范圍是一定的,而內存是需要占用CPU的尋址空間的,內存與CPU采用總線直接連接。

IO指的是與CPU連接的各種外設,CPU訪問各種外設有兩種方式:一種是類似于訪問內存的方式,即把外設的寄存器當成內存地址讀寫,從文可以以訪問內存方式操作外設寄存器。這時,IO與內存統(tǒng)一編址,IO地址與內存地址在同一個地址空間下,這種編址方式叫做IO與內存統(tǒng)一編址。

另外一種編址方式是IO地址與內存地址分開獨立編址,這種編址方式叫做獨立編址,此時,CPU訪問外設寄存器需要通過CPU特定的指令去訪問外設寄存器,而不能通過地址直接訪問外設寄存器。常見的ARM、PowerPc、MIPS架構都是采用統(tǒng)一編址,X86架構采用獨立編址。

三、訪問PCIe配置空間256bytes

PCI總線規(guī)定訪問配置空間總線事務,使用ID號進行尋址。PCI設備ID號由總線號(Bus Number)、設備號(Device Number)和功能號(Function Number)。其中總線號在HOST主橋遍歷PCI總線樹時確定,在一顆PCI總線樹上,總線號由系統(tǒng)軟件決定,通常與HOST主橋直接相連接的PCI總線編號為0,系統(tǒng)軟件使用DFS(Depth-First Search)算法掃描PCI總線樹上的所有PCI總線,并依次編號。

一條PCI總線的設備號由PCI設備的IDSEL信號與PCI總線地址線的連接關系確定,功能號與PCI設備的具體設計有關。一個PCIe系統(tǒng)最多有256條Bus,每條Bus上最多可以掛在32個設備,每個PCIe設備最多有8個功能設備。

在XX處理器中的HOST主橋中,與PCIE設備配置相關的寄存器由CFG_ADDR、CFG_DATA等組成。系統(tǒng)軟件使用CFG_ADDR(CFG_ADDR寄存器結構如圖 2所示)和CFG_DATA寄存器訪問PCIe設備的配置空間,這些寄存器都是采取同一編址(所有內存寄存器都使用存儲器映射方式進行尋址)。

當處理器訪問PCIe配置空間時,首先需要在CFG_ADD寄存器中設置這個PCIe設備對應的總線號、設備號、功能號和寄存器偏移,然后使能Enable位,之后當處理器對CFG_DATA讀寫訪問時,HOST主橋將這個存儲器讀寫訪問轉換成PCIe配置讀寫請求,并且發(fā)送到PCIe總線上。如果Enable位沒有使能,那么CPU對寄存器的訪問也就是一個普通IO的訪問,而不能讓HOST轉換成總線請求訪問,訪問PCIe配置空間時按照PCIe總線標準配置TLP請求,CFG_DATA是讀取的數(shù)據(jù)或者待寫入的數(shù)據(jù)。

圖2

31位:Enable位,為1時,對CFG_DATA讀寫才能轉換成PCIe總線配置請求。

30~24位:保留。

23~16位:總線號,最多=256個。

15~11位:設備號,最多=32個。

10~8位:功能號,最多=8個。

7~2位:寄存器偏移,最多訪問寄存器=64個地址,這里一個地址是DW,那么能干訪問的PCIe配置空間大小為64*4=256Byte,所以訪問PCIe配置空間都是以4字節(jié)對齊訪問的。

走到這里很多讀者可能就會有這樣的疑問,既然CPU能夠直接通過寄存器訪問配置空間,為啥還會出現(xiàn)配置空間在存儲域地址的映射這一說法呢?下面給出詳細解答。

訪問PCIe配置空間寄存器的方法需要追溯到原始的PCI規(guī)范。為了發(fā)起PCI總線配置周期,Intel(Intel是PCIe龍頭老大,最新的PCIe的規(guī)范總是它最先嘗試的)實現(xiàn)的PCI規(guī)范使用IO空間的CF8h和CFCh來分別作為索引和數(shù)據(jù)寄存器,這種方法可以訪問所有PCI設備的255 bytes配置寄存器。Intel Chipsets目前仍然支持這種訪PCI配置空間的方法。

PCIe規(guī)范在PCI規(guī)范的基礎上,將配置空間擴展到4K bytes,至于為什么擴展到4K,具體可以參考PCIe規(guī)范,這些配置CFG_ADDR和CFG_DATA寄存器方法仍然可以訪問所有PCIe設備配置空間的頭255 bytes,但是該方法訪問不了剩下的(255B~4K)配置空間。怎么辦呢?Intel外一種PCIe配置空間訪問方法。Intel Chipset通過將配置空間映射到內存地址空間,PCIe配置空間可以像對映射范圍內的內存進行read/write來訪問了。這種映射是由北橋芯片來完成的,但是不同芯片的映射方式也是不同的。目前我查看了ARM芯片的datasheet,確實是這樣的方式。

PCIe規(guī)范為每個PCIe設備添加了更多的配置寄存器,空間為4K,盡管CFG_ADDR和CFG_DATA寄存器方法仍然能夠訪問lower 255 bytes,但是必須提供另外一種方法來訪問剩下的(255B~4K)range寄存器。Intel的解決方案是使用了預留256MB內存地址空間,對這段內存的任何訪問都會發(fā)起PCIe 配置cycle。

由于4K的配置空間是directly mapped to memory的,那么PCIe規(guī)范必須保證所有的PCIe設備的配置空間占用不同的內存地址,按照PCIe規(guī)范,支持最多256個bus,每個Bus支持最多32個PCIe devices,每個device支持最多8個function,也就是說:占用內存的最大值為:256 * 32 * 8 * 4K = 256MB。圖 3是ARM Cortex-A9 datasheet內存地址分配局部圖。被PCIe配置空間占用的256M內存空間會屏蔽掉DRAM使用該段內存區(qū),這些地址都由CPU出廠時已經(jīng)固化好了。

圖3

四、PCIe配置空間的內存映射對32bit系統(tǒng)的影響

由于PCIe配置空間占用了256M內存空間,而且該被占用空間對DRAM來說是不可用的,這意味著256M空間消失于系統(tǒng)內存,這在32bit系統(tǒng)中更為明顯。比如,在32 bit winxp中(作者目前電腦還是用的XP系統(tǒng),電腦用了七八年了),理論上可以訪問到的內存是4G,如果4G空間都被DRAM給占用,由于PCIe的存在,被PCIe占用的那部分內存空間對OS來說是不可用的,莫名的消失了最多256M內存,其實還有其他外設寄存器需要映射到內存,如果是獨立編址就不存在寄存器占用內存。

所以在XP系統(tǒng)中實際能夠訪問DRAM空間最大值為3.2G。64位CPU尋址不存在這個情況,個地址目前來說應該用不完,這里讀者需要注意的是CPU有32和64位尋址方式,同樣操作系統(tǒng)也有32和64位之分,在Linux系統(tǒng)中主要體現(xiàn)在庫文件上。

有些CPU沒有直接指定PCIe配置空間的地址范圍,需要讀取某個寄存器的值BaseAddr,這個值就說PCIe配置寄存器在內存區(qū)域映射的基地址。訪問PCIe設備配置空間時候需要手動計算訪問PCIe配置空間的地址。計算發(fā)放如下:

SIZE_PER_FUNC = 4K = 1000h

SIZE_PER_DEVICE = 4K * 8 = 8000h

SIZE_PER_BUS = 4K *8* 32 = 100000h

訪問總線號為busNo,設備號為DevNo,功能號為funcNo的offset寄存器的計算公式是:

Memory Address = BaseAddr+ busNo * SIZE_PER_BUS+ devNo * SIZE_PER_DEVICE+ funcNo * SIZE_PER_FUNC+ offset

訪問PCIe配置空間就需要通過總線號、設備號、功能號、寄存器偏移進行轉換成內存地址。轉換函數(shù)如圖 2所示。

圖 4

問題4和5在下篇文章中講解,介于作者實力有限。如有錯誤,望讀者給出寶貴的意見。

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

    關注

    68

    文章

    11279

    瀏覽量

    224993
  • PCIe
    +關注

    關注

    16

    文章

    1461

    瀏覽量

    88422

原文標題:從CPU角度理解PCIe

文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    需求的角度理解Linux系列:總線、設備和驅動

    需求的角度理解Linux系列:總線、設備和驅動》是一篇有關如何學習嵌入式Linux系統(tǒng)的方法論文章,也是需求的角度
    發(fā)表于 03-11 14:45

    背光原理的角度分析LCD與LED的區(qū)別

    說到顯示技術,人們最先想到的就是液晶顯示(LED背光技術。但是很多人會將LCD與冷陰極熒光燈管混為一談,這顯然是不正確的,應該背光原理的角度進行區(qū)分,這樣才是最為正確的理解方式。希
    發(fā)表于 10-30 09:57

    數(shù)字化實現(xiàn)的角度理解PI環(huán)節(jié)

    本文數(shù)字化實現(xiàn)的角度理解PI(proportional integral, PI)環(huán)節(jié),為數(shù)字化實現(xiàn)PI打下基礎。...
    發(fā)表于 08-30 07:41

    EMC設計的角度解析無人機

    雄厚的飛控系統(tǒng)開發(fā)能力自然是必須的,強大的EMC設計能力也是至關重要的,本文結合實戰(zhàn)經(jīng)驗,EMC設計的角度解析無人機這一多系統(tǒng)集成的智能硬件產(chǎn)品!希望對大家有所幫助!
    的頭像 發(fā)表于 08-04 10:59 ?6694次閱讀
    <b class='flag-5'>從</b>EMC設計的<b class='flag-5'>角度</b><b class='flag-5'>來</b>解析無人機

    站在CPU角度看世界

    經(jīng)常聽到有人說磁盤很慢、網(wǎng)絡很卡,這都是站在人類的感知維度去表述的,比如拷貝一個文件到硬盤需要幾分鐘到幾十分鐘,夠我去吃個飯啦;而網(wǎng)絡下載一部電影,有時候需要幾個小時,我都可以睡一覺了。然而,CPU
    的頭像 發(fā)表于 08-12 11:12 ?4352次閱讀

    CPU核心數(shù)沒有那么重要 工作負載等角度服務客戶才最要緊

    在AMD連接推出32核以及64核的EPYC霄龍?zhí)幚砥髦螅?b class='flag-5'>CPU性能就開始走向依多為勝的局面。在這點上Intel采用原生架構的處理器沒法比了,主流桌面還是8核最多,至強處理器最多28核,不過Intel認為CPU核心數(shù)并不是唯一指標,而是
    發(fā)表于 02-04 15:04 ?1297次閱讀

    如何理解現(xiàn)場總線?工業(yè)通信的角度看看資料下載

    電子發(fā)燒友網(wǎng)為你提供如何理解現(xiàn)場總線?工業(yè)通信的角度看看資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-15 08:45 ?12次下載
    如何<b class='flag-5'>理解</b>現(xiàn)場總線?<b class='flag-5'>從</b>工業(yè)通信的<b class='flag-5'>角度</b>看看資料下載

    圖解PCIE原理(軟件角度

    1 PCIE基本概念1.1 PCIE拓撲架構圖1.2 PCIE Switch內部結構圖1.3 PCIE協(xié)議結構圖2 PCIE枚舉原理2.1
    發(fā)表于 12-17 18:29 ?29次下載
    圖解<b class='flag-5'>PCIE</b>原理(<b class='flag-5'>從</b>軟件<b class='flag-5'>角度</b>)

    PCIe 5.0標準加速云中的數(shù)據(jù)移動

      PCIe 5.0 也在推動對 CPU 和 SSD 控制器之間的 NVMe 驅動器的快速視頻存儲訪問所需的性能。存儲的角度來看,視頻的分辨率越來越高,這意味著控制器和
    的頭像 發(fā)表于 06-01 17:22 ?2112次閱讀

    如何匯編代碼理解enum

    Rust enum 是一個非常強大的特性, 很多人好奇他內部是如何實現(xiàn)的, 這里作者生成的匯編代碼幫你深入理解 Rust 的 enum. 一些關鍵結論:
    發(fā)表于 11-15 11:13 ?2348次閱讀

    仿真器的角度理解Verilog語言1

    只作為語法設定介紹,忽略了Verilog語言的軟件特性和仿真特性。使得初學者無法理解Verilog語言在行為級語法(過程塊、賦值和延遲)背后隱藏的設計思想。本文嘗試仿真器的角度對V
    的頭像 發(fā)表于 05-25 15:10 ?1602次閱讀
    <b class='flag-5'>從</b>仿真器的<b class='flag-5'>角度</b><b class='flag-5'>理解</b>Verilog語言1

    仿真器的角度理解Verilog語言2

    只作為語法設定介紹,忽略了Verilog語言的軟件特性和仿真特性。使得初學者無法理解Verilog語言在行為級語法(過程塊、賦值和延遲)背后隱藏的設計思想。本文嘗試仿真器的角度對V
    的頭像 發(fā)表于 05-25 15:10 ?1498次閱讀
    <b class='flag-5'>從</b>仿真器的<b class='flag-5'>角度</b><b class='flag-5'>理解</b>Verilog語言2

    硬件軟件角度理解Gadget框架

    2. 硬件軟件角度理解 Gadget 框架 USB 傳輸?shù)暮诵氖?endpoint,使用 endpoint 可以收發(fā)數(shù)據(jù)。在 endpoint 之上,就可以模擬 USB 串口、USB 觸碰屏
    的頭像 發(fā)表于 07-13 11:32 ?2135次閱讀
    <b class='flag-5'>從</b>硬件軟件<b class='flag-5'>角度</b><b class='flag-5'>理解</b>Gadget框架

    理解PCI和PCIE的關鍵

    理解 PCI 和 PCIE 的關鍵 地址空間轉換 PCI 接口速覽 PCI 是并行口,引腳多。其中 Address 和 Data 復用 PIN 腳,因此引腳命名為 AD。 隨著速率的提升,并行口引腳
    的頭像 發(fā)表于 07-30 09:44 ?2606次閱讀
    <b class='flag-5'>理解</b>PCI和<b class='flag-5'>PCIE</b>的關鍵

    什么是PCIePCIe有什么用途?PCIe 5.0有何不同?

    隨著英特爾Alder Lake CPU的發(fā)布,以及AMD 7000 Ryzen CPU的即將發(fā)布,PCIe 5.0 硬件終于成為現(xiàn)實。但什么是 PCIe 5.0?
    的頭像 發(fā)表于 11-18 16:48 ?6370次閱讀
    什么是<b class='flag-5'>PCIe</b>?<b class='flag-5'>PCIe</b>有什么用途?<b class='flag-5'>PCIe</b> 5.0有何不同?