彭德生,蔣志翔
(中國航天科工集團第二研究院706所,北京100854)
2011年,IEEE發(fā)布了SystemC最新的1666-2011標準[1],開啟以系統(tǒng)建模的方法進行系統(tǒng)架構設計和分析的新世代。各大EDA廠商均推出了自己系統(tǒng)建模的平臺,如Synopsys的 Platform Architect,Mentor Graphics的 Vista Architect,系統(tǒng)建模成為芯片設計的熱點。
以往用Verilog設計數(shù)字電路的工程師從硬件描述的思維設計電路,他們往往沒有C++面向?qū)ο蟮木幊探?jīng)驗,難以用SystemC進行系統(tǒng)級模型的設計。為規(guī)范化系統(tǒng)建模過程、提高建模效率,本文前部分提出并實踐了基于SystemC建立MIPS構架處理器的周期精準模型的方法,以自頂向下的方式規(guī)范化建模過程,采用 “結構框圖-模塊細化-模型映射”3步走,并介紹使用 “宏映射”的技術,保持Verilog語言的一些基本特征,讓硬件工程師能輕松轉(zhuǎn)移到SystemC系統(tǒng)級模型設計上。SystemC從高抽象層次的系統(tǒng)級描述系統(tǒng),便于進行系統(tǒng)架構設計空間的探索和驗證。為探索用系統(tǒng)級模型進行系統(tǒng)架構設計的方法,本文后部分以高速緩存Cache的設計為例,基于系統(tǒng)級仿真定量分析Cache的命中率與Cache相聯(lián)路數(shù)、容量的關系,找出最優(yōu)的Cache架構設計。通過系統(tǒng)建模的方法,將系統(tǒng)級模型加上激勵測試程序進行系統(tǒng)仿真,可提取出緩存命中率、總線訪問延遲、性能指標CPI(cycle per instruction)等剖面數(shù)據(jù),可評估當前處理器構架的性能,發(fā)現(xiàn)系統(tǒng)的性能瓶頸,尋求滿足性能需求及設計約束最優(yōu)化的架構方案。由于系統(tǒng)級建模的優(yōu)越性,系統(tǒng)建模的方法將成為系統(tǒng)架構設計和分析的主要途徑。
SystemC是由一組C++類庫所組成的硬件建模平臺,也是一種新型設計方法,結合了硬件建模機制原理和面向?qū)ο缶幊虄煞矫娴膬?yōu)點,可在寄存器傳輸級、事務級、系統(tǒng)級不同抽象層次進行硬件建模。SystemC基本單元是模塊 (module),模塊內(nèi)可包含子模塊、端口和過程,模塊之間通過端口和信號進行連接和通訊,利用SystemC的這些基本機制可方便建立CA (cycle accurate)時鐘周期精確的模型。SystemC重要概念有模塊、進程、接口、端口以及通道[1]。
進程 (process)是程序在并發(fā)環(huán)境中的執(zhí)行過程,SystemC的基本進程包括:SC_METHOD,SC_THREAD,SC_CTHREAD。
SC_METHOD:當敏感列表上有事件發(fā)生時,才被調(diào)用,調(diào)用后迅速返回,用法很像Verilog中描述的組合邏輯;
SC_THREAD:能夠被掛起和重新激活,當敏感表上有事件發(fā)生,線程被重新激活運行到新的wait()語句再重新掛起,主要用于對程序的驗證;
SC_CTHREAD:繼承于線程進程,只能在時鐘的上升沿或者下降沿被觸發(fā)或者激活,用于時鐘精確的建模。
模塊間通道通信如圖1所示。

