靜態地址邊界是由主連接埠資料寬度決定的字地址。
(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位)單位。