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

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

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

地址邊界與地址對(duì)齊

jf_78858299 ? 來源:芯工阿文 ? 作者:芯工阿文 ? 2023-01-21 16:39 ? 次閱讀

數(shù)據(jù)傳輸是基于地址進(jìn)行的。在分析和設(shè)計(jì)微架構(gòu)時(shí),除了地址域之外,如何選擇地址信號(hào),我覺得也是值得注意的問題。

地址邊界

還記得剛開始工作時(shí),被安排維護(hù)AXI總線重排序的公共模塊,當(dāng)時(shí)有一個(gè)地址對(duì)齊的概念,如64Byte地址邊界、128Byte或者256Byte地址邊界,那會(huì)花了有一段時(shí)間才搞清楚,但也僅僅是搞清楚,也不清楚引入這一概念的原因,能解決哪些問題。

所謂地址邊界,若某地址能夠被一整數(shù)除凈,該地址就稱為整數(shù)對(duì)應(yīng)的地址邊界。在系統(tǒng)內(nèi)都是以0/1的二進(jìn)制,這一整數(shù)一般指的是2的冪次方,如4、8、16、64、128等等。舉例來說,0x200, 0x240, 0x880等等都是64Byte地址邊界;0x200,0x880是128Byte地址邊界,但0x240不是128Byte地址邊界。再談?wù)凜acheLine的概念。為提升系統(tǒng)訪問內(nèi)存的速度,通常會(huì)引入緩存Cache,也就是將Memory的內(nèi)容先搬運(yùn)到CPU附近。這一緩存是以塊為單位的,需要訪問時(shí),則先將對(duì)應(yīng)的緩存塊搬運(yùn)到Cache內(nèi)。這一緩存塊就稱為CacheLine,是緩存Cahe管理的最小單位,可基于系統(tǒng)需求選擇大小,如64Byte或128Byte,甚至是4KByte。每個(gè)CacheLine,除了存儲(chǔ)其本身的數(shù)據(jù)之外,還需要記錄其地址、是否修改等等額外信息。粒度越小,記錄額外信息的資源占比越大;粒度大了,又會(huì)對(duì)數(shù)據(jù)的利用率下降;具體大小則需基于需求來確定,如對(duì)于AI/GPU計(jì)算,可考慮使用4KByte的Caheline。

地址對(duì)齊

在考慮微架構(gòu)設(shè)計(jì)和軟硬件接口時(shí),訪問Memory盡可能按照整塊地址的訪問,地址邊界對(duì)齊,尤其是寫操作。在一般的CPU計(jì)算機(jī)系統(tǒng),采用的地址邊界大小至少為64Byte,使用更大的區(qū)間,如128Byte/256Byt,在一些場(chǎng)景也是能夠帶來收益的。

數(shù)據(jù)總線利用率

系統(tǒng)互聯(lián)總線的位寬較大,如128、256、512bit,甚至2048bit。但是,每一拍數(shù)據(jù)的地址并不是隨機(jī),而必須基于一定規(guī)則排列,參考AXI協(xié)議,如256bits的數(shù)據(jù)位寬,其地址低位必須是0-31。傳輸32Byte數(shù)據(jù),若起始地址為32Byte邊界對(duì)齊,1拍可以傳輸完成,利用率為100%,否則需要占用2拍,其利用率只有50%。

圖片

對(duì)于PCIe數(shù)據(jù)傳輸來說,其數(shù)據(jù)長(zhǎng)度單位為DW,即4Byte,因此由于地址邊界不對(duì)齊帶來的影響比較小。

Full/Partial Write

系統(tǒng)存在CacheLine的定義,若訪問操作為整CacheLine的寫操作,則稱為Full Write,否則為Partial Write。舉例,CacheLine為64Byte,若訪問地址低6位為0,長(zhǎng)度為64Byte,就是Full Write;低6位不為0,或長(zhǎng)度不為64Byte整數(shù)倍,則存在Partial操作。非地址對(duì)齊的訪問操作,容易造成Partial Write,引入性能問題。

Read-modify-write

對(duì)于Cache、DDR,或者其余類似的Memory系統(tǒng),存在最小操作粒度的概念。若寫訪問操作小于該最小操作粒度,則需要引入Read-modify-write。將對(duì)應(yīng)地址的數(shù)據(jù)塊讀取出來,進(jìn)行修改,再將數(shù)據(jù)寫入對(duì)應(yīng)地址,需要占用讀通道的帶寬。對(duì)于地址對(duì)齊的整塊訪問,直接寫入即可。

DMA的地址選擇