圖1 模塊間通道通信
接口 (interface),提供一組固定的通信方法,是C++抽象類,它以純虛數(shù)的方式定義了一組抽象的方法。通道 (channel),實現(xiàn)一個或者多個接口,接口中定義的虛函數(shù)必須在通道中實現(xiàn),它是一個實現(xiàn)通信功能的 “模塊”,只不過它僅完成通信功能。端口 (port),定義在模塊中,模塊通過端口與通道連接,通過端口,模塊中的進程就能夠連接到一定的接口,與其它模塊通信。
TLM (transaction level modeling)2.0的 引 入,是 在事務層[1,2]對硬件建模,以獲取更高的仿真速度,允許設計人員對系統(tǒng)架構及性能的分析、對固件驅(qū)動及應用軟件在RTL (register transfer level)實現(xiàn)前進行開發(fā)驗證。TLM 2.0是建立在SystemC類庫之上的類庫,方便用戶進行事務級模型的開發(fā)。TLM 2.0主要由TLM-1、互操作層和實用類組成。TLM 2.0的核心是互操作層,主要由一般的負載模型及基本的總線協(xié)議、發(fā)起者與目標套接字、全局時間量和核心接口組成。而核心的接口又由阻塞傳輸接口、非阻塞的傳輸接口、直接存儲訪問接口、傳輸調(diào)試接口組成[1]。
TLM 2.0主要有兩種模型風格:寬松時序LT (loosely-timed)和近似時序 AT (approximately-timed),以便用在不同場合。一般LT用在軟件開發(fā)調(diào)試上,AT用在硬件架構性能分析上。寬松時序LT有較快的執(zhí)行速度。一個事務有兩個時間點,請求的開始時間點與響應的開始時間點。LT允許進程跑在仿真時間前以獲得較快仿真速度。近似時序AT的事務有多個階段,一般在請求響應的開始、結束都有時間點,并按照SystemC調(diào)度器嚴格按時間執(zhí)行。
不難發(fā)現(xiàn)SystemC和Verilog在硬件描述方面語言特征很像,開發(fā)SystemC標準的工程師,正是借用Verilog的硬件描述方法和概念,將RTL級的描述語言升級為系統(tǒng)級的建模語言。Verilog采用層次化、模塊化的設計方法,將一個復雜的設計劃分成幾個頂層模塊,這些頂層模塊又可細化為子模塊,子模塊又可細化為更小的模塊,而模塊之間的連接、通信是通過input、output或inout信號實現(xiàn)的。這樣,一個復雜的硬件設計就劃分為以模塊為基本單元的層次化的樹狀結構,然后用分而治之的方法逐個設計每個模塊,使設計變得條理化而更容易。模塊內(nèi)部定義了內(nèi)部使用信號,有assign為代表的連續(xù)賦值語句和always塊為代表的過程賦值語句。assign語句描述組合邏輯,輸出隨時隨輸入變化而變化,沒有時鐘周期的概念,只有輸入到輸出的最大延遲路徑?jīng)Q定輸出何時有效。電平敏感的always塊主要用來描述復雜的組合邏輯,也可能描述含鎖存器的電路。時鐘邊沿敏感的always塊用來描述時序電路,通常在always塊被賦值的信號都是reg寄存器,寄存器能存儲信息,僅在時鐘邊沿改變值,做到信號的同步。模塊就是通過其中的控制邏輯,將輸入信號和內(nèi)部信號加工處理,驅(qū)動輸出信號;模塊的輸出僅取決于輸入和內(nèi)部的控制邏輯,而且一個輸入信號只能有一個驅(qū)動模塊,使模塊間的耦合度降低,模塊間的關聯(lián)和通信僅靠輸入輸出端口;模塊化的設計方法便于設計實現(xiàn)和調(diào)試驗證。
Verilog語言的主要概念有模塊module、輸入信號input、輸出信號output、連續(xù)賦值語句assign(描述組合邏輯)、過程賦值語句always塊 (主要描述時序邏輯)、時鐘沿等,SystemC建模語言主要概念有模塊sc_module、進程sc_process、端口sc_port、接口sc_interface、通道sc_channel,它們的對應關系見表1。

