杜 斐,何嘉文,劉承禹,張 駿,田 澤
(航空工業(yè)西安航空計算技術(shù)研究所,陜西 西安 710068)
嵌入式處理器是目前片上系統(tǒng)中常用的處理器引擎,包括處理器、PLB總線系統(tǒng)、軟件驅(qū)動等部分,其性能高、功耗低、使用靈活,且能夠通過PLB總線和其他IP相連接,在片上系統(tǒng)芯片中應(yīng)用廣泛[1-2]。
由于PLB總線結(jié)構(gòu)復(fù)雜,時序多樣,且其接口時序與常用的寄存器接口訪問時序差距較大,不利于迅速建立成熟IP和PLB總線連接。為解決此問題,首先深入研究嵌入式處理器內(nèi)部PLB總線協(xié)議和PLB總線各個接口的結(jié)構(gòu)及機制,然后在理解PLB總線系統(tǒng)時序以及內(nèi)部各子模塊的功能與工作機制的基礎(chǔ)上,提出一種高效時序轉(zhuǎn)換電路解決方案,以滿足PLB端單拍傳輸、Line傳輸和Burst傳輸,從設(shè)備端同步、異步時序傳輸?shù)耐ㄐ判枨?。通過功能仿真和工程實踐表明,該時序轉(zhuǎn)換電路工作穩(wěn)定,性能良好,具有配置靈活、使用方便、數(shù)據(jù)傳輸效率高等優(yōu)點,較好地滿足了應(yīng)用需求[3-5]。
PLB總線是嵌入式處理器內(nèi)部的主要總線,主要特性如下:
性能高:支持讀操作和寫操作的重疊傳輸,支持兩種操作在同一周期發(fā)出,以最大程度提高總線效率;數(shù)據(jù)總線和地址總線不耦合,以提高系統(tǒng)帶寬;地址流水線可擴展,支持?jǐn)?shù)據(jù)重疊傳輸,總線的延遲減少;支持總線請求/仲裁重疊,支持同步總線。
靈活性高:最多支持16主16從設(shè)備,且為每個主設(shè)備分配多個優(yōu)先級以方便根據(jù)主從設(shè)備的重要度仲裁;支持原子操作;支持指令預(yù)取和數(shù)據(jù)預(yù)取;支持4字節(jié)到32字節(jié)的各種長度的DMA傳輸[6-7]。
為實現(xiàn)片內(nèi)PLB總線和從設(shè)備的連接,該文提出一種高效時序轉(zhuǎn)換電路解決方案。其具體功能為,PLB端支持四字、雙字、字、半字以及字節(jié)單拍傳輸,4字Line、8字Line、16字Line傳輸和四字Burst傳輸。從設(shè)備端支持同步時序、異步時序,其中,可根據(jù)需要編程異步時序的時鐘周期數(shù),每個片選空間可分別獨立編程,且能提供4個片選空間,每個片選空間大小固定為32 MB,其地址空間分配固定,PLB4總線上的單次訪問不能跨越片選空間分配的32 MB地址邊界[8-9]。時序轉(zhuǎn)換電路系統(tǒng)應(yīng)用框圖如圖1所示。
圖1 時序轉(zhuǎn)換電路系統(tǒng)應(yīng)用框圖
該文設(shè)計開發(fā)的時序轉(zhuǎn)換電路具有以下特點:
(1)配置靈活:為適應(yīng)各種從設(shè)備接口,本時序轉(zhuǎn)換電路支持異步接口和同步接口,異步接口的時序分為3個階段,具體包括建立階段/選通階段/保持階段,使用者可依據(jù)需要對3個階段的周期數(shù)進行編程。同步時序每周期一次訪問,訪問長度用戶可配置,且可以根據(jù)用戶需要編程延遲1周期或者2周期。
(2)使用方便:基于用戶的使用需求,本時序轉(zhuǎn)換電路在PLB總線端主要支持單拍操作、8字Line操作和4字Burst操作,用戶進行小規(guī)模數(shù)據(jù)搬運(32位以下數(shù)據(jù))時,可使用單拍操作,進行中等規(guī)模數(shù)據(jù)搬運(32~512位數(shù)據(jù))時,可使用8字Line操作,進行大規(guī)模數(shù)據(jù)搬運(512位數(shù)據(jù)以上)時,可使用4字Burst操作。
(3)數(shù)據(jù)傳輸效率高:進行單拍操作,本時序轉(zhuǎn)換電路從收到PLB一端輸入的請求,到向從設(shè)備一端輸出請求,僅需2個PLB_CLK時鐘周期;進行4字Burst操作,本時序轉(zhuǎn)換電路從收到PLB一端輸入的請求,到向從設(shè)備一端輸出請求,僅需8個PLB_CLK時鐘周期[10-11]。
時序轉(zhuǎn)換電路體系架構(gòu)框圖如圖2所示。狀態(tài)機完成內(nèi)部各個狀態(tài)的轉(zhuǎn)換與控制;時鐘分頻電路根據(jù)分頻配置值完成對PLB時鐘的分頻,產(chǎn)生從設(shè)備使用的時鐘;寄存器控制電路完成處理器對寄存器的配置;輸出控制根據(jù)狀態(tài)機和寄存器配置值產(chǎn)生到時序轉(zhuǎn)換電路和回復(fù)PLB接口的控制信號及地址、數(shù)據(jù)總線。
圖2 時序轉(zhuǎn)換電路體系架構(gòu)框圖
時序轉(zhuǎn)換電路作為片內(nèi)PLB總線與從設(shè)備轉(zhuǎn)接口,通過將PLB總線時序轉(zhuǎn)換成從設(shè)備時序,實現(xiàn)對從設(shè)備的訪問,其對從設(shè)備的訪問支持8位、16位和32位讀寫訪問。時序轉(zhuǎn)換電路為從設(shè)備提供異步接口和同步接口,其中異步接口的時序分為3個階段,具體包括建立階段/選通階段/保持階段,使用者可依據(jù)需要對3個階段的周期數(shù)進行編程。同步時序每周期一次訪問,訪問長度用戶可配置,且可以根據(jù)用戶需要編程延遲1周期或者2周期。
時序轉(zhuǎn)換電路支持大量的PLB時序,包括單拍傳輸(128位/64位/32位/16位/8位)、Line傳輸(4字/8字/16字)以及4字Burst傳輸。
2.2.1 時鐘分頻
時鐘分頻電路如圖3所示,作用為根據(jù)配置將PLB時鐘分頻為從設(shè)備使用的時鐘,此電路可設(shè)置的分頻比率包括2分頻/4分頻/8分頻,分頻器根據(jù)設(shè)置輸出相應(yīng)PLB時鐘頻率分之一的時鐘。
圖3 時鐘分頻電路
2.2.2 寄存器控制
處理器通過PLB總線對時序轉(zhuǎn)換電路寄存器的訪問是通過寄存器控制模塊實現(xiàn)的。
寄存器的讀寫操作的時序圖如圖4所示,當(dāng)確認地址有效時,將sl_addrack信號拉高,向PLB總線表明當(dāng)前地址已存儲,同時在abus_r和rnw_r兩個信號中存儲plb地址和讀寫標(biāo)志。之后,若此操作為寄存器讀操作,將reg_cs_n拉低,根據(jù)abus_r的值將相應(yīng)的返回值輸出到PLB總線上。若此操作為寄存器寫操作,將reg_cs_n拉低,將plb_wrdbus的值寫入相應(yīng)寄存器。
圖4 寄存器讀寫時序圖
本模塊共實現(xiàn)5個寄存器,分為兩組。第一組為全局控制寄存器,用于配置CLK_DIV分頻比率,產(chǎn)生一分頻、二分頻、四分頻、八分頻,供時鐘分頻模塊使用。第二組分為4個片選空間控制寄存器,分別控制4個從設(shè)備的同步/異步時序選擇,異步寫建立/選通/保持時間,異步讀建立/選通/保持時間,供輸出控制模塊使用。
2.2.3 輸出控制
輸出控制根據(jù)狀態(tài)機和寄存器配置值產(chǎn)生到時序轉(zhuǎn)換電路和回復(fù)PLB接口的控制信號及地址、數(shù)據(jù)總線。下面以PLB總線上的單拍和Line讀寫操作為例,詳細介紹其實現(xiàn)。
如圖5所示,此操作為單拍讀操作,數(shù)據(jù)位寬為64位,其從設(shè)備接口配置為32位。且設(shè)置主設(shè)備的PLB時鐘頻率為從設(shè)備的slave_clk頻率的2倍。當(dāng)PLB_pavalid信號為高,且PLB_abus地址落在本模塊的地址空間時,將sl_addrack信號拉高,并將信號plb_abus、plb_be、plb_size、plb_rnw存儲在內(nèi)部信號abus_r、be_r、size_r、rnw_r。存儲后在從設(shè)備時鐘slave_clk的T0周期,根據(jù)rnw_r判斷操作的讀和寫,size_r判斷讀寫長度、be_r判斷操作類型,可知此操作為64位單拍讀操作。此時在從設(shè)備接口根據(jù)寄存的數(shù)據(jù)輸出(由于主設(shè)備接口為64位,從設(shè)備接口為32位,故從設(shè)備需要2拍才能完成一次主設(shè)備操作),因此,在T1到T2的周期,接口輸出片選slave_cs_n和讀信號slave_rd_n。之后按照存儲的地址信號abus_r輸出信號slave_addr,之后輸出信號slave_addr將在片選和寫信號有效時按32位遞增。從設(shè)備接口的讀數(shù)據(jù)總線slave_data_out在T2以及T3周期返回數(shù)據(jù)W0、W1,接口需要存儲T2周期的數(shù)據(jù)W0,之后在T3周期將W0和W1合并為64位數(shù)據(jù)后在sl_rddbus信號輸出到PLB總線,在T4周期,將讀數(shù)據(jù)響應(yīng)信號sl_rddack和讀訪問完成信號sl_rdcomp置為1表明當(dāng)前操作完成。
圖5 PLB總線64位單拍讀時序
圖6 PLB總線8字Line寫時序
圖6是PLB總線8字Line寫訪問,在從設(shè)備時鐘slave_clk頻率和PLB時鐘plb_clk頻率一致時的時序圖。當(dāng)PLB_Pavalid信號為高,且PLB_abus地址落在本模塊的地址空間時,將信號plb_abus、plb_be、plb_size、plb_rnw存儲在內(nèi)部信號abus_r、be_r、size_r、rnw_r中,存儲后,在slave_clk的T0周期,根據(jù)rnw_r判斷操作的讀和寫,size_r判斷讀寫長度、be_r判斷操作類型,可知此操作為8位Line寫操作。將從設(shè)備接口設(shè)置為32位的同步接口,因此,完成8字Line操作需要8個周期,如圖6所示即T1到T8周期,輸出寫信號slave_wr_n和片選信號slave_cs_n為0,并將PLB數(shù)據(jù)總線plb_wrdbus的數(shù)據(jù)寄存的輸出到slave_data_in,地址slave_addr的初始值采用存儲在內(nèi)部信號abus_r,隨后寫信號有效遞增,在T4和T8周期,輸出PLB總線寫數(shù)據(jù)響應(yīng)信號sl_wrdack為1,在T8周期后將寫訪問完成信號sl_wrcomp寫為1[12-13]。
時序轉(zhuǎn)換電路設(shè)計完成后,基于此模塊的需求,搭建驗證平臺,對模塊的功能進行驗證。驗證過程包括驗證平臺開發(fā)、驗證項策劃以及仿真驗證結(jié)果三個部分。下面分別對此三部分進行介紹。
2.3.1 驗證平臺搭建
為保證驗證環(huán)境與實際使用環(huán)境盡可能一致,該文基于嵌入式處理器系統(tǒng)來開發(fā)驗證平臺。在成熟的嵌入式處理器系統(tǒng)自帶的PLB總線上,掛接自主開發(fā)的時序轉(zhuǎn)換電路,然后在時序轉(zhuǎn)換電路后面掛接4個從設(shè)備模型。驗證平臺的激勵由C語言開發(fā),使用嵌入式處理器系統(tǒng)自帶的編譯器編譯為指令文件后,直接寫入處理器系統(tǒng)的外部ram中,等待處理器復(fù)位完成后,將自動從外部ram中讀取指令,并通過PLB總線向時序轉(zhuǎn)換電路下達四字、雙字、字、半字以及字節(jié)單拍傳輸,4字Line、8字Line、16字Line傳輸,四字Burst傳輸指令。時序轉(zhuǎn)換電路根據(jù)指令內(nèi)容選擇是配置內(nèi)部寄存器,還是配置從設(shè)備。為保證測試結(jié)果正確性,在時序轉(zhuǎn)換電路外部開發(fā)同步/異步接口從設(shè)備模型,用于響應(yīng)時序轉(zhuǎn)換電路的請求,并檢測時序轉(zhuǎn)換電路輸出的同步、異步時序訪問是否與期望值一致[14-15]。虛擬仿真驗證平臺框圖如圖7所示。
圖7 時序轉(zhuǎn)換電路虛擬仿真驗證平臺框圖
2.3.2 驗證策劃
為進行全面驗證,針對時序轉(zhuǎn)換電路需求及設(shè)計核心要點,涵蓋所有PLB總線端和從設(shè)備端支持的模式,策劃出以下驗證項,具體如表1所示。
表1 驗證項策劃表
2.3.3 仿真驗證結(jié)果
在上文搭建的驗證平臺上,按照策劃的驗證項對時序轉(zhuǎn)換電路進行測試,測試結(jié)果表明,此時序轉(zhuǎn)換電路功能和性能達到了設(shè)計要求,能夠高效、靈活地在PLB總線和從設(shè)備間進行數(shù)據(jù)傳遞。
根據(jù)測試后的代碼覆蓋率的統(tǒng)計結(jié)果可知,被測時序轉(zhuǎn)換電路的總語句覆蓋率(stmt graph)為100%,分支覆蓋率(branch graph)為100%。由于default語句很難覆蓋到,所以其內(nèi)部部分子模塊的覆蓋率并未達到100%。綜上所述,上述代碼覆蓋率百分比的情況可以認為滿足了目標(biāo)覆蓋率要求。
基于嵌入式處理器,給出了一種時序轉(zhuǎn)換電路,能夠在PLB總線和從設(shè)備間高效、靈活地進行數(shù)據(jù)傳遞,并進行了必要的功能仿真和工程實踐。結(jié)果表明,該轉(zhuǎn)換電路工作穩(wěn)定、性能良好,較好地滿足了應(yīng)用需求,且對其他類似接口轉(zhuǎn)換設(shè)計具有一定的借鑒意義。