杜 斐,何嘉文,劉承禹,張 駿,田 澤
(航空工業(yè)西安航空計(jì)算技術(shù)研究所,陜西 西安 710068)
嵌入式處理器是目前片上系統(tǒng)中常用的處理器引擎,包括處理器、PLB總線系統(tǒng)、軟件驅(qū)動(dòng)等部分,其性能高、功耗低、使用靈活,且能夠通過(guò)PLB總線和其他IP相連接,在片上系統(tǒng)芯片中應(yīng)用廣泛[1-2]。
由于PLB總線結(jié)構(gòu)復(fù)雜,時(shí)序多樣,且其接口時(shí)序與常用的寄存器接口訪問(wèn)時(shí)序差距較大,不利于迅速建立成熟IP和PLB總線連接。為解決此問(wèn)題,首先深入研究嵌入式處理器內(nèi)部PLB總線協(xié)議和PLB總線各個(gè)接口的結(jié)構(gòu)及機(jī)制,然后在理解PLB總線系統(tǒng)時(shí)序以及內(nèi)部各子模塊的功能與工作機(jī)制的基礎(chǔ)上,提出一種高效時(shí)序轉(zhuǎn)換電路解決方案,以滿足PLB端單拍傳輸、Line傳輸和Burst傳輸,從設(shè)備端同步、異步時(shí)序傳輸?shù)耐ㄐ判枨蟆Mㄟ^(guò)功能仿真和工程實(shí)踐表明,該時(shí)序轉(zhuǎn)換電路工作穩(wěn)定,性能良好,具有配置靈活、使用方便、數(shù)據(jù)傳輸效率高等優(yōu)點(diǎn),較好地滿足了應(yīng)用需求[3-5]。
PLB總線是嵌入式處理器內(nèi)部的主要總線,主要特性如下:
性能高:支持讀操作和寫(xiě)操作的重疊傳輸,支持兩種操作在同一周期發(fā)出,以最大程度提高總線效率;數(shù)據(jù)總線和地址總線不耦合,以提高系統(tǒng)帶寬;地址流水線可擴(kuò)展,支持?jǐn)?shù)據(jù)重疊傳輸,總線的延遲減少;支持總線請(qǐng)求/仲裁重疊,支持同步總線。
靈活性高:最多支持16主16從設(shè)備,且為每個(gè)主設(shè)備分配多個(gè)優(yōu)先級(jí)以方便根據(jù)主從設(shè)備的重要度仲裁;支持原子操作;支持指令預(yù)取和數(shù)據(jù)預(yù)取;支持4字節(jié)到32字節(jié)的各種長(zhǎng)度的DMA傳輸[6-7]。
為實(shí)現(xiàn)片內(nèi)PLB總線和從設(shè)備的連接,該文提出一種高效時(shí)序轉(zhuǎn)換電路解決方案。其具體功能為,PLB端支持四字、雙字、字、半字以及字節(jié)單拍傳輸,4字Line、8字Line、16字Line傳輸和四字Burst傳輸。從設(shè)備端支持同步時(shí)序、異步時(shí)序,其中,可根據(jù)需要編程異步時(shí)序的時(shí)鐘周期數(shù),每個(gè)片選空間可分別獨(dú)立編程,且能提供4個(gè)片選空間,每個(gè)片選空間大小固定為32 MB,其地址空間分配固定,PLB4總線上的單次訪問(wèn)不能跨越片選空間分配的32 MB地址邊界[8-9]。時(shí)序轉(zhuǎn)換電路系統(tǒng)應(yīng)用框圖如圖1所示。