表1 Verilog與SystemC對比關系
精簡指令集計算機 RISC (reduced instruction set com-puter)的代表MIPS指令架構采用32位固定的指令長度、簡明的指令結構,便于譯碼;擁有32個通用寄存器;僅Load/Store指令可訪存,訪存尋址方法少:這些特點使MIPS處理器便于采用流水線等技術增強CPU性能。
經(jīng)典MIPS處理器的執(zhí)行過程分為取指IF(instruction fetch)、譯碼ID (instruction decode)、執(zhí)行 EX (execute)、訪存 MEM (memory access)、寫回 WB (write back)這5個階段[3,4],用控制器產(chǎn)生的控制信號控制處理器的執(zhí)行。根據(jù)處理器的執(zhí)行流,MIPS處理器可劃分為取指部件、譯碼部件、執(zhí)行部件、訪存部件和數(shù)據(jù)寫回通路這5大功能部件;根據(jù)處理器的控制流,MIPS處理器包含控制各功能部件協(xié)同工作的控制器;根據(jù)處理器數(shù)據(jù)流的傳遞,MIPS處理器包含通用寄存器文件、L1指令Cache、L1數(shù)據(jù)Cache以及可選的L2共享Cache等數(shù)據(jù)存儲部件。
(1)取指階段:CPU在一條指令執(zhí)行的第一階段是根據(jù)當前程序計數(shù)器PC值從存儲器中獲得當前要執(zhí)行的指令,對于MIPS結構的指令而言,這是一個固定的32比特數(shù)據(jù)。當L1指令Cache命中時,可快速取得指令存入指令寄存器IR內(nèi);當L1指令Cache缺失時,需要訪問下一級高速緩存,最會的情況是到片外的主存儲器中取指令,當然這會帶來很大的處理器延遲。
(2)譯碼階段:現(xiàn)在我們已將指令取來放在IR (instruction register)寄存器中了,在譯碼階段就是根據(jù)IR產(chǎn)生各功能部件的控制信號和數(shù)據(jù)輸入信號。MIPS指令分為算術邏輯指令、訪存指令、程序轉(zhuǎn)移指令、數(shù)據(jù)傳輸指令和處理器控制指令等類別。指令譯碼就是按照MIPS指令編碼格式識別當前指令是何種類型指令、需用到什么功能部件,以產(chǎn)生該功能部件需要的控制信號和數(shù)據(jù)信號。譯碼階段還需要完成的是源寄存器的讀取,根據(jù)指令編碼中源寄存器Rs、Rt的寄存器號,從寄存器文件中讀取源寄存器的值,以用于指令執(zhí)行的下一階段。
(3)執(zhí)行階段:執(zhí)行部件主要包含算術邏輯單元ALU(arithmetic logic unit)和 浮 點 運 算 單 元 FPU (float point unit)這些功能部件。算術邏輯單元ALU主要包括定點加法器、邏輯運算、移位運算、定點乘法器、定點除法器;浮點運算單元FPU主要包括浮點加法器、浮點乘法器和浮點除法器。經(jīng)過譯碼,我們知道了當前指令的類型以及將占用的功能部件,然后使用譯碼階段讀取的源操作數(shù)進行計算。以整數(shù)加法 “A+B”指令為例,指令譯碼產(chǎn)生的控制信號將選擇ALU的加法單元,使用譯碼階段讀取的寄存器值A、B為加法器的輸入,經(jīng)過通常是1個時鐘周期的延遲,加法器的輸出端產(chǎn)生有效的輸出C,以供下一階段使用。
(4)訪存階段:訪存階段不是所有指令都需要經(jīng)歷的指令執(zhí)行階段,僅訪存Load/Store型指令才需要。訪存與取指有些相同,都是對主存儲器的訪問,訪存特指對數(shù)據(jù)的訪問,可讀可寫,先要訪問L1數(shù)據(jù)Cache;取指是指對程序指令的訪問,只可讀,先訪問L1指令Cache。訪存先要計算數(shù)據(jù)的地址,需要用到上一階段的ALU計算出訪存地址A,然后在此階段先訪問L1數(shù)據(jù)Cache,若命中就可快速返回,否則需要訪問下一級存儲層次,這將帶來更大的方寸延遲。
(5)寫回階段:寄存器寫回階段也不是所有指令都需要經(jīng)歷的指令執(zhí)行階段,僅需要更新寄存器值的指令才需要,如大多數(shù)算術邏輯指令和Load型訪存指令。寫回階段唯一需要做的是將ALU的輸出或訪存部件的輸出鏈接到寄存器文件的輸入端,更新寄存器的值,它其實起到數(shù)據(jù)通路的作用。
針對周期精確及端口信號級精確的SystemC模型設計[5-7],本文提出模塊化的 “結構框圖-模塊細化-模型映射”的規(guī)范化SystemC模型映設計方法。
2.2.1 結構框架
SystemC建模的第一步是根據(jù)目標系統(tǒng)的功能特征,將系統(tǒng)劃分為獨立的功能子系統(tǒng),以結構框圖的形式表示出來,各功能子系統(tǒng)的聯(lián)系、數(shù)據(jù)交互可用箭頭和文字標注。這樣目標系統(tǒng)的結構框圖被建立好,從這樣的系統(tǒng)頂層框圖可清楚看到系統(tǒng)可分為幾大部分,以及各部分關聯(lián),為建模的下一步打好基礎。如圖2經(jīng)典5周期MIPS處理器的結構框架。