Host與PCIe Device之間大量數(shù)據(jù)的傳輸,基本都是由DMA(Direct Memory Access)完成的。簡(jiǎn)單來說,DMA就是從一個(gè)地址(源地址)讀取連續(xù)的數(shù)據(jù),再寫入到另一個(gè)地址(目的地址)。硬件邏輯提供源地址、目的地址和搬運(yùn)長(zhǎng)度的軟件編程接口,再被軟件進(jìn)行調(diào)用。復(fù)雜一些的硬件實(shí)現(xiàn),還可以支持描述符、鏈表、搬運(yùn)方式配置和其余系統(tǒng)屬性的配置等等特性,如支持完成中斷。

至于對(duì)數(shù)據(jù)搬運(yùn)的地址選擇,則是由調(diào)用DMA的軟件進(jìn)行控制的,但是也會(huì)受到上下游模塊的約束,如Device側(cè)的硬件引擎模塊等等。

在考慮DMA數(shù)據(jù)流時(shí),需基于系統(tǒng)層面對(duì)各模塊的數(shù)據(jù)訪問需求進(jìn)行設(shè)計(jì),盡可能使得DMA在Host和Device之間的數(shù)據(jù)搬運(yùn)是地址邊界對(duì)齊的。這一對(duì)齊包含兩個(gè)方面,一是訪問Device/Host的讀寫訪問是基于地址邊界對(duì)齊,二是源地址和目的地址的低位是相等的。兩者其實(shí)是類似的,沒有滿足后者,也會(huì)引入大量的非地址對(duì)齊的操作。至于后者的地址低位,則需基于硬件實(shí)現(xiàn)進(jìn)行考慮,考慮點(diǎn)就是上面描述的幾點(diǎn)要素。

再來看看第二方面引入的邏輯復(fù)雜度,源地址和目的地址的低位相等??紤]源和目的方向使用了AMBA總線,數(shù)據(jù)位寬為512bit/64Byte,若需支持地址不對(duì)齊的場(chǎng)景,則需要512個(gè)64bit位寬的MUX;若僅需支持地址的低6bit相等,則完全不需要進(jìn)行移位處理;若僅需支持地址的低2bit性能,硬件邏輯規(guī)模也減小為512個(gè)16bit位寬的MUX。大量的MUX邏輯也容易引入Congestion風(fēng)險(xiǎn),需要做額外的優(yōu)化處理。

圖片

結(jié)語