圖1 時(shí)序轉(zhuǎn)換電路系統(tǒng)應(yīng)用框圖
該文設(shè)計(jì)開(kāi)發(fā)的時(shí)序轉(zhuǎn)換電路具有以下特點(diǎn):
(1)配置靈活:為適應(yīng)各種從設(shè)備接口,本時(shí)序轉(zhuǎn)換電路支持異步接口和同步接口,異步接口的時(shí)序分為3個(gè)階段,具體包括建立階段/選通階段/保持階段,使用者可依據(jù)需要對(duì)3個(gè)階段的周期數(shù)進(jìn)行編程。同步時(shí)序每周期一次訪問(wèn),訪問(wèn)長(zhǎng)度用戶可配置,且可以根據(jù)用戶需要編程延遲1周期或者2周期。
(2)使用方便:基于用戶的使用需求,本時(shí)序轉(zhuǎn)換電路在PLB總線端主要支持單拍操作、8字Line操作和4字Burst操作,用戶進(jìn)行小規(guī)模數(shù)據(jù)搬運(yùn)(32位以下數(shù)據(jù))時(shí),可使用單拍操作,進(jìn)行中等規(guī)模數(shù)據(jù)搬運(yùn)(32~512位數(shù)據(jù))時(shí),可使用8字Line操作,進(jìn)行大規(guī)模數(shù)據(jù)搬運(yùn)(512位數(shù)據(jù)以上)時(shí),可使用4字Burst操作。
(3)數(shù)據(jù)傳輸效率高:進(jìn)行單拍操作,本時(shí)序轉(zhuǎn)換電路從收到PLB一端輸入的請(qǐng)求,到向從設(shè)備一端輸出請(qǐng)求,僅需2個(gè)PLB_CLK時(shí)鐘周期;進(jìn)行4字Burst操作,本時(shí)序轉(zhuǎn)換電路從收到PLB一端輸入的請(qǐng)求,到向從設(shè)備一端輸出請(qǐng)求,僅需8個(gè)PLB_CLK時(shí)鐘周期[10-11]。
時(shí)序轉(zhuǎn)換電路體系架構(gòu)框圖如圖2所示。狀態(tài)機(jī)完成內(nèi)部各個(gè)狀態(tài)的轉(zhuǎn)換與控制;時(shí)鐘分頻電路根據(jù)分頻配置值完成對(duì)PLB時(shí)鐘的分頻,產(chǎn)生從設(shè)備使用的時(shí)鐘;寄存器控制電路完成處理器對(duì)寄存器的配置;輸出控制根據(jù)狀態(tài)機(jī)和寄存器配置值產(chǎn)生到時(shí)序轉(zhuǎn)換電路和回復(fù)PLB接口的控制信號(hào)及地址、數(shù)據(jù)總線。

圖2 時(shí)序轉(zhuǎn)換電路體系架構(gòu)框圖
時(shí)序轉(zhuǎn)換電路作為片內(nèi)PLB總線與從設(shè)備轉(zhuǎn)接口,通過(guò)將PLB總線時(shí)序轉(zhuǎn)換成從設(shè)備時(shí)序,實(shí)現(xiàn)對(duì)從設(shè)備的訪問(wèn),其對(duì)從設(shè)備的訪問(wèn)支持8位、16位和32位讀寫(xiě)訪問(wèn)。時(shí)序轉(zhuǎn)換電路為從設(shè)備提供異步接口和同步接口,其中異步接口的時(shí)序分為3個(gè)階段,具體包括建立階段/選通階段/保持階段,使用者可依據(jù)需要對(duì)3個(gè)階段的周期數(shù)進(jìn)行編程。同步時(shí)序每周期一次訪問(wèn),訪問(wèn)長(zhǎng)度用戶可配置,且可以根據(jù)用戶需要編程延遲1周期或者2周期。
時(shí)序轉(zhuǎn)換電路支持大量的PLB時(shí)序,包括單拍傳輸(128位/64位/32位/16位/8位)、Line傳輸(4字/8字/16字)以及4字Burst傳輸。
2.2.1 時(shí)鐘分頻
時(shí)鐘分頻電路如圖3所示,作用為根據(jù)配置將PLB時(shí)鐘分頻為從設(shè)備使用的時(shí)鐘,此電路可設(shè)置的分頻比率包括2分頻/4分頻/8分頻,分頻器根據(jù)設(shè)置輸出相應(yīng)PLB時(shí)鐘頻率分之一的時(shí)鐘。

圖3 時(shí)鐘分頻電路
2.2.2 寄存器控制
處理器通過(guò)PLB總線對(duì)時(shí)序轉(zhuǎn)換電路寄存器的訪問(wèn)是通過(guò)寄存器控制模塊實(shí)現(xiàn)的。
寄存器的讀寫(xiě)操作的時(shí)序圖如圖4所示,當(dāng)確認(rèn)地址有效時(shí),將sl_addrack信號(hào)拉高,向PLB總線表明當(dāng)前地址已存儲(chǔ),同時(shí)在abus_r和rnw_r兩個(gè)信號(hào)中存儲(chǔ)plb地址和讀寫(xiě)標(biāo)志。之后,若此操作為寄存器讀操作,將reg_cs_n拉低,根據(jù)abus_r的值將相應(yīng)的返回值輸出到PLB總線上。若此操作為寄存器寫(xiě)操作,將reg_cs_n拉低,將plb_wrdbus的值寫(xiě)入相應(yīng)寄存器。

