摘 要:AMBA總線是目前主流的片上總線。本文給出的雙層AMBA總線設(shè)計(jì)能極大地提高總線帶寬,并使系統(tǒng)架構(gòu)更為靈活。文章詳細(xì)介紹了此設(shè)計(jì)的實(shí)現(xiàn),并從兩個(gè)方面對(duì)兩種總線方式進(jìn)行了比較。
關(guān)鍵詞:雙層AMBA總線;總線帶寬;SoC
引言
一般說(shuō)來(lái),SoC芯片是由片上芯核、用戶設(shè)計(jì)的IP核以及將這兩者集成在一起的總線組成的。片上芯核決定了使用何種片上總線以及芯片的體系結(jié)構(gòu)。ARM系列嵌入式微處理器憑借其高性能、低功耗的特點(diǎn)占據(jù)了市場(chǎng)的主要份額,ARM7TDMI因其相對(duì)低廉的價(jià)格在SoC芯片設(shè)計(jì)中應(yīng)用比較廣泛。同時(shí),ARM公司開發(fā)的AMBA (Advanced Microprocessors Bus Architecture)片上總線架構(gòu)由于其本身的高性能以及ARM核的廣泛應(yīng)用,成為了一種流行的片上總線結(jié)構(gòu)。除了片上芯核和片上總線,各種由用戶設(shè)計(jì)的或者由供應(yīng)商提供的IP也集成在SoC芯片上。
ARM7TDMI需要通過(guò)總線訪問(wèn)各個(gè)Slave;DMA工作時(shí)也需要通過(guò)總線訪問(wèn)外設(shè)進(jìn)行數(shù)據(jù)交換;而LCD控制器模塊為了實(shí)現(xiàn)實(shí)時(shí)顯示更是需要不斷地通過(guò)總線來(lái)訪問(wèn)顯存讀取數(shù)據(jù);系統(tǒng)中其他的Master在工作時(shí)也要占用總線。
特別要引起注意的是LCD控制器模塊。彩屏顯示需要很大的數(shù)據(jù)量,以一塊320×240、16bpp的TFT彩屏為例,其每一幀需要:320× 240×16/8=153.6kByte。這么大的數(shù)據(jù)量不可能通過(guò)片上存儲(chǔ)器提供,勢(shì)必要通過(guò)存儲(chǔ)器接口從外設(shè)取得。由于LCD控制器所需要的數(shù)據(jù)量很大并且需要實(shí)時(shí)顯示,LCD控制器的工作將會(huì)占據(jù)大量的片上總線帶寬,甚至影響整個(gè)系統(tǒng)的正常運(yùn)行。而在目前的消費(fèi)電子領(lǐng)域,支持彩屏應(yīng)用幾乎是不可缺少的。
解決此問(wèn)題可以通過(guò)采用優(yōu)化總線切換算法、增加片內(nèi)Cache、改進(jìn)總線架構(gòu)等方法。其中,優(yōu)化總線切換算法帶來(lái)的性能改善比較有限,而 Cache本身設(shè)計(jì)的復(fù)雜性以及其License高昂費(fèi)用,使之在很多情況下也不合適。因而,采用雙總線架構(gòu)的AMBA不失為一個(gè)較好的選擇。
雙總線架構(gòu)AMBA及其實(shí)現(xiàn)
在單層總線情況下,所有的Master和Slave都掛在AHB總線上。任何一個(gè)Master如果要訪問(wèn)Slave的話,都必須先申請(qǐng)總線,在獲得總線所有權(quán)后,通過(guò)總線互聯(lián)結(jié)構(gòu)中的MUX進(jìn)行地址、數(shù)據(jù)和控制信號(hào)的交換,而其他的Master此時(shí)必須等待。
雙層AMBA總線結(jié)構(gòu)
雙層AMBA總線架構(gòu)則通過(guò)使用更為復(fù)雜的內(nèi)部互聯(lián)結(jié)構(gòu),能夠同時(shí)有兩組Master和Slave通過(guò)AMBA進(jìn)行數(shù)據(jù)的交互,極大地提高了總線的帶寬。而且任一個(gè)Master也都可以訪問(wèn)任一層上的Slave。另外,在采用了雙層AMBA總線以后,對(duì)于AHB Master和AHB Slave來(lái)說(shuō)是透明的,不需要任何的修改。對(duì)于這個(gè)雙層AMBA總線,設(shè)置其能支持16個(gè)Master和16個(gè)Slave,并且每層各帶8個(gè)Master和8個(gè)Slave。
其中的雙層AMBA總線本身由三部分組成:Layer1的總線譯碼器、預(yù)仲裁器和多個(gè)數(shù)據(jù)選擇器(MUX);Layer2的總線譯碼器、預(yù)仲裁器和多個(gè)數(shù)據(jù)選擇器;整個(gè)總線的核心仲裁器(Arbiter)。其中,前二者基本是一致的,而核心仲裁器是整個(gè)雙層總線架構(gòu)的核心。其原理是:每層的8個(gè) Master先在本層進(jìn)行一次譯碼與仲裁,得到的結(jié)果送至核心仲裁器,再由核心仲裁器決定狀態(tài)的切換以及各個(gè)MUX如何進(jìn)行數(shù)據(jù)流和控制流的選擇。
內(nèi)部部件的設(shè)計(jì)
結(jié)合AMBA協(xié)議,以下介紹這個(gè)雙層AMBA總線的各個(gè)組成部件。由于第二層的各個(gè)部件的設(shè)計(jì)和功能和第一層相似,因而只介紹第一層。
* Layer1的譯碼器
該譯碼器采用集中式的地址譯碼機(jī)制,有利于提高外圍設(shè)備的可移植性。譯碼器接收到當(dāng)前占用總線的Master所發(fā)出的地址信號(hào),生成對(duì)應(yīng)于各個(gè)Slave的片選信號(hào),送給核心仲裁器。片選信號(hào)的生成是通過(guò)與各個(gè)Slave的基址比較得到的。
值得注意的是,由于每個(gè)Master都可以訪問(wèn)Slave0~Slave15的任一個(gè),所以譯碼器要能生成至少16個(gè)片選信號(hào)。
另外,每一層的譯碼器都應(yīng)該要有一個(gè)缺省片選信號(hào),對(duì)應(yīng)于缺省Slave。這個(gè)缺省Slave的響應(yīng)分兩種情況:對(duì)于IDLE或BUSY傳輸,作出OKAY回應(yīng);對(duì)于NONSEQU ENTIAL或SEQUENTIAL傳輸,作出ERROR回應(yīng)。
?。?Layer1的預(yù)仲裁器
仲裁器接收各個(gè)Master發(fā)出的總線請(qǐng)求信號(hào)(HBusReq)和所需的總線切換的判斷信號(hào),采用一定的總線仲裁算法,確定出可以占據(jù)總線的 Master,并生成M to S MUX1的控制信號(hào)。與單層的AMBA不同,其生成的HMaster_layer1、BusHgrant_layer1信號(hào)送到核心仲裁器,而不是直接送給各個(gè)HMaster。另外,接收到的當(dāng)前Slave響應(yīng)是從核心仲裁器送出來(lái)的。
仲裁器可以采用的總線切換算法有兩種:固定優(yōu)先級(jí)算法和循環(huán)優(yōu)先級(jí)算法。在AMBA規(guī)范中,可以根據(jù)實(shí)際需要靈活選擇總線的切換算法。在這個(gè)部件里,采用了固定優(yōu)先級(jí)的算法,即Master0優(yōu)先級(jí)最低,而Master7優(yōu)先級(jí)最高。
* Layer1的多路選擇器
在Layer1中共有4個(gè)MUX,分別是M to S MUX1、M to S MUX2、S to M MUX1和S to M MUX2。其中,M to S MUX1接收Layer1仲裁器的信號(hào)作為片選信號(hào),從8組總線信號(hào)中選擇一組輸出給核心仲裁器、Layer1的M to S MUX2和Layer2的M to S MUX2。對(duì)于M to S MUX2,其控制信號(hào)是從核心仲裁器得到的,它的作用是從兩組總線信號(hào)中選擇一組送給Layer1中相應(yīng)的Slave。而S to M MUX1則是接收核心仲裁器輸出的片選信號(hào),從Layer1的8組總線響應(yīng)信號(hào)(Hready、Hresp、Hrdata)選擇一組送給核心仲裁器、 Layer1的S to M MUX2和Layer2的S to M MUX2。由S to M MUX2輸出一組總線響應(yīng)信號(hào)給Layer1的所有的Master。
?。?核心仲裁器
核心仲裁器的主要作用是:從兩層的譯碼器輸出的片選信號(hào)出發(fā),得到初始狀態(tài);再由Slave的響應(yīng)信號(hào)以及傳輸狀態(tài)來(lái)決定何時(shí)進(jìn)行狀態(tài)的切換;同時(shí),根據(jù)自己所處的狀態(tài),輸出相應(yīng)信號(hào)給相關(guān)的MUX作為控制信號(hào),輸出Hmaster、BusHgrant信號(hào)給每層的Master,以及輸出相應(yīng)的 Slave響應(yīng)信號(hào)給兩層的預(yù)仲裁器。
由于存在不同層的Master同時(shí)訪問(wèn)同一層的Slave的情況,核心仲裁器也要考慮總線切換算法。又因?yàn)樵诤诵闹俨闷骼镏炼嗍莾蓚€(gè)Master搶占總線,故可以采用簡(jiǎn)單的循環(huán)優(yōu)先級(jí)算法。
核心仲裁器的主要部分是一個(gè)狀態(tài)機(jī),它由七個(gè)狀態(tài)組成:
IDLE:系統(tǒng)復(fù)位后進(jìn)入此狀態(tài),完成部分?jǐn)?shù)據(jù)的初始賦值;
M1S1M2S2:Layer1的Master和Layer1的Slave通信,Layer2的Master和Layer2的Slave通信,即兩層總線并行運(yùn)行;
M1S2M2S1:Layer1的Master和Layer2的Slave通信,Layer2的Master和Layer1的Slave通信;
M1S1M2S1:Layer1的Master和Layer1的Slave通信,Layer2的Master在等待和Layer1的Slave的通信;
M1S2M2S2:Layer1的Master和Layer2的Slave通信,Layer2的Master在等待和Layer2的Slave的通信;
M2S1M1S1:Layer2的Master和Layer1的Slave通信,Layer1的Master在等待和Layer1的Slave的通信;
M2S2M1S2:Layer2的Master和Layer2的Slave通信,Layer1的Master在等待和Layer2的Slave的通信。
這七個(gè)狀態(tài)之間的切換是由兩層譯碼器給出的片選信號(hào)、當(dāng)前占據(jù)總線的Master發(fā)出的控制信號(hào)以及與此Master通信的Slave的響應(yīng)信號(hào)共同決定的。當(dāng)涉及到ARM Master的狀態(tài)切換,需考慮三級(jí)流水線特性,給予適當(dāng)?shù)牡却芷凇?
另外,在核心仲裁器里還有一級(jí)輸入鎖存部分,用于鎖存正在等待的Master發(fā)出的地址和控制信號(hào)。
設(shè)計(jì)結(jié)果以及測(cè)試平臺(tái)的建立
對(duì)于以上實(shí)現(xiàn),采用Verilog語(yǔ)言在RTL級(jí)進(jìn)行描述,使用Synopsys的VCS工具進(jìn)行功能仿真。為了驗(yàn)證以上設(shè)計(jì)的正確性,針對(duì)圖1 所示的架構(gòu),把單層AMBA改為雙層的AMBA,并把LCDC Master和LCDC Slave移至第二層。同時(shí)在第二層增加了一個(gè)簡(jiǎn)單的MC Slave,并在其外面掛了SRAM、SDRAM的存儲(chǔ)器模型,其中的SDRAM用于LCDC Master顯存數(shù)據(jù)的存放,其他的結(jié)構(gòu)保持不變(如圖3)。同時(shí),還準(zhǔn)備了一套基于ARM匯編語(yǔ)言的測(cè)試程序進(jìn)行系統(tǒng)的配置。在這個(gè)測(cè)試程序運(yùn)行以后,共有三個(gè)Master:ARM Master、DMA Master和LCDC Master會(huì)不斷訪問(wèn)總線。
結(jié)果表明設(shè)計(jì)是正確的:ARM Master可以對(duì)Layer2的Slave進(jìn)行配置;在第二層的LCDC Master從同層的MC Slave讀數(shù)據(jù)的同時(shí),第一層的Master正在訪問(wèn)同層的Slave;Layer1的其他Master也能夠申請(qǐng)到Layer2的總線以訪問(wèn) Layer2的外存。
另外,為了考察LCD控制器對(duì)總線的占用率,在AHB上掛了一個(gè)Hmaster Monitor的子模塊,用于統(tǒng)計(jì)各個(gè)Master占據(jù)當(dāng)前總線的時(shí)鐘周期數(shù)。
兩種總線方式的比較
從兩個(gè)方面比較單層AMBA總線與雙層AMBA總線的設(shè)計(jì)。
首先,從降低LCD控制器總線占用率方面看。由表1可以看出,在使用單層AMBA總線的情況下,LCD控制器占用的總線帶寬都比較大:對(duì)于典型的 320×240、16bpp的TFT彩屏,LCD控制器占用了16.3%的總線帶寬。使用雙層AMBA總線時(shí),除了ARM Master 對(duì)兩個(gè)Slave進(jìn)行配置要占總線周期以外,LCD控制器將只會(huì)占用Layer2的帶寬。
其次,從綜合的結(jié)果看,雙層AMBA占用的面積要大一些。在包括APB模塊的情況下,單層AMBA綜合得到的面積為17000門,而雙層 AMBA的面積為18500門。兩者都支持16個(gè)Master和16個(gè)Slave。采用TSMC 0.25工藝標(biāo)準(zhǔn)單元庫(kù),使用Synopsys的Design Compiler工具進(jìn)行門級(jí)網(wǎng)表的綜合。
對(duì)于雙層AMBA總線的實(shí)際的應(yīng)用,可以把Layer1的MC Slave外接非易失性存儲(chǔ)器,而Layer2的MC Slave外接易失性存儲(chǔ)器。這樣,可以把指令區(qū)置于Layer1,而數(shù)據(jù)區(qū)置于Layer2。于是,ARM Master的取指操作就可以在Layer1完成,而LCD控制器對(duì)顯存數(shù)據(jù)的讀取則在Layer2完成。而這兩者恰恰是占總線帶寬很大的操作,因而很大程度上減少了各個(gè)Master因?yàn)榭偩€搶占而等待的時(shí)間,提高了總線帶寬。
結(jié)語(yǔ)
ARM7TDMI在SoC芯片的設(shè)計(jì)中得到了極大的應(yīng)用,但由于其自身不帶Cache,使之需要頻繁訪問(wèn)外存。如果此時(shí)片上集成了其他需要很大數(shù)據(jù)帶寬的模塊,就會(huì)使系統(tǒng)的性能大幅下降。而雙層AMBA總線在占用面積略為增加的條件下,能極大地提高總線帶寬,并且提供了更為靈活的系統(tǒng)架構(gòu)。這對(duì)于基于ARM7TDMI的SoC芯片以及其他類似架構(gòu)的SoC芯片來(lái)說(shuō),有著很重要的意義和實(shí)用價(jià)值。
參考文獻(xiàn)
1 Advanced Microcontroller Bus Architecture(AMBA)Specification. ARM Co.Ltd,2000
2 Multi-layer AHB Overview. ARM Co.Ltd,2001
3 張慶利. AMBA片內(nèi)總線結(jié)構(gòu)的設(shè)計(jì). 微處理機(jī). 2002年5月
作者簡(jiǎn)介:
彭煒豐,東南大學(xué)專用集成電路工程技術(shù)研究中心碩士研究生,研究方向?yàn)閿?shù)字專用集成電路設(shè)計(jì)與驗(yàn)證。潘江濤,東南大學(xué)專用集成電路工程技術(shù)研究中心碩士研究生,研究方向?yàn)閿?shù)字專用集成電路設(shè)計(jì)。 劉新寧,東南大學(xué)專用集成電路工程技術(shù)研究中心教師。