MM的静态寻址和动态寻址
靜態地址邊界是由主端口數據寬度決定的字地址。
(1)對具有8位數據寬度的主端口,靜態地址邊界落在地址0x00,0x01,0x02,0x03…
(2)對于具有32位數據寬度的主端口,靜態地址邊界落在地址0x00,0x04,0x08,0x0C…
每個地址就8個字節,即一個字,一次操作就一個字節(byteenable)
?
?
(1)當主端口和從端口數據寬度一樣的時候------靜態地址邊界對齊
(2)當主端口和從端口數據寬度不一樣時--------動態地址邊界對齊
比如,SDRAM就是動態地址對齊。。。
?
靜態地址對齊:當從端口位數較小的時候。從端口映射到主端口較低位,高位填充為0;
?
動態地址對齊:當主端口有動態總線特性的從端尋址時,所有從端口數據在主端口地址空間按連續的字節對齊;
<1>如果主端口比從端口寬,則主端口高位對應從端口下一個位置對應。(32主端口,16位從端口,Avalon Switch Fabric進行兩次讀傳輸)
<2>如果主端口比從端口窄,則Avalon Switch Fabric自動設置byteenable信號有效,僅將數據寫到相應的從端口字節段
?
靜態地址對齊地址寬度: 1~128
動態地址對齊地址寬度:8,16,32,64,128
?
?
。。。。發現自己不懂的越來越多
?
下面轉載http://www.cnblogs.com/nick123/archive/2009/05/09/1453422.html
?
??? 首先要明確的一點是地址對齊的方式是對Avalon slave 來說的,Avalon master無所謂地址對齊的方式,也沒有這個選項。不管Avalon master的端口寬度是多少,其地址線的最低位都代表字節地址,即Avalon master的地址只有一種就是字節地址。另外,Avalon 三態橋出來的地址也是字節地址,所以連接Avalon三態橋的16位寬度的器件,最低地址位必須和三態橋的A1相連,而不是A0。同理,連接Avalon三態橋的32位寬度的器件,其最低地址位必須和三態橋的A2相連。
??? 對Avalon slave來說,有兩種地址對齊方式:動態地址對齊和靜態地址對齊。
??? 動態地址對齊:動態地址對齊可以自動適應和Avalon master端口寬度不同的器件,而同時保持地址增長的方式是以字節為單位增長的方式。匹配不同端口寬度的master和slave時使用動態地址對齊方式可以得到一個連續的存貯器空間。但動態地址對齊在讀操作的時候有副作用。當一個32位Nios II core讀一個8位寬的slave時,物理會產生4次8位的讀操作,而讀一個16位寬的slave時,則要產生2次的讀操作。大部分寄存器類型的外設不能容忍這種附作用,所以動態地址對齊一般不適合用于寄存器外設,主要用于存貯器。如果外部存貯器的寬度大于8位時,比如16位或32位,則必然有字節使能信號,以便進行字節粒度的寫操作。所以在為這些存貯器做接口的時候,如果采用動態地址對齊的方式,則一定要連接字節使能信號。
?? 靜態地址對齊:靜態地址對齊的地址增長單位是Avalon master的端口寬度,每次讀寫都只對應一次操作沒有什么附作用。但在匹配不同端口寬度的master和slave時,地址不能自動調整,某些地址沒有相應的物理實體和它對應。當一個32位的Nios II core讀一個8位寬的slave時,其獲得的32位數據低8位從slave獲取,而高24位則沒有定義。同樣,當它讀16寬的slave時,其獲得的32位數據低16位從slave獲取,而高16位則沒有定義。當Nios II core想繼續讀下一個8位(或16位)時,則需要增長字節地址4。除非你一定需要一個連續的地址空間,否則使用靜態地址對齊方式是比較保險的方式。
??? IORD和IOWR通常用于讀寫靜態地址對齊的slave,而IORD_XXDIRECT和IOWR_XXDIRECT通常用于讀寫動態地址對齊的slave。但其實也可以交叉使用,即用IORD和IOWR讀寫動態地址對齊的slave,用IORD_XXDIRECT和IOWR_XXDIRECT讀寫靜態地址對齊的slave,條件是你要正確的計算地址。IORD_XXDIRECT和IOWR_XXDIRECT以字節為單位,而IORD和IOWR以word(32位)單位。
轉載于:https://www.cnblogs.com/crazybingo/archive/2011/02/26/1966061.html
總結
以上是生活随笔為你收集整理的MM的静态寻址和动态寻址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux chmod 命令 详解
- 下一篇: 交换机的MAC地址