圖2 經(jīng)典MIPS處理器結構框架
2.2.2 模塊細化
建模的第二步是模塊細化,就是將頂層的功能子系統(tǒng)進一步模塊化、功能細化。這一階段要精確到模塊module,找出系統(tǒng)的主要模塊,并且要明確各模塊的主要接口信號(input、output、inout),這時模塊內(nèi)的邏輯實現(xiàn)可先不考慮。
具體而言,IF取指功能部件,需要的輸入信號有時鐘輸入Clk、指令的地址PC (program counter)、取指請求信號Inst_Req等,主要的輸出有取指應答Inst_Ack、取到的指令Inst。取指部件包含L1指令Cache子模塊,主要的輸入是指令地址PC,輸出為所取的指令Inst。取指功能部件可描述為:IF {Clk_I,PC_I,Inst_Req_I,Inst_Ack_O、Inst_O}。
ID譯碼功能部件,輸入剛取的指令Inst,輸出有ALU操作碼ALU_Op、操作數(shù)ALU_DataA和ALU_DataB以及訪存請求Mem_Req、訪存地址基地址 Mem_Addr-Base、訪存寫數(shù)據(jù)Mem_DataWr等。經(jīng)過仔細分析,譯碼部件要讀取源操作數(shù),因而包含寄存器讀取子模塊Regfile;輸入是指令譯碼的RsIdx、RtIdx源寄存器索引號,輸出是第一源操作數(shù)Rs和第二源操作數(shù)Rt寄存器的值。譯碼功能部件可描述為:ID {Clk_I,Inst_I,ALU_Op_O,ALU_DataA_O,ALU_DataB_O,Mem_Req_O,Mem_AddrBase_O,Mem_DataWr_O}。
EX執(zhí)行功能部件,根據(jù)處理器所實現(xiàn)的運算功能,執(zhí)行功能部件包括定點加法器Adder、邏輯運算Logic、移位運算Shifter、比較器Comparator、定點乘法器 Multiplier、定點除法器Divider等基本運算單元。這些運算單元的輸入均是ID譯碼部件產(chǎn)生的ALU輸入源數(shù)據(jù)ALU_DataA和ALU_DataB,而由操作碼ALU_Op譯碼產(chǎn)生對不同子功能運算單元的選擇信號,因一條指令僅使用一個運算單元,這樣的選擇信號可避免其它運算單元的工作,從而有利于低功耗的實現(xiàn)。這些運算單元主要的輸出是各自的運算結果,通過前面的運算單元選擇信號可選擇當前有效的運算結果作為整個ALU的輸出ALU_Out;而有些運算單元有自己特殊的輸出信號,如加法器有溢出C輸出標志、符號S輸出標志,比較器有零Z輸出標志、比較結果LT標志,除法器有除數(shù)為零異常標志信號等。執(zhí)行功能部件可描述為:EX {Clk_I,ALU _Op_I,ALU _DataA_I,ALU _DataB_I,ALU_Out,C,S,Z,LT}。
MEM訪存功能部件,僅供Load/Store型指令訪問程序所使用數(shù)據(jù)。輸入為ID部件產(chǎn)生的訪存請求信號Mem_Req、讀寫控制信號 Mem_RW、訪存寫數(shù)據(jù) Mem_DataWr,以及EX執(zhí)行部件計算出的訪存地址Mem_Addr。當是Store型指令時,將Mem_DataWr數(shù)據(jù)寫入內(nèi)存后指令執(zhí)行完畢;當為Load型指令時,訪問存儲器取得數(shù)據(jù)Mem_DataRd,然后還要經(jīng)寫回階段存入寄存器。MEM訪存部件產(chǎn)生訪存控制信號,主要包括L1級數(shù)據(jù)Cache子模塊。訪存功能部件可描述為 MEM {Clk_I,Mem_Req_I,Mem_RW_I,Mem_Addr_I,Mem_DataWr_I,Mem_DataRd_O}。
WB寫回功能部件,主要作用是完成通用寄存器的更新。輸入有算術邏輯指令使用EX功能部件產(chǎn)生的計算結果ALU_Out、Load型指令使用MEM功能部件取回的數(shù)據(jù)Mem_DataRd,以此選擇寄存器文件寫數(shù)據(jù)輸入Reg_DataWr;另外有寄存器寫控制信號Reg_WriteEN。寫回功能部件可描述為 WB {Clk_I,Reg_DataWr_I,Reg_WriteEN}。
數(shù)字系統(tǒng)包含數(shù)據(jù)通路和控制邏輯兩大部分,數(shù)據(jù)通路就是上面描述的5大功能部件;而為使各種指令在處理器上經(jīng)不同執(zhí)行路徑有條不紊的執(zhí)行,一個控制指令全局執(zhí)行的狀態(tài)機FSM是必需的。FSM狀態(tài)有S_IDLE、S_IF、S_ID、S_EX、S_MEM、S_WB,輸入為指令類型Inst_Type、取指完成信號Inst_Ack、訪存完成信號Mem_Ack,輸出為各階段的執(zhí)行控制信號和當前狀態(tài),狀態(tài)機可描述為FSM {Clk_I,Inst_Type_I,Inst_Ack_I,Mem_Ack_I,Inst_Req_O,Decode_Req_O,Execute_Req_O,Mem_Req_O,WB_Req_O,Current_State_O}。
2.2.3 模型映射
經(jīng)過用畫結構框圖方法進行系統(tǒng)頂層描述,再進行模塊的細化后,最后進行系統(tǒng)到SystemC模型的映射。模型映射用SystemC語言實現(xiàn)各個模塊module的內(nèi)部邏輯,將頂層結構框圖描述的系統(tǒng)映射為SystemC的模型系統(tǒng)。當有Verilog的RTL模型時,可更容易將RTL模型映射為SystemC模型,因SystemC標準參考了Verilog關于模塊、接口等概念。
本文所建立的MIPS處理器模型,主要就是用SystemC提供的接口實現(xiàn)5大功能部件和控制狀態(tài)機。下面以IF取指部件為例,介紹SystemC的實現(xiàn)。


