3. CCIX協(xié)議層
3.4 事務(wù)結(jié)構(gòu)
3.4.1 請(qǐng)求事務(wù)
基于結(jié)構(gòu)的不同請(qǐng)求類(lèi)型如下:
全一致性讀事務(wù),包括:ReadUnique,ReadClean, ReadNotSharedDirty,ReadShared。其事務(wù)流程如下圖。
請(qǐng)求芯片發(fā)出一個(gè)讀請(qǐng)求事務(wù),占用一個(gè)請(qǐng)求信用(request credit)。
主芯片返回讀數(shù)據(jù)和相應(yīng)的事務(wù)響應(yīng)(使用CompData操作碼)。
請(qǐng)求者發(fā)送確認(rèn)響應(yīng),確認(rèn)事務(wù)完成(使用CompAck操作碼)。
非一致性或IO一致性讀事務(wù),包括:ReadNoSnp,ReadOnce,ReadOnceCleanInvalid,ReadOnceMakeInvalid。其事務(wù)流程如下圖。
請(qǐng)求芯片發(fā)出一個(gè)讀請(qǐng)求事務(wù),占用一個(gè)請(qǐng)求信用(request credit)。
主芯片返回讀數(shù)據(jù)和相應(yīng)的事務(wù)響應(yīng)(使用CompData操作碼)。
此類(lèi)事務(wù)不需要CompAck
無(wú)CompAck的無(wú)數(shù)據(jù)事務(wù),包括:CleanShared,CleanSharedPersist,CleanInvalid,MakeInvalid,Evict. 其事務(wù)流程如下圖。
請(qǐng)求芯片發(fā)出一個(gè)讀請(qǐng)求事務(wù),占用一個(gè)請(qǐng)求信用(request credit)。
主芯片返回Comp響應(yīng)
有CompAck的無(wú)數(shù)據(jù)事務(wù),包括:CleanUnique,MakeUnique。事務(wù)流程如下圖。
請(qǐng)求芯片發(fā)出一個(gè)讀請(qǐng)求事務(wù),占用一個(gè)請(qǐng)求信用。
主芯片返回Comp響應(yīng)
請(qǐng)求者發(fā)送確認(rèn)響應(yīng),確認(rèn)事務(wù)完成(使用CompAck操作碼)。
所有寫(xiě)事務(wù)都使用相同的事務(wù)結(jié)構(gòu)。事務(wù)流程如下圖。
請(qǐng)求芯片發(fā)送一個(gè)寫(xiě)請(qǐng)求(帶數(shù)據(jù)),占用一個(gè)請(qǐng)求信用和一個(gè)數(shù)據(jù)信用。
主芯片返回Comp響應(yīng)。
原子事務(wù)基于Comp響應(yīng),分成兩類(lèi),一類(lèi)是AtomicStore(無(wú)數(shù)據(jù)),另一類(lèi)是AtomicLoad,AtomicSwap,AtomicCompare(有數(shù)據(jù))。事務(wù)流程如下圖。
求芯片發(fā)送一個(gè)原子請(qǐng)求(帶數(shù)據(jù)),占用一個(gè)請(qǐng)求信用和一個(gè)數(shù)據(jù)信用。
主芯片返回Comp(對(duì)應(yīng)AtomicStore)或CompData(對(duì)應(yīng)non-AtomicStore)。
3.4.2 監(jiān)聽(tīng)事務(wù)
無(wú)數(shù)據(jù)響應(yīng)的監(jiān)聽(tīng)事務(wù)流程如下
主芯片發(fā)送監(jiān)聽(tīng)請(qǐng)求,占用一個(gè)監(jiān)聽(tīng)信用(snoop credit)。
被監(jiān)聽(tīng)的芯片返回SnpResp,監(jiān)聽(tīng)響應(yīng),包
有數(shù)據(jù)響應(yīng)的監(jiān)聽(tīng)事務(wù)流程如下
主芯片發(fā)出監(jiān)聽(tīng)請(qǐng)求(除去SnpMakeI),占用一個(gè)監(jiān)聽(tīng)信用。
被監(jiān)聽(tīng)的芯片返回?cái)?shù)據(jù)和響應(yīng)的響應(yīng)(SnpRespData或SnpRespDataPtl )
3.5 地址,控制和數(shù)據(jù)
3.5.1 地址和數(shù)據(jù)分配
對(duì)于讀、無(wú)數(shù)據(jù)、寫(xiě)和原子事務(wù),使用Addr字段和NonSec比特位訪問(wèn)內(nèi)存位置。對(duì)于訪問(wèn)小于一個(gè)緩存行大小的ReadNoSnp、WriteNoSNPTL、WriteUniquePtl和原子事務(wù),如果Addr[5:0]不全為零,則需要包含低階地址位的擴(kuò)展字段。如果Addr[5:0]全部為零,則允許(但不要求)使用擴(kuò)展字段。原子事務(wù)中的地址必須與操作數(shù)大小對(duì)齊。對(duì)于監(jiān)聽(tīng)請(qǐng)求,Addr字段和NonSec指向可以被監(jiān)聽(tīng)的地址。這兩個(gè)字段足以唯一標(biāo)識(shí)監(jiān)聽(tīng)要訪問(wèn)的緩存行。
3.5.2 請(qǐng)求屬性
請(qǐng)求屬性表示請(qǐng)求數(shù)據(jù)的大小、內(nèi)存類(lèi)型及其屬性。內(nèi)存類(lèi)型可以是設(shè)備(device)或普通(normal)。關(guān)于這兩種類(lèi)型可以參考以前的文章。
3.5.3 請(qǐng)求允許的內(nèi)存類(lèi)型
請(qǐng)求允許的內(nèi)存類(lèi)型包括:
ReadNoSnp/WriteNoSnp可以是Normal Non-cacheable或Device
除ReadNoSnp外的所有讀事務(wù)只能寫(xiě)回。
所有無(wú)數(shù)據(jù)事務(wù)都可以寫(xiě)回
CleanShared、CleanSharedPersist、CleanInvalid和MakeInvalid的無(wú)數(shù)據(jù)事務(wù)也可以是Normal Non-cacheable或Device。
除WriteNonP外的所有寫(xiě)事務(wù)只能進(jìn)行寫(xiě)回。
原子事務(wù)可以寫(xiě)回,Normal Non-cacheable或Device
3.5.4 數(shù)據(jù)和字節(jié)使能
在讀請(qǐng)求或?qū)懻?qǐng)求中,ReqAttr字段的Size子字段決定了事務(wù)相關(guān)聯(lián)的數(shù)據(jù)字節(jié)數(shù)。Size子字段的允許值為1B、2B、4B、5 8B、16B、32B、64B、128B。讀響應(yīng)或?qū)懻?qǐng)求中包含的數(shù)據(jù)字節(jié)可以是8B、16B、32B、64B或128B。僅當(dāng)緩存行的大小配置為128B時(shí),才允許使用128B。
當(dāng)ReqAttr字段中的Size子字段為1B、2B或4B時(shí),讀響應(yīng)消息或?qū)懻?qǐng)求消息中包含的數(shù)據(jù)字節(jié)數(shù)為8B。在所有其它情況下,請(qǐng)求的ReqAttr字段中的Size子字段與讀響應(yīng)消息或?qū)懻?qǐng)求消息中包含的數(shù)據(jù)字節(jié)數(shù)相同。當(dāng)ReqAttr字段中的Size子字段為1B、2B或4B時(shí),請(qǐng)求數(shù)據(jù)在消息中的位置由請(qǐng)求中的Address字段(Addr)確定。對(duì)于以下的寫(xiě)請(qǐng)求,可以使用字節(jié)使能:
WriteNoSnpPtl
WriteUniquePtl
WriteBackPtl
3.6 排序
3.6.1 多拷貝原子性(multi-copy atomicity)
CCIX要求多拷貝原子性。所有組件都必須確保寫(xiě)請(qǐng)求是多拷貝原子的。如果滿(mǎn)足以下兩個(gè)條件,則寫(xiě)請(qǐng)求為多拷貝原子:
對(duì)同一位置的所有寫(xiě)入都是序列化的,也就是說(shuō),所有請(qǐng)求者都會(huì)以相同的順序觀察到所有寫(xiě)操作,盡管有些請(qǐng)求者可能不會(huì)觀察到所有寫(xiě)入。
在所有請(qǐng)求者觀察到寫(xiě)操作之前,對(duì)此位置的讀操作不會(huì)得到寫(xiě)操作的值。
其實(shí)以上的要求,就是要確保存儲(chǔ)一致性。在CCIX規(guī)范中,如果兩個(gè)緩存行地址和非安全屬性相同,則認(rèn)為這兩個(gè)地址是相同的。
3.6.2 請(qǐng)求響應(yīng)和排序
為了確保事務(wù)的先后順序,無(wú)論是來(lái)自相同代理還是不同代理的Comp和CompData響應(yīng)要遵循如下的規(guī)則:
對(duì)于Normal non-cacheable或Device的讀事務(wù)和原子事務(wù),CompData響應(yīng)可確保該事務(wù)可被任何代理在相同端點(diǎn)地址范圍內(nèi)的后續(xù)事務(wù)觀察到。端點(diǎn)地址范圍的大小由實(shí)現(xiàn)定義。
對(duì)于WriteBack位置的讀取和原子事務(wù),CompData響應(yīng)保證該事務(wù)可被任何代理到同一位置的后續(xù)事務(wù)觀察到。
對(duì)于Device-nRnE或Device-nRE位置的寫(xiě)事務(wù)、無(wú)數(shù)據(jù)事務(wù)和原子事務(wù),Comp響應(yīng)保證該事務(wù)可被任何代理在同一端點(diǎn)地址范圍內(nèi)的后續(xù)事務(wù)觀察到。端點(diǎn)地址范圍的大小取決于具體實(shí)現(xiàn)。
對(duì)于WriteBack位置的寫(xiě)事務(wù)、無(wú)數(shù)據(jù)事務(wù)和原子事務(wù)。Comp響應(yīng)可確保事務(wù)可被任何代理到同一位置的后續(xù)事務(wù)觀察到。
3.7 流量控制和協(xié)議信用
此處穿插一些關(guān)于“信用”的數(shù)據(jù)傳輸機(jī)理。如果發(fā)送方和接收方之間沒(méi)有什么握手協(xié)議的話(huà),發(fā)送方就不知道接收方的具體情況。此時(shí),如果接收方?jīng)]有足夠的能力接收新的數(shù)據(jù),而發(fā)送方依然源源不斷的發(fā)送數(shù)據(jù),那么就很可能造成數(shù)據(jù)的丟失。因此,接收方需要一定的機(jī)制來(lái)控制數(shù)據(jù)流量。最直觀的辦法,就是當(dāng)接收方不能接收新的數(shù)據(jù)時(shí),要及時(shí)告知發(fā)送方,發(fā)送方應(yīng)根據(jù)接收方的狀態(tài)調(diào)整發(fā)送數(shù)據(jù),這就是常說(shuō)“反壓(Back Pressure)”機(jī)制。在簡(jiǎn)單的SoC設(shè)計(jì)中,可以通過(guò)總線實(shí)現(xiàn)接收方的“反壓”,比如在APB總線中,從機(jī)(Slave)可以通過(guò)驅(qū)動(dòng)ready信號(hào)來(lái)與主機(jī)(Master)共同控制數(shù)據(jù)傳輸。對(duì)于復(fù)雜的SoC設(shè)計(jì),通過(guò)總線方式“反壓”可能就不適合了,需要其它新的機(jī)制?;谛庞玫膫鬏斄髁靠刂凭褪瞧渲兄?。其基本原理是,在發(fā)送方和接收方事先協(xié)調(diào)好一組“信用”值,發(fā)送方每發(fā)一次數(shù)據(jù)需要占用一個(gè)或幾個(gè)“信用”,如果發(fā)送方的“信用”耗盡,就不能再發(fā)送新的數(shù)據(jù),必須等待足夠的“信用”;接收方每處理完一筆發(fā)送方的數(shù)據(jù),返回一個(gè)或者幾個(gè)“信用”給發(fā)送方,發(fā)送方得到新的“信用”以后就可以繼續(xù)發(fā)送數(shù)據(jù)了。關(guān)于基于信用的流量控制,有很多文章,具體實(shí)現(xiàn)也不盡相同,這里就不再展開(kāi)了。
3.7.1 協(xié)議信用
定義了四種信用類(lèi)型來(lái)管理消息流:
Request
Data
Snoop
Misc
消息的接收者必須授予信用,也就是說(shuō),向它有鏈接的每個(gè)發(fā)送者芯片發(fā)送信用。對(duì)于請(qǐng)求、數(shù)據(jù)和Snoop消息信用,信用的授予是通過(guò)其它消息或明確的信用交換機(jī)制進(jìn)行的。對(duì)于雜項(xiàng)消息信用,信用的授予僅通過(guò)明確的信用交換機(jī)制,或通過(guò)使用credited雜項(xiàng)消息中的MiscCredit字段。
只有當(dāng)發(fā)送方收到目標(biāo)芯片的請(qǐng)求信用時(shí),才能發(fā)送non-write或non-atomic請(qǐng)求。只有當(dāng)發(fā)送方從接收方收到請(qǐng)求信用和數(shù)據(jù)信用時(shí),才能發(fā)送寫(xiě)請(qǐng)求或原子請(qǐng)求。只有當(dāng)發(fā)送方從接收方收到snoop信用時(shí),才能發(fā)送snoop請(qǐng)求。響應(yīng)不需要任何明確的信用交換,所有響應(yīng)都必須被接受。只有當(dāng)適當(dāng)數(shù)量的雜項(xiàng)信息信用可用時(shí),才能發(fā)送credited雜項(xiàng)信息。
3.7.2 信用交換
兩種信用交換方式:
用于信用交換的獨(dú)立消息,信用授予和信用返還消息。這種方式使用專(zhuān)用消息交換信用。消息格式允許信用授予和信用返還。在單個(gè)消息中的信用交換,必須是所有信用授予或所有信用返還,不允許混合使用這兩種類(lèi)型。
包頭內(nèi)信用授權(quán)。數(shù)據(jù)包頭信用授權(quán)使用數(shù)據(jù)包頭中6-bit的MsgCredit字段。
信用交換的規(guī)則:
對(duì)于每種信用類(lèi)型,每個(gè)獨(dú)立信用交換報(bào)文中可發(fā)送的最大信用數(shù)為255。
發(fā)送超過(guò)255個(gè)信用需要使用額外的信息。
獨(dú)立的信用交換信息不需要發(fā)送任何形式的信用。
信用交換信息的發(fā)送速率沒(méi)有上限。
允許單個(gè)數(shù)據(jù)包同時(shí)包含“數(shù)據(jù)包頭信用授權(quán)”,和一條或多條“獨(dú)立信用交換消息”。
每個(gè)信用類(lèi)型最多可授予1023個(gè)信用
審核編輯:湯梓紅
-
芯片
+關(guān)注
關(guān)注
459文章
52499瀏覽量
440716
原文標(biāo)題:老秦帶你探索CCIX(五)
文章出處:【微信號(hào):Rocker-IC,微信公眾號(hào):路科驗(yàn)證】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
一文弄懂CCIX協(xié)議層
CCIX 1.1設(shè)備必須支持PCIe 5.0 PHY或CCIX EDR PHY這兩種物理層嗎
tcp ip協(xié)議詳解卷一
IP層協(xié)議,IP層協(xié)議的內(nèi)容有哪些?
CCIX協(xié)議對(duì)于一些高性能應(yīng)用詳解

【理論】通信的硬件層協(xié)議和軟件層協(xié)議

評(píng)論