Rocket - tilelink - Edges


https://mp.weixin.qq.com/s/UggNsNOeEMP-GhzlLiT-qQ

 
簡單介紹Edges的實現。
 
 
1. TLEdge
 
包含client和manager兩端的邊,繼承TLEdgeParameters類:
 
1) isAligned
 
判斷訪問的地址和訪問大小是否對齊:
a. 如果最大訪問大小為1個字節,則訪問是對齊的;
b. 生成掩碼(lgSize=2, maxLgSize=4, mask=0b1100)與地址相與,計算是否為0;
 
2) mask
 
根據訪問的地址和大小生成訪問的掩碼:
 
3) isRequest
 
判斷channel x是否在執行請求:
 
因為Grant/GrantData需要GrantAck響應,所以也是請求:
8.3.5: A Grant message is both a response and a request message...
 
4) isResponse
 
channel x是否在傳輸響應:
 
5) hasData
 
判斷消息是否包含數據:
首先通過staticHasData檢查是否能在構建期(軟件代碼執行)得到答案,如果不能則生成硬件邏輯在硬件中進行判斷。
 
staticHasData根據client/manager的能力特點,看能否獲得恆定的答案:
 
6) opcode
 
獲取channel中的opcode部分:
 
可以看到這里使用的是TLDataChannel,而不是TLChannel:
a/b/c為TLAddrChannel,因為他們包含address這一項;
a/b/c/d為TLDataChannel,因為他們包含data這一項;
e既沒有address也沒有data,只是TLChannel;
 
7) param
8) size
9) data
10) corrupt
corrupt信號對應着規范中的valid。
 
11) mask
 
這里使用的為TLAddrChannel,只有a/b/c:
其中:a/b的mask外面提供,c的mask需要自己算;
 
full_mask都是自己算:
 
12) address
13) source
14) addr_hi/addr_lo
 
根據manager支持的位寬,把地址分成高低兩部分:
a. 低的部分為按照manager.beatBytes對齊的部分。比如beatBytes=4, 則低2位為低的部分;
b. 其余的高位為高的部分;
 
15) numBeats
 
計算把數據傳完需要多少個時鍾周期,即burst包含多少個beat:
a. manager.maxTransfer <= manager.beatBytes:如果最大傳輸大小,小於數據總線位寬,則一定能在一個時鍾周期(beat)內傳完;
b. 否則,需要看數據大小是否大於位寬:size <= UInt(cutoff);
c. 若small為真,則右移cutoff后decode為0,需要一個beat;
d. 若small為假,則small為0,需要的beat數取決於decode;
e. UIntToOH(size, maxLgSize+1)=2^size;
f. 需要的beat數為:2^size / 2^cutoff;
g. hasData為假,則沒有數據,需要一個beat;
 
16) first/last
 
2. TLEdgeOut
 
定義client到manager的輸出邊(EO),我為client,對端為manager。
 
1) Transfers
 
Cache Permission相關消息。
 
a. AcquireBlock
 
生成支持AcquireBlock的硬件連接:
 
b. AcquirePerm
 
 
c. Release
 
Release:
 
ReleaseData:
 
不會出錯的ReleaseData:
 
d. ProbeAck
 
直接傳入參數的ProbeAck:
 
通過b:Probe生成c:ProbeAck:
 
ProbeAckData同理;
 
e. GrantAck
 
 
2) Access
 
生成訪問消息硬件連接。
 
a. Get
 
 
b. Put
考慮因素:
- PutFull/PutPartial;
- corrupt是否固定;
- mask是傳入,還是自己生成;
 
c. Arithmetic
 
簡單數學運算消息:
 
d. Logical
 
簡單邏輯運算消息:
 
e. AccessAck
 
TLEdgeOut從client連向manager:
- client發起的Access消息從channel a傳遞,對應的AccessAck從b傳回;
- client發出的AccessAck消息從channel c傳遞,作為manager通過channel b傳來的Access消息的回應;
 
f. Hint
 
client通過channel a發送Hint消息:
 
g. HintAck
 
client通過channel c返回HintAck消息,以響應manager通過channel b發出的Hint請求消息:
 
3. TLEdgeIn
 
定義manager到client的輸入邊(EI),我為manager,對端為client。
 
1) Transfers
 
定義manager發出的與Cache Permission相關的消息。
 
a. Probe
 
從channel b發出:
 
b. Grant
 
Grant和GrantData通過channel d回復:
 
c. ReleaseAck
 
 
2) Access
 
定義訪問消息。
 
a. Get
 
manager通過channel b發起請求:
 
b. Put
c. Arithmetic
d. Logical
 
同上。
 
e. AccessAck
 
manager通過channel d回復client通過channel a發來的訪問請求:
 
f. Hint
 
manager通過channel b發起請求:
 
g. HintAck
 
manager通過channel d回復client通過channel a發來的Hint請求:
 


免責聲明!

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



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