取指用稱為Fetch的類實現(xiàn),該類繼承與SystemC的模塊基類sc_module,對應于Verilog的模塊 module。Fetch類中首先定義模塊的接口信號,sc_in接口類定義輸入信號,對應于input;sc_out接口類定義輸出信號,對應于output。然后定義類自己的內(nèi)部變量,本例中是指令存儲器imem,接著定義類的內(nèi)部函數(shù)聲明。最后是類的構造函數(shù)定義,使用宏SC_CTOR定義構造函數(shù),宏參數(shù)為類的名字Fetch。在構造函數(shù)里,首先用SC_CTHREAD定義模塊的SystemC線程,SC_CTHREAD在每個時鐘周期邊沿激活,用于周期精確模型建模,宏第一個參數(shù)FetchMain表示它是線程執(zhí)行的入口函數(shù),第二個參數(shù)CLK_I.pos(),表明線程在時鐘的上升沿觸發(fā);然后申請了32KB的指令存儲空間imem,從機器指令二進制文件Source.bin中讀入指令數(shù)據(jù)初始化指令存儲器imem。下面來看SystemC線程FetchMain:

SystemC的線程一般是個死循環(huán),在運行了指定時鐘周期數(shù)后,由SystemC調(diào)度器回收結束各線程。周期精確主要靠wait()函數(shù)同步各個SystemC線程在每個時鐘周期執(zhí)行一次,當線程被調(diào)度器調(diào)度執(zhí)行,線程從wait()的下一條語句開始執(zhí)行直到遇到wait()語句結束本次執(zhí)行。在本IF取指部件的實現(xiàn)中,先對取指請求信號Inst_Req_I進行采樣,若有效則繼續(xù)執(zhí)行,否則等待下一時鐘周期再采樣該信號。取指需先用程序計數(shù)器PC值計算下一條指令的地址,訪問指令存儲器imem并通過Inst_O輸出端口輸出所取得的指令,然后PC加4指向下一條順序指令地址,置Inst_Ack_O信號有效,通知其它模塊輸出指令有效。
為了保持SystemC建模風格和Verilog硬件描述風格一致,讓從已有的RTL模型映射到SystemC的系統(tǒng)級模型更容易,本文提出運用C++語言提供的宏,使用 “宏映射”技術:
對連續(xù)賦值語句的assign關鍵字,在SystemC中可定義空宏 “#define assign”,則可編譯通過;
定義wire或reg型變量,可先定義以下宏:“#define wire(m,n) unsigned int”,則聲明20位的信號可表示為:“wire(19,0) signal;”,與Verilog十分相似;
對于位選擇,如signal[15:8],SystemC中可定義宏:“#define BITS (name,m,n)(((unsigned int)name<< (31-m))>> (32- (m-n+1)))”,可如 BITS (signal,15,8)使用。
當系統(tǒng)的模型建立后,需要驗證模型的正確性[7]。Verilog描述的RTL模型驗證困難、可調(diào)式性差,驗證需要用Verilog等語言寫測試激勵,測試激勵生成效率低下而且不能充分測試系統(tǒng)的功能與性能;主要通過查看信號波形圖分析系統(tǒng)的問題,不能進行運行時單步調(diào)試,不直觀,也不容易定位系統(tǒng)的問題。而用SystemC描述的系統(tǒng)級模型,借助C++集成開發(fā)調(diào)試環(huán)境,將系統(tǒng)架構設計、系統(tǒng)級驗證結合在一起;系統(tǒng)測試激勵Testbench可用C/C++語言,和建模語言SystemC使用相同的高級程序設計語言,不但抽象程度高,而且Testbench生成效率高,能達到較高的覆蓋率,充分驗證系統(tǒng)功能;調(diào)試方面,C++調(diào)試器支持運行時單步執(zhí)行、查看各信號變量值等,方便定位系統(tǒng)設計錯誤。
為了驗證本文設計的MIPS系統(tǒng)級周期精確模型的正確性,即5大功能部件和控制邏輯設計正確,能正確執(zhí)行每一條指令,需要在處理器模型上運行測試程序。
測試程序描述:冒泡排序算法,對100個數(shù)進行升序排序,初始化數(shù)組元素依次為100、99、98…3、2、1,輸出應是1到100的升序排序,為了清晰本測試程序僅打印輸出前20個數(shù)。此排序是冒泡排序的最壞情況,算法復雜度為O(n2)。測試程序用C語言描述,用Cygwin環(huán)境下MIPS-GCC交叉編譯器編譯生成機器代碼。
測試機器配置:

運行結果如圖3所示,測試程序順序輸出1到20的排序結果,印證了所建的處理器模型能正確工作,程序就像跑在一臺真實的計算機上一樣。另外可以知道處理器模型模擬了251 095個時鐘周期,執(zhí)行了83 699條指令,模擬器模擬總共耗時8.166s,仿真速度30 748個時鐘周期每秒,指令執(zhí)行速度10249條指令每秒。
使用高級程序設計語言SystemC編寫的處理器系統(tǒng)級模型最大的好處在于能用于處理器架構的探索以及系統(tǒng)的性能瓶頸分析。SystemC將硬件描述特征與C++面向?qū)ο筇攸c結合在一起,使這樣系統(tǒng)級的模型有較好的參數(shù)可配置性和可擴展性。在處理器架構探索方面,可配置處理器有幾級高速緩存,每級Cache的容量、Cache組織方式以及Cache替換策略等[8,9];處理器采用多少核心,2核、4核還是8核,處理器采用同構多核還是異構多核[10]。在系統(tǒng)性能瓶頸方面,著重關注總線的設計,如采用什么總線協(xié)議,使用AMBA AHB或更快的AXI,采用多大總線頻率,多寬的總線,什么樣的總線仲裁協(xié)議等[11,12]。這些都是處理器架構設計空間需要考慮的問題,不同的構架方案都可方便對系統(tǒng)級模型進行參數(shù)的配置或少量修改完成,通過系統(tǒng)級仿真、量化分析的設計方法,幫我們找到系統(tǒng)性能瓶頸,指導我們找到滿足系統(tǒng)設計需求的最優(yōu)系統(tǒng)架構。

