AXI協議中的模棱兩可的含義的解釋(Cachable和Bufferable)


轉載:https://blog.csdn.net/hit_shaoqi/article/details/53243173

Cachable和Bufferable
一個Master發出一個讀寫的request,中間要經過很多Buffer,最后才能送到memory。這些Buffer的添加是為了outstanding,timing,performance等。
Buffer有兩種類型:一種FIFO結構,僅僅就是保存發送Request給下一級或者返回Response給上一級。還有一種Buffer,在接受了上一級的Request之后立刻給上一級回response,告訴上一級這個操作已經做完了,而實際上這個操作並沒有發到下一級Buffer,更沒有被送到memory。有的人可能就問,write的時候這樣可以,read的時候則無法這么做。其實read一樣有bufferable,如果此處buffer的write data channel有此read需要的數據,就可以直接返回,而不用去訪問memory,如果沒有,則要把Request發到下一級。
總之,所以的訪問都要經過這些buffer,是否bufferable在於何時由誰回response,在於是否要把request送到最終的memory。
Cacheable
Interconnect其實只是一個路由的功能,內部有buffer,但並沒有cache。而是在這個訪問從Master發起request到送到最終的memory這個過程中,可能會經過一些cache,cacheable代表了是不是要去這個cache中查找自己需要的數據。要不要更新cache。
利用cache來提高性能,有些操作是要求絕對non-cacheable的,比如device 內部寄存器的訪問,這些都是MMR。只能使用non-cachable。
AXI 五個channel所有的信號,可以是Master-Interconnect,也可以是Interconnect-Slave,也可以直接是Master-Slave。
outstanding 亂序與穿插
簡單講,如果沒有outstanding,或者說outstanding能力為1,則AXI Master的行為如下:
讀操作:讀地址命令->等待讀數據返回->讀地址命令->等待讀數據返回->讀地址命令->等待讀數據返回。。。。。
寫操作:寫地址命令->寫數據->等待寫響應返回->寫地址命令->寫數據->等待寫響應返回。。。。。(如果支持out-of-order,對於AXI3,寫命令和寫數據不一定有先后順序且ID順序不一定相同,AXI4因為已經沒有WID信號,所以寫數據的順序要和寫地址的順序一樣)
而如果outstanding能力為N>1的話,則:
讀操作:可以連續發N個讀地址命令,這期間如果讀數據沒有返回,則需要需要等待讀數據返回,如果有讀數據返回,則返回了幾個,那么仍然可以接着發幾個。也就是說,“在路上” 的讀命令(或者讀數據)最多可以是N。多說一點,可以看出,如果數據返回得比較慢,那么IP需要等待,效率就會比較低,因此,為了提高效率,有必要提高outstanding能力,以彌補”路上“(總線)引入的延時。但是也不能無限制地發,有可能會引起總線擁塞,把其他IP給堵住。
寫操作:可以連續發出N組寫地址(寫數據)命令,這期間如果寫響應沒有返回,則必須等待寫響應返回才能接着發寫地址(寫數據)命令,如果有寫響應返回,則返回了幾個,那么仍然可以接着發幾組。也就是說,“在路上” 的寫響應最多可以是N。
out of order 和interleave
亂序和間插是兩個完全不同的概念。籠統的說,亂序指的是burst這個粒度,而間插指的是beat這個粒度。
簡單說了,亂序是salve返回master請求的out of order特性,但這個slave可以是廣義上的,一般總線會完成這個功能;而間插(interleave)是指寫數據,或是讀返回數據,按找不同ID交織出現。比如:ID0 ID1 ID0 ID1....。亂序和間插都有深度,一般亂序深度比間插大的多。上面那個例子就是間插深度為2的情況。
exclusive 和lock
首先,Lock在amba2.0中就有涉及,意思是,某個master 可以通過Lock 總線來實現獨占。只有當該master完成傳輸后才釋放出總線。這樣的話,總線的效率會降低。 2. 相比Lock,AXI 中引入了exclusive操作,不需要將bus鎖定給某個master。而是通過TAG ID以及slave 返回的response來判斷當前的傳輸是否成功。過程如下:
 1)mst 首先向slave的某個地址位置發起一個exclusive讀操作。slave中的monitor會紀錄下該mst的 ARID和 要訪問的地址位置(返回EXOKEY)。
 2)mst向同一地址區域發起一exclusive寫操作。slave同樣要記錄該操作的mst的 AWID 和 要訪問的地址位置。如果AWID==ARID && 該地址內容沒有改變(沒有 其他的mst訪問過),這個寫操作就是成功的。該地址就會更新,同時slv會返回EXOKEY. 否則,slv會返回OKEY.
 由此看來,對於exclusive操作,總線其實允許其他mst同時來請求總線。比如,當其他mst要同時通過總線訪問其他的slv時,上述2)就不滿足,所以總線就不會被鎖定。
————————————————
版權聲明:本文為CSDN博主「南方鐵匠」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/hit_shaoqi/java/article/details/53243173


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM