NIOS II 自定義IP核的靜態地址對齊和動態地址對齊

如果使用靜態地址對齊(每個寄存器在Avalon總線上佔4個字節的地址)
設置IP使用靜態地址對齊的方式爲,在hw.tcl腳本里加上一局話:set_interface_property as addressAlignment {NATIVE}
在軟件編程時
可以使用IOWR(基地址,寄存器編號(n),數據)對自定義IP的第n個寄存器進行寫入操作
可以使用IORD(基地址,寄存器編號(n)) 對自定義IP的第n個寄存器進行讀出操作



如果使用動態地址對齊,(每個寄存器在Avalon總線上佔 數據位寬/8個字節的地址)(默認)
在軟件編程時,使用IOWR_32DIRECT(數據位寬爲32位)、IOWR_16DIRECT(數據位寬爲16位)、IOWR_8DIRECT(數據位寬爲8位)進行寫操作
在軟件編程時,使用IORD_32DIRECT(數據位寬爲32位)、IORD_16DIRECT(數據位寬爲16位)、IOWR_RDIRECT(數據位寬爲8位)進行寫操作

IOWR_8DIRECT(基地址、地址偏移量、數據),地址偏移量 = 寄存器編號*1
IOWR_16DIRECT(基地址、地址偏移量、數據),地址偏移量 = 寄存器編號*2
IOWR_32DIRECT(基地址、地址偏移量、數據),地址偏移量 = 寄存器編號*4

IORD_8DIRECT(基地址、地址偏移量),地址偏移量 = 寄存器編號*1
IORD_16DIRECT(基地址、地址偏移量),地址偏移量 = 寄存器編號*2
IORD_32DIRECT(基地址、地址偏移量),地址偏移量 = 寄存器編號*4

 

在SOPC Builder 8.0版本以前,地址對齊中有動態對齊(dynamic)和靜態對齊(Native)的兩個選項,但是現在它不推薦使用靜態對齊的方式。

因爲靜態對齊可能會有副作用(this coding could have negative side-effects)。

 

但是11.0等等新的版本中仍然有這個選項,只是放在deprecated(不推薦)中,而且默認爲dynamic的。

 

所以,總結是:

如果,自定義外設需要的數據位寬不是32bit,如8bit,那麼推薦兩種方式搞定

  1.writedata,readdata爲8bit,自定義外設中,配置爲Native方式。

  2.writedata,readdata爲32bit,只是高24bit無用,自定義外設中,配置爲dynamic(優選)或者Native方式。

  在寫軟件時,IOWR均可正常使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章