圖3 處理器模型執(zhí)行冒泡排序仿真結果
本文以所設計的MIPS系統(tǒng)級模型為基礎,分析高速緩存Cache的設計對系統(tǒng)構架及性能的影響。我們知道,Cache的引入,減少了訪存延遲,降低了 “存儲墻”對系統(tǒng)性能的影響,因而Cache的設計對系統(tǒng)性能的影響至關重要。論文建立了帶L1指令Cache和L1數(shù)據(jù)Cache的MIPS處理器模型,下面分析不同數(shù)據(jù)Cache的架構設計對系統(tǒng)性能的影響。
圖4橫坐標為Cache的容量,采用的是對數(shù)坐標,如“8”代表28=256字節(jié),從256B到32KB。縱坐標為Cache命中率,如式 (1)為Cache平均訪問時間的計算式[3],Taccess表示訪存平均延時,Thit表示訪存命中時間,Tpenalty表示訪存缺失時額外需要的時間,Rhit表示命中率;命中率越高,訪問較慢外存概率越小,Taccess平均訪存延時越小,因而系統(tǒng)性能越高,故Cache命中率可用來反映處理器性能。圖中有4條折線,代表不同Cache組織策略,分別表示1路、2路、4路、8路組相聯(lián)Cache,注意1路Cache其實是直接映射Cache。Cache平均訪問時間計算式如下


