對(duì)于AHB邊界地址為1KB,元芳你怎么看?
掃描二維碼
隨時(shí)隨地手機(jī)看文章
眾所周知,AHB是ARM公司開(kāi)發(fā)的一種高性能總線協(xié)議,屬于AMBA(Advanced Microcontroller Bus Architecture)家族的一部分。在對(duì)應(yīng)的AMBA總線手冊(cè)中我們經(jīng)常會(huì)看到這樣的描述:
其中1KB(2^10)邊界地址是一個(gè)重要的設(shè)計(jì)約束,AHB協(xié)議規(guī)定?突發(fā)傳輸(burst transfer)不能跨越1KB地址邊界,這意味著任何?突發(fā)傳輸?shù)牡刂贩秶仨毾拗圃谕粋€(gè)1KB地址空間內(nèi)(例如0x000-0x3FF, 0x400-0x7FF等),實(shí)際上這也是總線上設(shè)備地址空間的最小粒度和地址對(duì)齊單位。這里之所以定為1KB邊界,通常與總線保護(hù)機(jī)制和地址空間劃分有關(guān),也有傳說(shuō)與早期操作系統(tǒng)對(duì)頁(yè)(Page)大小的定義有關(guān),但實(shí)際上內(nèi)存頁(yè)大小與1KB不是一回事。
在總線系統(tǒng)中設(shè)置1KB邊界地址,可避免因?yàn)檩^長(zhǎng)突發(fā)傳輸占用總線時(shí)間過(guò)長(zhǎng)降低系統(tǒng)性能,導(dǎo)致其他設(shè)備或者組件掛死,有了這樣的要求約定,從某種程度上也限制簡(jiǎn)化了地址譯碼等邏輯的構(gòu)建(例如,只需要檢查地址高位即可判斷訪問(wèn)的是哪個(gè)設(shè)備),避免了非對(duì)齊地址訪問(wèn)帶來(lái)的邏輯處理。
實(shí)際使用時(shí),如果突發(fā)傳輸跨越1KB,可能就會(huì)導(dǎo)致部分?jǐn)?shù)據(jù)訪問(wèn)到當(dāng)前設(shè)備的地址相鄰設(shè)備上,而此時(shí)相鄰的設(shè)備可能并未收到完整的控制信息和數(shù)據(jù)信息,從而可能會(huì)產(chǎn)生錯(cuò)誤。因此,從某種程度上來(lái)說(shuō),這樣的規(guī)定可以防止跨設(shè)備訪問(wèn)產(chǎn)生錯(cuò)誤,從而可能導(dǎo)致系統(tǒng)錯(cuò)誤等。
那么,如果確實(shí)需要跨1KB邊界傳輸,應(yīng)該怎么處理呢?此時(shí)可以考慮對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行拆分,拆分的塊分別在各自的1KB地址空間內(nèi)完成。或者通過(guò)主機(jī)重新發(fā)送非連續(xù)傳輸序列。例如:第一次傳輸起始地址為0x0F00,第二次傳輸起始地址為0x1000。
另外,在實(shí)際面對(duì)要訪問(wèn)的地址空間時(shí),如何對(duì)1KB邊界進(jìn)行判斷呢?比較簡(jiǎn)單的方式就是用當(dāng)前地址除以1KB即可,如果能夠整除,那么該地址即是1KB邊界,例如0x0000-0x03FF就是1KB空間。
因此,1KB邊界地址的設(shè)計(jì)可以為系統(tǒng)的穩(wěn)定性和安全性提供重要保障,簡(jiǎn)化了設(shè)計(jì)系統(tǒng)和地址編解碼的復(fù)雜度,確保了突發(fā)傳輸不會(huì)意外跨越到不同的外設(shè)地址空間,方便了設(shè)計(jì)人員進(jìn)行地址空間和總線設(shè)備的管理。如果在實(shí)際使用中,如果確實(shí)需要進(jìn)行跨邊界訪問(wèn),那么可以采取上述對(duì)應(yīng)的措施,進(jìn)行拆分傳輸。





