理解Avalon總線的靜態地址對齊與動態地址對齊

儘管看了不少資料,但是一直對 Avalon slave 的動態地址對齊和靜態地址對齊的理解不是很透徹。前兩天自己做了一個SOPC的自定義組件,通過Deprecated這個選項的不同選取,一下子就理解了Avalon slave的兩種地址對齊方式之間的區別。

下面以Altera提供的PWM自定義外設的例子,介紹兩種地址對齊方式的區別。該例子有所改動,源代碼中的32-bit的接口被改成了8-bit的接口,如果不這樣改動的話,接口是32位,就不存在動態和靜態對齊之分,動態對齊和靜態對齊都是對於數據總線小於32-bit位寬的slave而言。

b6518765-0b94-48e7-a380-806145e08e2d.JPG

上圖是在製作自定義PWM組件時,在Deprecated選項框中,Slave  addressing選擇DYNAMIC

b626f762-7702-4ea7-a198-adcdd39984fc.JPG

上圖是在製作自定義PWM組件時,在Deprecated選項框中,Slave  addressing選擇NATIVE。

7c8b6d30-61cf-4519-8af3-239a490e04df.JPG

上圖中,把兩個自定義組件同時添加到系統中。由圖中可以看出,pwm_avalon_interface_dynamic_0這一外設的地址空間爲0x00000800 — 0x00000803,共4個字節;而pwm_avalon_interface_native_0這一外設的地址空間爲0x00000804 — 0x00000813共16個字節。

分析:在pwm_avalon_interface.v文件中,Avalon總線的地址寬度爲2-bit,因此一共會有4個數據。在使用動態地址對齊方式的時候,地址的增長方式以8-bit爲單位增長。這種方式的優點是可以得到一個連續的存儲器空間,但缺點是當32-bit的NIOS II core 對該外設每進行一次操作,則物理上相當於對該外設進行了4次操作,大部分寄存器類型的slave器件都不能容忍。在使用靜態地址對齊方式的時候,地址的增長以32-bit位單位增長。這種方式的缺點是相對於同樣的外設,他需要更大存儲空間,優點是每對該器件進行一次操作,實際的每次讀寫也的確只有一次,沒有額外的副作用。當一個32位的Nios II core讀一個8位寬的slave時,其獲得的32位數據低8位從slave獲取,而高24位則沒有定義。同樣,當它讀16寬的slave時,其獲得的32位數據低16位從slave獲取,而高16位則沒有定義。當Nios II core想繼續讀下一個8位(或16位)時,則需要增長字節地址4。除非你一定需要一個連續的地址空間,否則使用靜態地址對齊方式是比較保險的方式。

結論:在做自定義組件時,同樣的代碼,地址對齊方式選擇的不同,得到的自定義組件佔用的存儲器空間大小有所區別,通過這一細微的區別,可以很直觀的看出Avalon動態地址對齊和靜態地址對齊的差異。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章