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





