最近多個(gè)項(xiàng)目并行,實(shí)在是沒有時(shí)間分享了,今天在評(píng)論區(qū)看到了一個(gè)非常有意義的問題,同樣也是社招,校招最常見的問題。那就是AXI協(xié)議怎么避免死鎖呢?
兩種死鎖場(chǎng)景分別是亂序讀和寫交織,有的人更熟悉英文,那就是out of order和interleaving。下面我們分析原因。
亂序讀:我們知道AXI協(xié)議支持亂序讀,那么為什么能實(shí)現(xiàn)呢?這也是常見面試題目,那就是因?yàn)锳XI(現(xiàn)在單指AXI3)每個(gè)通路都有相應(yīng)的ID,通過請(qǐng)求和響應(yīng)ID的一致來將打亂的順序恢復(fù)。
現(xiàn)在假設(shè)M1發(fā)給S1的請(qǐng)求ID可以是1,2,3,M1發(fā)給S2的ID可以是3,4,5。現(xiàn)在M1分別發(fā)起了兩組outstanding傳輸給S1和S2,RID是隨機(jī)的,也就是ARID_S1和ARID_S2存在都是3的可能。并且如圖,S1/S2響應(yīng)的時(shí)間是不同的,所以也就存在S1和S2 RID=3的響應(yīng)順序是不確定的,例如M1>S2先發(fā)出ID=3的請(qǐng)求,長(zhǎng)度為16,又發(fā)出M1>S1的ID=3的請(qǐng)求,長(zhǎng)度為8,但是由于S2響應(yīng)慢,M1會(huì)先拿到S1的響應(yīng),那么M1收到ID為3的響應(yīng)時(shí)該怎么區(qū)分呢?答案是無法區(qū)分,所以這種場(chǎng)景會(huì)造成M1工作異常(接到全部數(shù)據(jù)的時(shí)候沒有rlast信號(hào),此時(shí)正處于S2響應(yīng)的中間,并沒有RLAST會(huì)導(dǎo)致M1認(rèn)為傳輸錯(cuò)誤)。具體解決方案是per slave per id,M0發(fā)起訪問時(shí),會(huì)判斷已經(jīng)發(fā)出去的ID,保證每個(gè)slave收到的ID是唯一的,所以我們?cè)O(shè)計(jì)axi master時(shí)也要這樣,當(dāng)然,我們也可以投機(jī)取巧,固定值。
想必一定有熟悉coreconsulatant和ARM NIC的同學(xué),配置的時(shí)候有兩個(gè)參數(shù),那就是每組outstanding可以使用的ID個(gè)數(shù),以及每個(gè)ID對(duì)應(yīng)的指令個(gè)數(shù),兩者相乘就是outstanding能力,所以為了避免死鎖我們會(huì)將ID個(gè)數(shù)配置為1(當(dāng)然僅限第一級(jí)矩陣,也就是和自研AXI_M連接的地方,這樣太暴力),這樣Master就很容易區(qū)分不同slave設(shè)備的響應(yīng)了,但是缺點(diǎn)也很明顯,那就是會(huì)降低性能,不同ID的請(qǐng)求會(huì)被矩陣master反壓,所以我們?cè)O(shè)置的需要合理。怎么算合理呢?首先如果大家看過cpu文檔,會(huì)發(fā)現(xiàn)ID個(gè)數(shù)以及不同ID的含義是有明確定義的,所以我們配置時(shí)要考慮master的ID個(gè)數(shù),但是master cpu訪問我們時(shí)限制不了的,所以我們會(huì)在那里下手呢?那就是矩陣,需要做remap,NIC和NOC都有這種設(shè)計(jì),實(shí)時(shí)保證ID的唯一性。
亂序讀死鎖常見結(jié)構(gòu)
交織寫:AXI3協(xié)議支持交織寫,原因就是容易造成總線死鎖,其實(shí)并不是交織寫容易造成死鎖,而是某些場(chǎng)景容易出現(xiàn)(矩陣配置不合理,或者不同路徑delay分析不正確)。我們分析一下原因。
如下圖,假設(shè)M1對(duì)S1地址發(fā)起多次burst傳輸,并且因?yàn)榫仃囍С纸豢棇?,?huì)把M1訪問的順序打亂(原因是master的數(shù)據(jù)也是由上級(jí)傳遞過來的,順序可能不同)。如果不好理解的話,可以抽象將M1和M2認(rèn)為是一個(gè)master,都在訪問S1,矩陣的interleaving深度是>1的,也就是S1出口會(huì)將寫的順序打亂,導(dǎo)致waddr和wdata的順序改變,那么結(jié)果是什么呢?那就是驢頭不對(duì)馬嘴,想寫A1,但是數(shù)據(jù)卻寫到了A2地址,但是控制通路已經(jīng)規(guī)定了burst長(zhǎng)度,如果wlast出現(xiàn)的時(shí)候數(shù)據(jù)不夠,或者多了,當(dāng)然會(huì)讓slave出現(xiàn)問題嘍。
這也是為什么AXI4取消了WID的主要原因。
交織寫死鎖常見結(jié)構(gòu)
交織讀為什么不容易死鎖呢?
如果是M1訪問S1,根本不會(huì)出現(xiàn)交織,這個(gè)場(chǎng)景安全。
如果M1同時(shí)訪問S1和S2,因?yàn)榫仃囇舆t的不同,很有可能發(fā)生交織,但是由于ARID和RID不同,也不會(huì)造成死鎖。也是安全的。
但是當(dāng)然存在不安全的場(chǎng)景,那就是master不支持交織,矩陣支持交織,同樣會(huì)導(dǎo)致總線異常,所以我們配置矩陣IP時(shí),一定要充分了解所有的master設(shè)備和slave設(shè)備。主要參數(shù)如下:outstanding能力,read interleaving深度,master id寬度,master個(gè)數(shù),slave id寬度(矩陣slave口ID寬度會(huì)受master個(gè)數(shù)影響,id一定不能截位,但是可以remap)等。
-
soc
+關(guān)注
關(guān)注
38文章
4161瀏覽量
218160 -
MASTER
+關(guān)注
關(guān)注
0文章
103瀏覽量
11282 -
AXI
+關(guān)注
關(guān)注
1文章
127瀏覽量
16622
原文標(biāo)題:SoC常見問題 - axi deadlock
文章出處:【微信號(hào):IP與SoC設(shè)計(jì),微信公眾號(hào):IP與SoC設(shè)計(jì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論