圖4 寄存器讀寫(xiě)時(shí)序圖
本模塊共實(shí)現(xiàn)5個(gè)寄存器,分為兩組。第一組為全局控制寄存器,用于配置CLK_DIV分頻比率,產(chǎn)生一分頻、二分頻、四分頻、八分頻,供時(shí)鐘分頻模塊使用。第二組分為4個(gè)片選空間控制寄存器,分別控制4個(gè)從設(shè)備的同步/異步時(shí)序選擇,異步寫(xiě)建立/選通/保持時(shí)間,異步讀建立/選通/保持時(shí)間,供輸出控制模塊使用。
2.2.3 輸出控制
輸出控制根據(jù)狀態(tài)機(jī)和寄存器配置值產(chǎn)生到時(shí)序轉(zhuǎn)換電路和回復(fù)PLB接口的控制信號(hào)及地址、數(shù)據(jù)總線。下面以PLB總線上的單拍和Line讀寫(xiě)操作為例,詳細(xì)介紹其實(shí)現(xiàn)。
如圖5所示,此操作為單拍讀操作,數(shù)據(jù)位寬為64位,其從設(shè)備接口配置為32位。且設(shè)置主設(shè)備的PLB時(shí)鐘頻率為從設(shè)備的slave_clk頻率的2倍。當(dāng)PLB_pavalid信號(hào)為高,且PLB_abus地址落在本模塊的地址空間時(shí),將sl_addrack信號(hào)拉高,并將信號(hào)plb_abus、plb_be、plb_size、plb_rnw存儲(chǔ)在內(nèi)部信號(hào)abus_r、be_r、size_r、rnw_r。存儲(chǔ)后在從設(shè)備時(shí)鐘slave_clk的T0周期,根據(jù)rnw_r判斷操作的讀和寫(xiě),size_r判斷讀寫(xiě)長(zhǎng)度、be_r判斷操作類型,可知此操作為64位單拍讀操作。此時(shí)在從設(shè)備接口根據(jù)寄存的數(shù)據(jù)輸出(由于主設(shè)備接口為64位,從設(shè)備接口為32位,故從設(shè)備需要2拍才能完成一次主設(shè)備操作),因此,在T1到T2的周期,接口輸出片選slave_cs_n和讀信號(hào)slave_rd_n。之后按照存儲(chǔ)的地址信號(hào)abus_r輸出信號(hào)slave_addr,之后輸出信號(hào)slave_addr將在片選和寫(xiě)信號(hào)有效時(shí)按32位遞增。從設(shè)備接口的讀數(shù)據(jù)總線slave_data_out在T2以及T3周期返回?cái)?shù)據(jù)W0、W1,接口需要存儲(chǔ)T2周期的數(shù)據(jù)W0,之后在T3周期將W0和W1合并為64位數(shù)據(jù)后在sl_rddbus信號(hào)輸出到PLB總線,在T4周期,將讀數(shù)據(jù)響應(yīng)信號(hào)sl_rddack和讀訪問(wèn)完成信號(hào)sl_rdcomp置為1表明當(dāng)前操作完成。

圖5 PLB總線64位單拍讀時(shí)序