地址對(duì)齊的概念非常簡(jiǎn)單,但容易被忽略。對(duì)于軟件人員來說,DMA就是應(yīng)該支持任意地址到任意地址的數(shù)據(jù)搬運(yùn);但對(duì)硬件設(shè)計(jì)來說,可能需要付出很大的代價(jià)才能達(dá)成要求??梢钥紤]做一些折衷,軟件做一些簡(jiǎn)單修改,使用地址對(duì)齊的數(shù)據(jù)搬運(yùn),硬件實(shí)現(xiàn)側(cè)對(duì)地址對(duì)齊的操作進(jìn)行盡量的優(yōu)化,而對(duì)非地址對(duì)齊的做一些簡(jiǎn)化處理,不考慮性能但滿足功能,達(dá)到較優(yōu)的PPA。

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

    關(guān)注

    9

    文章

    1914

    瀏覽量

    64646
  • 地址
    +關(guān)注

    關(guān)注

    1

    文章

    32

    瀏覽量

    10777
  • 微架構(gòu)
    +關(guān)注

    關(guān)注

    0

    文章

    22

    瀏覽量

    7048
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    購買海外虛擬IP地址可以通過以下幾種方式#虛擬IP地址

    ip地址
    jf_62215197
    發(fā)布于 :2024年08月16日 07:16:04

    如何實(shí)現(xiàn)局部數(shù)組的地址對(duì)齊?

    Hello我想使局部數(shù)組地址128字節(jié)對(duì)齊,不知道在C6000平臺(tái),CCS5.5上,能否實(shí)現(xiàn)。全局變量,用DATA#pragma DATA_ALIGN(arr,128),但是不知道局部數(shù)組如何實(shí)現(xiàn)地址
    發(fā)表于 08-27 10:22

    【工程源碼】NIOS II 自定義IP核的靜態(tài)地址對(duì)齊和動(dòng)態(tài)地址對(duì)齊

    本文和設(shè)計(jì)代碼由FPGA愛好者小梅哥編寫,未經(jīng)作者許可,本文僅允許網(wǎng)絡(luò)論壇復(fù)制轉(zhuǎn)載,且轉(zhuǎn)載時(shí)請(qǐng)標(biāo)明原作者。如果使用靜態(tài)地址對(duì)齊(每個(gè)寄存器在Avalon總線上占4個(gè)字節(jié)的地址)設(shè)置IP使用靜態(tài)
    發(fā)表于 02-27 19:20

    探討一下地址邊界地址對(duì)齊的概念及其選擇

    數(shù)據(jù)傳輸是基于地址進(jìn)行的。在分析和設(shè)計(jì)微架構(gòu)時(shí),除了地址域之外,如何選擇地址信號(hào),我覺得也是值得注意的問題。地址邊界還記得剛開始工作時(shí),被安
    發(fā)表于 09-07 14:41

    請(qǐng)問MDK怎么讓一個(gè)函數(shù)對(duì)齊到1K地址邊界?

    RT,需要運(yùn)行時(shí)刪除部分函數(shù),怎么讓它對(duì)齊在flash扇區(qū)邊界上?
    發(fā)表于 11-03 07:49

    IP地址,IP地址是什么意思

    IP地址,IP地址是什么意思 基本定義 IP地址都是一個(gè)十分重要的概念,INTERNET的許多服務(wù)和特點(diǎn)都是通過IP地址體現(xiàn)出來的。
    發(fā)表于 04-03 15:12 ?1676次閱讀

    ATM地址,ATM地址是什么意思

    ATM地址,ATM地址是什么意思 異 步傳輸模式(ATM)使用地址來確定和定位ATM設(shè)備。在ATM中,地址是呼叫建立過程中通過UNI信令確定的,然后據(jù)此尋找合
    發(fā)表于 04-06 16:00 ?1528次閱讀

    基于ARM程序的字節(jié)對(duì)齊的分析

    首先說說,什么叫對(duì)齊。如果一個(gè)數(shù)據(jù)是從偶地址開始的連續(xù)存儲(chǔ),那么它就是半字對(duì)齊,否則就是非半字對(duì)齊;半字對(duì)齊的特征是bit0=0,其他位為任
    發(fā)表于 09-19 16:04 ?0次下載

    mac地址和ip地址是什么決定的

    IP地址是指互聯(lián)網(wǎng)協(xié)議地址(英語:Internet Protocol Address,又譯為網(wǎng)際協(xié)議地址),是IP Address的縮寫。IP地址是IP協(xié)議提供的一種統(tǒng)一的
    發(fā)表于 03-07 17:14 ?7764次閱讀
    mac<b class='flag-5'>地址</b>和ip<b class='flag-5'>地址</b>是什么決定的

    什么叫偏移地址_偏移地址怎么計(jì)算

    本文開始介紹了什么是偏移地址或概念,其次介紹了偏移地址的計(jì)算方法及段地址和偏移地址計(jì)算規(guī)律,最后介紹了獲取C++類成員變量的地址偏移方法。
    的頭像 發(fā)表于 04-16 09:42 ?10.7w次閱讀
    什么叫偏移<b class='flag-5'>地址</b>_偏移<b class='flag-5'>地址</b>怎么計(jì)算

    一個(gè)跟地址對(duì)齊有關(guān)的應(yīng)用異常案例

    也就是說,基于CortexM3內(nèi)核的芯片,它支持部分指令的非對(duì)齊訪問,但非對(duì)齊訪問要慢于對(duì)齊訪問。即非對(duì)齊訪問是需要代價(jià)的,訪問效率會(huì)受到影響。所以,我們?cè)趹?yīng)用中要盡量遵循
    的頭像 發(fā)表于 02-04 15:20 ?2572次閱讀
    一個(gè)跟<b class='flag-5'>地址</b><b class='flag-5'>對(duì)齊</b>有關(guān)的應(yīng)用異常案例

    工程師筆記|一個(gè)地址對(duì)齊引起的 HardFault 異常

    關(guān)鍵詞:地址對(duì)齊,Hardfault,STM32G0 目錄預(yù)覽 1. 概述 2. 問題描述與分析 3. 問題解決 4. 總結(jié) 1.概述 客戶在使用 STM32G070 的時(shí)候,KEIL MDK 為
    的頭像 發(fā)表于 02-10 11:05 ?2328次閱讀

    一個(gè)地址對(duì)齊引起的HardFault異常

    一個(gè)地址對(duì)齊引起的 HardFault 異常
    的頭像 發(fā)表于 09-18 10:57 ?840次閱讀
    一個(gè)<b class='flag-5'>地址</b>未<b class='flag-5'>對(duì)齊</b>引起的HardFault異常

    AXI總線:讀寫地址結(jié)構(gòu)

    。 控制信息以及起始地址在讀/寫地址通道(AWC/ARC)傳輸。 注意:?jiǎn)未?burst 傳輸中的數(shù)據(jù),其地址不能跨越 4KB 邊界。 關(guān)于這點(diǎn)在筆者參考的一個(gè)來源這樣表示,目前筆者覺
    的頭像 發(fā)表于 10-31 16:06 ?1067次閱讀
    AXI總線:讀寫<b class='flag-5'>地址</b>結(jié)構(gòu)

    怎么綁定IP地址和MAC地址

    本篇文章主要說一說怎么在本地計(jì)算機(jī)上綁定IP和MAC地址以及通過路由器綁定IP和MAC地址,并且這兩者綁定可以解決什么問題。 ? 先來說說怎么去綁定 本地計(jì)算上綁定IP和MAC地址: 首先獲取IP
    的頭像 發(fā)表于 12-01 22:48 ?275次閱讀