找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7675|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

話(huà)說(shuō)STM32F4系列的總線(xiàn)矩陣與訪(fǎng)問(wèn)調(diào)度

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:98618 發(fā)表于 2016-4-13 01:17 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
   
    

    可能不少人見(jiàn)過(guò)STM32F4系列的內(nèi)部系統(tǒng)架構(gòu)框圖。大致如下圖,該圖很重要,不可視而不見(jiàn)。


    圖中縱橫交錯(cuò)的就是多層AHB總線(xiàn)矩陣,負(fù)責(zé)把上方黃色主設(shè)備跟右邊綠色從設(shè)備互聯(lián)起來(lái)。所謂AHB主設(shè)備是指CPU或DMA[通用DMA或?qū)S肈MA],由它們啟動(dòng)總線(xiàn)訪(fǎng)問(wèn),即讀寫(xiě)操作。那些響應(yīng)主設(shè)備讀寫(xiě)訪(fǎng)問(wèn)的設(shè)備就是AHB從設(shè)備,比如存儲(chǔ)器、各類(lèi)外設(shè)等。

    因?yàn)?span style="color:red">總線(xiàn)矩陣的存在,使得多個(gè)主設(shè)備可以并行訪(fǎng)問(wèn)不同的從設(shè)備,增強(qiáng)了數(shù)據(jù)傳輸能力,提升了訪(fǎng)問(wèn)效率,同時(shí)也改善了功耗性能。

   不過(guò),雖然總線(xiàn)矩陣使得多個(gè)主設(shè)備可以并行訪(fǎng)問(wèn)不同的從設(shè)備,但在每個(gè)預(yù)定的時(shí)間內(nèi),只有一個(gè)主設(shè)備擁有總線(xiàn)控制權(quán)。如果有多個(gè)主設(shè)備同時(shí)出現(xiàn)總線(xiàn)請(qǐng)求時(shí)就得進(jìn)行仲裁。所以總線(xiàn)矩陣?yán)镞有個(gè)AHB總線(xiàn)仲裁器,它保證每個(gè)時(shí)刻只有一個(gè)主設(shè)備通過(guò)總線(xiàn)矩陣對(duì)從設(shè)備進(jìn)行訪(fǎng)問(wèn)。(注1

    為了確保每個(gè)主設(shè)備訪(fǎng)問(wèn)從設(shè)備的延遲盡量短,在總線(xiàn)矩陣?yán)飳?shí)行循環(huán)調(diào)度優(yōu)先級(jí)方案:

? 循環(huán)調(diào)度仲裁策略使總線(xiàn)帶寬合理分配。

? 限定最大延時(shí)。

? 循環(huán)調(diào)度以1 次傳輸為單位。

    當(dāng)多個(gè)AHB 主設(shè)備試圖同時(shí)訪(fǎng)問(wèn)同一個(gè)AHB從設(shè)備時(shí),總線(xiàn)矩陣仲裁器介入以解決訪(fǎng)問(wèn)沖突。在下面的例子中CPU 和DMA1 均試圖訪(fǎng)問(wèn)SRAM1 以讀取數(shù)據(jù)。


    如上述示例總線(xiàn)訪(fǎng)問(wèn)請(qǐng)求同時(shí)發(fā)生的情況下,就需要總線(xiàn)矩陣仲裁。為了解決這種問(wèn)題,需要應(yīng)用循環(huán)調(diào)度策略:如果本次最后贏得總線(xiàn)控制權(quán)的主設(shè)備是CPU,則在下一次訪(fǎng)問(wèn)中DMA1將贏得總線(xiàn)控制權(quán)并首先訪(fǎng)問(wèn)SRAM1。CPU 隨后方可有權(quán)訪(fǎng)問(wèn)SRAM1。

    這就表明,一個(gè)主設(shè)備的傳輸延時(shí)取決于其它等待請(qǐng)求訪(fǎng)問(wèn)AHB 從設(shè)備的主設(shè)備數(shù)量。下面的例子是五個(gè)主設(shè)備試圖同時(shí)訪(fǎng)問(wèn)SRAM1的情形:


    DMA1再次獲得總線(xiàn)矩陣訪(fǎng)問(wèn)權(quán)并訪(fǎng)問(wèn)SRAM1 的延時(shí)等于其它等待請(qǐng)求的所有主設(shè)備的執(zhí)行時(shí)間之和。

    我們再來(lái)看看進(jìn)行總線(xiàn)矩陣仲裁可能導(dǎo)致的DMA傳輸延時(shí)最差情況。

    主設(shè)備DMA端口進(jìn)行一次數(shù)據(jù)傳輸會(huì)遭遇的延時(shí)取決于其它主設(shè)備的傳輸類(lèi)型和長(zhǎng)度。比如,我們結(jié)合上面的DMA1 & CPU 的例子,它們并行訪(fǎng)問(wèn)SRAM。 DMA傳輸延時(shí)將隨著CPU 數(shù)據(jù)傳輸事務(wù)長(zhǎng)度而變化。如果總線(xiàn)訪(fǎng)問(wèn)首先給予CPU 且不是執(zhí)行單次數(shù)據(jù)加載/存儲(chǔ),DMA 訪(fǎng)問(wèn)SRAM 的等待時(shí)間可能從一個(gè)AHB 周期(單次數(shù)據(jù)加載/ 存儲(chǔ)時(shí)間)延長(zhǎng)為N 個(gè)AHB 周期,這里N 為CPU 數(shù)據(jù)傳輸事務(wù)中數(shù)據(jù)的數(shù)量。

     CPU 鎖定AHB 總線(xiàn)以保持其訪(fǎng)問(wèn)總線(xiàn)的所有權(quán),減少了多次加載/ 存儲(chǔ)操作過(guò)程中的延時(shí)以及進(jìn)入中斷的延時(shí)。這提高了固件的響應(yīng)能力,但是可能導(dǎo)致DMA 數(shù)據(jù)傳輸事務(wù)的延遲。

    DMA1 與CPU 并行訪(fǎng)問(wèn)SRAM 的延時(shí)取決于傳輸類(lèi)型:

? 中斷(上下文保護(hù))發(fā)起的CPU 傳輸:8 個(gè)AHB 周期;

? LDM/STM 指令發(fā)起的CPU 傳輸:14 個(gè)AHB 周期(注2)

---在多達(dá)14 個(gè)寄存器與存儲(chǔ)器之間進(jìn)行傳輸;


    上圖詳細(xì)描述了一個(gè)因中斷進(jìn)入而導(dǎo)致DMA多周期傳輸延遲的情形。DMA 存儲(chǔ)器端口被觸發(fā),發(fā)出存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求。經(jīng)過(guò)仲裁, AHB 總線(xiàn)未授權(quán)DMA1 存儲(chǔ)器端口訪(fǎng)問(wèn),而由CPU 來(lái)訪(fǎng)問(wèn)總線(xiàn)。可以看到在服務(wù)DMA 請(qǐng)求之前有一段額外的延時(shí)。這段中斷發(fā)起的CPU 傳輸,耗時(shí)為8 個(gè)AHB 周期。

   不難理解,當(dāng)同時(shí)對(duì)一個(gè)從設(shè)備進(jìn)行尋址且數(shù)據(jù)傳輸事務(wù)長(zhǎng)度不是一個(gè)數(shù)據(jù)單元時(shí),其他主設(shè)備(如DMA2,USB_HS, Ethernet…)也會(huì)碰到類(lèi)似情形。所以,為了提高DMA 對(duì)總線(xiàn)矩陣的訪(fǎng)問(wèn)性能,要盡量回避總線(xiàn)競(jìng)爭(zhēng)。

    以上內(nèi)容主要取材于ST官方應(yīng)用筆記文檔AN4031的一部分。該筆記里除了上述內(nèi)容外,還對(duì)STM32F2/F4的DMA傳輸路徑、DMA傳輸時(shí)間的估算、DMA編程都有較為細(xì)致的介紹。我這里算是拋磚引玉,有興趣的話(huà)可以去www.stmcu.com.cn 的設(shè)計(jì)資源區(qū)搜索下載AN4031。


注1)并非所有主設(shè)備訪(fǎng)問(wèn)從設(shè)備都得經(jīng)過(guò)總線(xiàn)矩陣,細(xì)心的人可能看到了有些主設(shè)備與從設(shè)備間有直通通道。細(xì)節(jié)詳見(jiàn)STM32芯片相關(guān)參考手冊(cè)。

(注2) 通過(guò)配置編譯器,將加載/ 存儲(chǔ)多重指令分解為單個(gè)加載/ 存儲(chǔ)指令,可以降低由LDM/STM 發(fā)起的傳輸?shù)难訒r(shí)。

 

本文作者:Miler Shao

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表