SoC設(shè)計入門 - APB協(xié)議
上一篇主要講述了soc的骨架,crossbar互聯(lián)網(wǎng)路。現(xiàn)在來講soc的神經(jīng)末梢,它們依附在骨架上,受和調(diào)控制,并將外部信息分享給核心以及其他成員。它是什么呢?
它就是我們所說的標(biāo)準(zhǔn)總線。soc上所有模塊想要被核心控制,都需要掛載到crossbar上,以便cpu下配置,以及cpu和dma進(jìn)行數(shù)據(jù)傳輸。我們以最簡單的APB總線入手,來進(jìn)一步了解標(biāo)準(zhǔn)總線的工作原理。
1、APB協(xié)議簡介
APB(Advanced Peripheral Bus) 作為高級外設(shè)總線是AMBA協(xié)議之一,也是最基本的總線協(xié)議。按照ARM官方定義,APB是一種低成本的接口協(xié)議,可以實現(xiàn)低功耗以及精簡的接口設(shè)計,降低接口設(shè)計的復(fù)雜度。
APB協(xié)議不支持流水線設(shè)計,它主要應(yīng)用在低帶寬設(shè)計需求的接口中,高性能帶寬需求可以使用AXI總線。APB協(xié)議的實現(xiàn)與時鐘沿對齊,以簡化外設(shè)接口的設(shè)計。每次傳輸至少需要消耗兩個時鐘周期。
在SOC設(shè)計中,AHB一般作為IP的配置接口,包括低速IP如I2C,UART,I2S等,也包括DDR,PCIe,Ethernet等高速IP,可以方便的實現(xiàn)CPU對外設(shè)IP的寄存器配置。系統(tǒng)中一般會實現(xiàn)一個AXI2APB或者AHB2APB的轉(zhuǎn)換橋?qū)PB口掛載在系統(tǒng)上。
APB的傳輸信號只與時鐘上升沿有關(guān),故其具備以下優(yōu)點(diǎn):
·易于實現(xiàn)高頻操作;
·性能與時鐘占空比無關(guān);
·靜態(tài)時序分析簡單;
·易于與基于上升沿的寄存器訪問;
·易于集成到基于周期的仿真器中。
1.1、APB的發(fā)展史
協(xié)議已經(jīng)從APB2.0發(fā)展到現(xiàn)在的APB4.0。具體區(qū)別如下:
·APB2.0 :該版本協(xié)議定義基本的接口信號(具體可見端口信號章節(jié),刪除APB3.0有的接口就行);
·APB3.0:增加信號PREADY用以指示slave準(zhǔn)備好數(shù)據(jù),增加信號PSLAVERR代表傳輸錯誤;
·APB4.0:增加信號PROT保護(hù)類型,增加信號PSTRB來支持byte級的訪問;
2.0和3.0的區(qū)別是什么?
APB2.0和APB3.0的差別:APB3.0提供了一個低功耗的接口,并降低了接口的復(fù)雜性。且APB3比APB2增加了兩個信號:
PREADY:來擴(kuò)展APB傳輸,主要是增加延時;
錯誤信號PSLVERR:來指示傳輸失敗。
3.0和4.0的區(qū)別是什么?
·增加了PROT和PRSTB兩個信號。
·PPROT一種保護(hù)信號,用于支持APB上的非安全交易和安全交易。
·PSTRB一個寫選通信號,用于在寫數(shù)據(jù)總線上進(jìn)行sparse data transfer(稀疏數(shù)據(jù)傳輸)。APB4用的比較少。
APB協(xié)議向下兼容。
目前soc上最常用的是APB2.0和APB3.0,下面我們主要介紹這兩個版本。
2、APB 2.0
2.1、APB2.0信號列表
這里需要區(qū)分Master和Slave的區(qū)別,Master是主機(jī),Slave是從機(jī),一個總機(jī)下可以有n個從機(jī),所有的數(shù)據(jù)傳輸都是master來控制的,slave來回應(yīng)。這里需要用到APB 1TO多bridge,APB bif不需要仲裁,只需要對地址的decode,如果地址處于某個slave的域內(nèi),就拉高它的PSELn等控制信號,n為slave號。
APB2.0信號
2.2 、狀態(tài)機(jī)
通過PSELx和PENABLE信號的變化,使APB總線處于下面3個狀態(tài):
狀態(tài)機(jī)
·IDLE:PSELx和PENABLE都為0,表明master和slave之間無通信請求,因此處在該狀態(tài)。
·SETUP:當(dāng)master和某一個slave之間準(zhǔn)備進(jìn)行數(shù)據(jù)傳輸時,會進(jìn)入該狀態(tài),這時PSELx=1,PENABLE=0。意思是master選中某一個slave告訴slave我準(zhǔn)備要和你交換數(shù)據(jù)啦,請你準(zhǔn)備好!這個狀態(tài)會保持一個時鐘周期然后進(jìn)入ENABLE狀態(tài)。這個狀態(tài)可以直接給wdata。
·ENABLE:這個時候PENABLE拉高,master和某一slave進(jìn)行數(shù)據(jù)傳輸,持續(xù)一個時鐘周期。這個狀態(tài)開始等待rdata。
在自己寫master時,就按照這個狀態(tài)輸出控制信號就可以了。
2.3 、寫操作
下面就是寫傳輸?shù)臅r序圖:
寫時序
·T1~T2:這個階段master和某一slave無交互數(shù)據(jù),因此處于IDLE狀態(tài)。
·T2:在該時刻,master準(zhǔn)備將數(shù)據(jù)寫入某一slave中,因此進(jìn)入SETUP狀態(tài),同時把某一slave的PSEL信號拉高,PWRITE信號拉高,這表示master告訴某一slave:我即將要和你進(jìn)行數(shù)據(jù)傳輸,是我把數(shù)據(jù)寫到你里面,請你準(zhǔn)備好!同時改變PADDR和PWDATA信號,這是為了滿足下個上升沿的時序。
·T2~T3:保持一個時鐘周期。
·T3:此時將PENABLE信號拉高,真正將wdata寫到addr。
·T3~T4:保持一個時鐘周期。
·T4:數(shù)據(jù)傳輸結(jié)束,再次回到初始狀態(tài)。
2.4、讀操作
讀時序
·T1~T2:這個階段master和某一slave無交互,因此處于IDLE狀態(tài)
·T2:在該時刻,master準(zhǔn)備從某一slave中讀取數(shù)據(jù),因此進(jìn)入SETUP狀態(tài),同時把某一slave的PSEL信號拉高,PWRITE信號拉低,這表示master告訴某一slave:我即將要和你進(jìn)行數(shù)據(jù)傳輸,是我要讀你的數(shù)據(jù),請你準(zhǔn)備好!同時改變PADDR,這是為了滿足下個T4采樣沿的時序。
·T2~T3:保持一個時鐘周期。
·T3:此時將PENABLE信號拉高,表示master正式把某一slave之中的數(shù)據(jù)讀出來,注意,數(shù)據(jù)在ENABLE周期末尾的時鐘上升沿被采樣,也就是T4時刻。
·T3~T4:保持一個時鐘周期。
·T4:數(shù)據(jù)傳輸結(jié)束,再次回到初始狀態(tài)。
3、APB 3.0
APB 3.0協(xié)議是在APB 2.0協(xié)議的基礎(chǔ)上新加了2個信號,PREADY和PSLVERR組成的;PREADY信號是slave設(shè)備用來表示slave是否準(zhǔn)備好的信號,PSLVERR是表示slave接收的數(shù)據(jù)是否有誤。
信號表
APB3.0信號
3.1、寫操作
寫操作,無等待
寫無等待時序
該種情況和APB2.0沒有任何區(qū)別,當(dāng)PENABLE拉高后,會檢查PREADY是否拉高,如果拉高表示slave當(dāng)前準(zhǔn)備好了數(shù)據(jù)傳輸,則在上升沿3將數(shù)據(jù)寫給salve。
寫操作,有等待
寫有等待時序
如果PENABLE拉高后,發(fā)現(xiàn)PREADY沒有拉高,則表示slave還沒有準(zhǔn)備好數(shù)據(jù)傳輸,這時所有信號保持不變直到PREADY拉高,在上升沿5將數(shù)據(jù)寫入。
3.2、讀操作
讀操作,無等待
讀無等待時序
該種情況和APB2.0沒有區(qū)別,與寫操作無等待類似,不再細(xì)說
讀操作,有等待
讀有等待時序
當(dāng)PENABLE拉高后,發(fā)現(xiàn)PREADY信號還沒有拉高,表示slave還沒有準(zhǔn)備好,這時會等待直到PREADY信號拉高,在上升沿6時刻采樣數(shù)據(jù)
3.3、錯誤反饋
PSLVERR來指示APB傳輸上的錯誤情況。讀取和寫入事務(wù)都可能發(fā)生錯誤。當(dāng)PSEL,PENABLE和PREADY均為高電平時,僅在APB傳輸?shù)淖詈笠粋€周期內(nèi)才認(rèn)為PSLVERR有效,其他時間不考慮PSLVERR。
寫操作
slverr寫時序
在前面的有等待的寫操作的基礎(chǔ)上,添加PSLVERR,也就是在T4時刻采樣,發(fā)現(xiàn)PSEL,PENABLE和PREADY均為高電平的前提下,PSLVERR為高,說明這次數(shù)據(jù)傳輸有錯誤。軟件決定后續(xù)行為。
讀操作
讀slverr時序
在前面的有等待的讀操作的基礎(chǔ)上,添加PSLVERR,也就是在T5時刻采樣,發(fā)現(xiàn)PSEL,PENABLE和PREADY均為高電平的前提下,PSLVERR為高,說明這次數(shù)據(jù)傳輸有錯誤。軟件決定后續(xù)行為。
4、APB應(yīng)用場景。
APB因為其面積小,接口少,經(jīng)常用在外設(shè)上,為什么呢?
因為soc上外設(shè)很多,包括spi,i2c,uart,timer,wdt等,他們對時鐘要求不高,如果使用APB接口,可以省面積,降低芯片的復(fù)雜度。這也是為什么外設(shè)優(yōu)先的標(biāo)準(zhǔn)接口是APB。
這里主要講一些APB在SOC上的特殊用法。
·某些IP預(yù)留用戶控制信號,我們需要用寄存器控制此信號,一般soc每個子系統(tǒng)都會有一個模塊專門做這個事情,這是就可以選擇APB接口用來配置這些寄存器。
·某些IP,例如SRIO,serdes預(yù)留用戶配置接口,synosys叫做cr配置口,用于配置或者debug。這時候我們可以自己寫一個APB2CR的橋。
·核間通訊模塊。通過寫寄存器產(chǎn)生中斷輸出,這時候可以使用APB接口,因為中斷發(fā)生次數(shù)少,無性能要求,可以使用APB,簡單。
·APB轉(zhuǎn)sram接口或者APB轉(zhuǎn)fifo。某些模塊對外接口是sram,需要我們使用轉(zhuǎn)接橋,根據(jù)性能我們選擇使用合適的AMBA總線;自研模塊數(shù)據(jù)緩存時,涉及到異步處理,這時候可能用到APB轉(zhuǎn)FIFO的設(shè)計。
但是他也有局限,帶寬低且不支持pipeline,所以module有這些要求不要使用APB。
這次花時間也整理了目錄,方便大家觀看,APB真的應(yīng)用很廣泛,大家不管是做設(shè)計還是驗證,都會經(jīng)常和它打交道,多多了解沒啥壞處。