圖4 Cache路數(shù)、容量與命中率關系
處理器模型采用的測試基準程序為常用的bzip2文件壓縮程序,分別配置模型的Cache容量參數(shù)和組相聯(lián)路數(shù)參數(shù),運行仿真得到不同高速緩存配置下的Cache命中率。
分析圖4曲線的走勢,可知在相同Cache容量下,直接映射的Cache命中率最低,8路組相聯(lián)命中率最高,命中率隨路數(shù)的增多而提高。可以看到,4路組相聯(lián)曲線和8路組相聯(lián)曲線基本重合,2路組相聯(lián)曲線略有下移,而直接映射曲線下移較多。我們需知道并不是相聯(lián)路數(shù)越多越好,路數(shù)越多,主存與Cache同時比較標志位的路數(shù)也越多,比較邏輯越復雜,延時更大,L1命中時間Thit也越大;因而L1級Cache的組相聯(lián)路數(shù)選擇為2路或4路比較合適。
再看在Cache相聯(lián)路數(shù)一定,Cache命中率隨Cache容量增大的變化趨勢。Cache命中率隨Cache容量增加而單調(diào)上升,只不過先上升較快,然后上升較平緩。當Cache容量為512B時,曲線斜率最大,命中率上升最快;但命中率還較低,不足90%。當Cache容量增加到1KB時,曲線上升變得平緩,即使Cache容量進一步增加,命中率提高得較小;而此時Cache命中率已經(jīng)較高,4路Cache的命中率超過了90%。當Cache容量增加到4KB后,2路、4路與8路相聯(lián)Cache曲線基本重合,命中率十分相近,約為93%;增加到16KB時,直接相聯(lián)曲線也基本和其它3條曲線重合;Cache容量為32KB時,命中率最高,約為95%。L1級Cache不應太大,因較大的L1級Cache會增加命中訪問延時Thit,通常L1級Cache不超過32KB。因此,L1級Cache容量設計為4KB到32KB比較合適,本例中命中率在93%~95%之間。
電子設計自動化從底層硬件的描述語言Verilog/VHDL發(fā)展到系統(tǒng)級建模語言SystemC,為系統(tǒng)級架構設計與驗證提升到一個新的高度。本文提出了 “結構框圖-模塊細化-模型映射”的規(guī)范化系統(tǒng)建模方法,有助于從RTL設計轉(zhuǎn)化到系統(tǒng)模型的設計,并建立了MIPS處理器周期精確的系統(tǒng)級模型。然后基于建立的處理器模型,展示了將系統(tǒng)模型用于系統(tǒng)構架的設計上,通過對Cache的仿真分析,得出了L1級Cache宜采用2路或4路組相聯(lián)組織結構、Cache的容量在4KB到32KB之間的結論。用SystemC對系統(tǒng)進行建模逐漸成為數(shù)字系統(tǒng)設計新的方向標,可以在設計早期對系統(tǒng)架構及性能進行定量評估,保證系統(tǒng)設計的成功。
[1]IEEE Std 1666TM-2011,IEEE Standard for Standard SystemC Language Reference Manual[S].2011.
[2]MA Qinsheng,LIU Yuan,ZHANG Ning,et al.Modeling of transaction level for SoC [J].China Integrated Circuit,2012,19 (Z1):42-46 (in Chinese). [馬秦生,劉源,張寧,等.SoC事務級建模方法 [J].中國集成電路,2012,19 (Z1):42-46.]
[3]John L Hennessy,David A Patterson.Computer architecture:A quantitative approach [M].5th ed.Beijing:China Machine Press,2012:72-104.
[4]John L Hennessy,David A Patterson.Computer organization and design:The hardware/software interface [M].4th ed.Beijing:China Machine Press,2012:196-228.
[5]HE Weiqiang,YANG Liang,LU Qiang.Cycle-accurate DSP processor modeling with SystemC [J]. Microelectronics &Computer,2013,30 (4):3-7 (in Chinese). [何衛(wèi)強,楊靚,盧強.基于SystemC的周期精確級DSP處理器建模 [J].微電子學與計算機,2013,30 (4):3-7.]
[6]LI Yuan.The system level application design and verification of turbo codec using the SystemC [D].Shanghai:Shanghai Jiao Tong University,2009:42-64 (in Chinese). [李源.基于SystemC系統(tǒng)設計的Turbo編解碼器 [D].上海:上海交通大學,2009:42-64.]
[7]WANG Peng.The research on modeling of dynamic and reconfigurable SoC system [D].Chengdu:University of Electronic Science and Technology of China,2008:45-76 (in Chinese).[王鵬.基于SystemC的動態(tài)可重構SoC系統(tǒng)級建模框架研究[D].成都:電子科技大學,2008:45-76.]
[8]Marisha Rawlins,Ann Gordon-Ross.A cache tuning heuristic for multicore architectures [J].IEEE Transactions On Computers,2013,62 (8):3-5.
[9]Jinho Suh,Murali Annavaram,Michel Dubois.MACAU:A Markov model for reliability evaluations of caches under singlebit and multi-bit upsets [C]//IEEE International Symposium on High Performance Computer Architecture,2012:237-243.
[10]Xi E Chen,Tor M Aamodt.Modeling cache contention and throughput of multiprogrammed manycore processors [J].IEEE Transactions on Computers,2012,61 (7):3-7.
[11]Hansu Cho,Lochi Yu,Samar Abdi.Automatic generation of transducer models for bus-based MPSoC design [J].IEEE Transactions on Computers,2013,62 (2):5-8.
[12]WANG Yang.The joint architecture design of SoC SW/HW co-verification platform [D].Shanghai:Shanghai Jiao Tong University,2013:34-65 (in Chinese). [汪洋.SoC軟硬件協(xié)同驗證平臺的聯(lián)合架構設計 [D].上海:上海交通大學,2013:34-65.]