圖6 PLB總線8字Line寫(xiě)時(shí)序
圖6是PLB總線8字Line寫(xiě)訪問(wèn),在從設(shè)備時(shí)鐘slave_clk頻率和PLB時(shí)鐘plb_clk頻率一致時(shí)的時(shí)序圖。當(dāng)PLB_Pavalid信號(hào)為高,且PLB_abus地址落在本模塊的地址空間時(shí),將信號(hào)plb_abus、plb_be、plb_size、plb_rnw存儲(chǔ)在內(nèi)部信號(hào)abus_r、be_r、size_r、rnw_r中,存儲(chǔ)后,在slave_clk的T0周期,根據(jù)rnw_r判斷操作的讀和寫(xiě),size_r判斷讀寫(xiě)長(zhǎng)度、be_r判斷操作類型,可知此操作為8位Line寫(xiě)操作。將從設(shè)備接口設(shè)置為32位的同步接口,因此,完成8字Line操作需要8個(gè)周期,如圖6所示即T1到T8周期,輸出寫(xiě)信號(hào)slave_wr_n和片選信號(hào)slave_cs_n為0,并將PLB數(shù)據(jù)總線plb_wrdbus的數(shù)據(jù)寄存的輸出到slave_data_in,地址slave_addr的初始值采用存儲(chǔ)在內(nèi)部信號(hào)abus_r,隨后寫(xiě)信號(hào)有效遞增,在T4和T8周期,輸出PLB總線寫(xiě)數(shù)據(jù)響應(yīng)信號(hào)sl_wrdack為1,在T8周期后將寫(xiě)訪問(wèn)完成信號(hào)sl_wrcomp寫(xiě)為1[12-13]。
時(shí)序轉(zhuǎn)換電路設(shè)計(jì)完成后,基于此模塊的需求,搭建驗(yàn)證平臺(tái),對(duì)模塊的功能進(jìn)行驗(yàn)證。驗(yàn)證過(guò)程包括驗(yàn)證平臺(tái)開(kāi)發(fā)、驗(yàn)證項(xiàng)策劃以及仿真驗(yàn)證結(jié)果三個(gè)部分。下面分別對(duì)此三部分進(jìn)行介紹。
2.3.1 驗(yàn)證平臺(tái)搭建
為保證驗(yàn)證環(huán)境與實(shí)際使用環(huán)境盡可能一致,該文基于嵌入式處理器系統(tǒng)來(lái)開(kāi)發(fā)驗(yàn)證平臺(tái)。在成熟的嵌入式處理器系統(tǒng)自帶的PLB總線上,掛接自主開(kāi)發(fā)的時(shí)序轉(zhuǎn)換電路,然后在時(shí)序轉(zhuǎn)換電路后面掛接4個(gè)從設(shè)備模型。驗(yàn)證平臺(tái)的激勵(lì)由C語(yǔ)言開(kāi)發(fā),使用嵌入式處理器系統(tǒng)自帶的編譯器編譯為指令文件后,直接寫(xiě)入處理器系統(tǒng)的外部ram中,等待處理器復(fù)位完成后,將自動(dòng)從外部ram中讀取指令,并通過(guò)PLB總線向時(shí)序轉(zhuǎn)換電路下達(dá)四字、雙字、字、半字以及字節(jié)單拍傳輸,4字Line、8字Line、16字Line傳輸,四字Burst傳輸指令。時(shí)序轉(zhuǎn)換電路根據(jù)指令內(nèi)容選擇是配置內(nèi)部寄存器,還是配置從設(shè)備。為保證測(cè)試結(jié)果正確性,在時(shí)序轉(zhuǎn)換電路外部開(kāi)發(fā)同步/異步接口從設(shè)備模型,用于響應(yīng)時(shí)序轉(zhuǎn)換電路的請(qǐng)求,并檢測(cè)時(shí)序轉(zhuǎn)換電路輸出的同步、異步時(shí)序訪問(wèn)是否與期望值一致[14-15]。虛擬仿真驗(yàn)證平臺(tái)框圖如圖7所示。

圖7 時(shí)序轉(zhuǎn)換電路虛擬仿真驗(yàn)證平臺(tái)框圖
2.3.2 驗(yàn)證策劃
為進(jìn)行全面驗(yàn)證,針對(duì)時(shí)序轉(zhuǎn)換電路需求及設(shè)計(jì)核心要點(diǎn),涵蓋所有PLB總線端和從設(shè)備端支持的模式,策劃出以下驗(yàn)證項(xiàng),具體如表1所示。

表1 驗(yàn)證項(xiàng)策劃表
2.3.3 仿真驗(yàn)證結(jié)果
在上文搭建的驗(yàn)證平臺(tái)上,按照策劃的驗(yàn)證項(xiàng)對(duì)時(shí)序轉(zhuǎn)換電路進(jìn)行測(cè)試,測(cè)試結(jié)果表明,此時(shí)序轉(zhuǎn)換電路功能和性能達(dá)到了設(shè)計(jì)要求,能夠高效、靈活地在PLB總線和從設(shè)備間進(jìn)行數(shù)據(jù)傳遞。
根據(jù)測(cè)試后的代碼覆蓋率的統(tǒng)計(jì)結(jié)果可知,被測(cè)時(shí)序轉(zhuǎn)換電路的總語(yǔ)句覆蓋率(stmt graph)為100%,分支覆蓋率(branch graph)為100%。由于default語(yǔ)句很難覆蓋到,所以其內(nèi)部部分子模塊的覆蓋率并未達(dá)到100%。綜上所述,上述代碼覆蓋率百分比的情況可以認(rèn)為滿足了目標(biāo)覆蓋率要求。
基于嵌入式處理器,給出了一種時(shí)序轉(zhuǎn)換電路,能夠在PLB總線和從設(shè)備間高效、靈活地進(jìn)行數(shù)據(jù)傳遞,并進(jìn)行了必要的功能仿真和工程實(shí)踐。結(jié)果表明,該轉(zhuǎn)換電路工作穩(wěn)定、性能良好,較好地滿足了應(yīng)用需求,且對(duì)其他類似接口轉(zhuǎn)換設(shè)計(jì)具有一定的借鑒意義。