首先關於地址對齊的概念我不詳述了,你們能夠參考這篇文章:Avalon總線的地址對齊:Dynamic Addressing和Native Addressing。
html
假設咱們定製了一個外設,數據寬度是32位,地址是2位。若是咱們想讓地址線乾點其餘的事,而不是傳地址,例如:ios
1 if(cs&wr) 2 begin 3 case(addr) 4 2'b00: //自定義 5 2'b01: //自定義 6 endcase 7 end
那在Nios EDS中,如何肯定addr呢?也就是說咱們使用IOWR_32DIRECT(BASE, OFFSET, DATA)時,怎麼肯定OFFSET?spa
相信你們已經想到答案了,答案其實很簡單:OFFSET爲0x00對應addr爲2'b00,OFFSET爲0x04對應addr爲2'b01,OFFSET爲0x08對應addr爲2'b10,OFFSET爲0x0C對應addr爲2'b11。code
其餘數據寬度也是同樣,假設數據寬度是8位,地址是2位,IOWR_32DIRECT(BASE, 0x00, DATA)就是對應addr的2'b00,IOWR_32DIRECT(BASE, 0x01, DATA)就是對應addr的2'b01,其他類推便可。htm
還有一篇文章你們也能夠參考一下:理解Avalon總線的靜態地址對齊與動態地址對齊。blog