• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于SystemC的MIPS處理器建模與架構(gòu)

      2015-05-04 08:07:02彭德生蔣志翔
      關(guān)鍵詞:命中率寄存器部件

      彭德生,蔣志翔

      (中國(guó)航天科工集團(tuán)第二研究院706所,北京100854)

      0 引 言

      2011年,IEEE發(fā)布了SystemC最新的1666-2011標(biāo)準(zhǔn)[1],開(kāi)啟以系統(tǒng)建模的方法進(jìn)行系統(tǒng)架構(gòu)設(shè)計(jì)和分析的新世代。各大EDA廠(chǎng)商均推出了自己系統(tǒng)建模的平臺(tái),如Synopsys的 Platform Architect,Mentor Graphics的 Vista Architect,系統(tǒng)建模成為芯片設(shè)計(jì)的熱點(diǎn)。

      以往用Verilog設(shè)計(jì)數(shù)字電路的工程師從硬件描述的思維設(shè)計(jì)電路,他們往往沒(méi)有C++面向?qū)ο蟮木幊探?jīng)驗(yàn),難以用SystemC進(jìn)行系統(tǒng)級(jí)模型的設(shè)計(jì)。為規(guī)范化系統(tǒng)建模過(guò)程、提高建模效率,本文前部分提出并實(shí)踐了基于SystemC建立MIPS構(gòu)架處理器的周期精準(zhǔn)模型的方法,以自頂向下的方式規(guī)范化建模過(guò)程,采用 “結(jié)構(gòu)框圖-模塊細(xì)化-模型映射”3步走,并介紹使用 “宏映射”的技術(shù),保持Verilog語(yǔ)言的一些基本特征,讓硬件工程師能輕松轉(zhuǎn)移到SystemC系統(tǒng)級(jí)模型設(shè)計(jì)上。SystemC從高抽象層次的系統(tǒng)級(jí)描述系統(tǒng),便于進(jìn)行系統(tǒng)架構(gòu)設(shè)計(jì)空間的探索和驗(yàn)證。為探索用系統(tǒng)級(jí)模型進(jìn)行系統(tǒng)架構(gòu)設(shè)計(jì)的方法,本文后部分以高速緩存Cache的設(shè)計(jì)為例,基于系統(tǒng)級(jí)仿真定量分析Cache的命中率與Cache相聯(lián)路數(shù)、容量的關(guān)系,找出最優(yōu)的Cache架構(gòu)設(shè)計(jì)。通過(guò)系統(tǒng)建模的方法,將系統(tǒng)級(jí)模型加上激勵(lì)測(cè)試程序進(jìn)行系統(tǒng)仿真,可提取出緩存命中率、總線(xiàn)訪(fǎng)問(wèn)延遲、性能指標(biāo)CPI(cycle per instruction)等剖面數(shù)據(jù),可評(píng)估當(dāng)前處理器構(gòu)架的性能,發(fā)現(xiàn)系統(tǒng)的性能瓶頸,尋求滿(mǎn)足性能需求及設(shè)計(jì)約束最優(yōu)化的架構(gòu)方案。由于系統(tǒng)級(jí)建模的優(yōu)越性,系統(tǒng)建模的方法將成為系統(tǒng)架構(gòu)設(shè)計(jì)和分析的主要途徑。

      1 SystemC建模語(yǔ)言

      1.1 SystemC

      SystemC是由一組C++類(lèi)庫(kù)所組成的硬件建模平臺(tái),也是一種新型設(shè)計(jì)方法,結(jié)合了硬件建模機(jī)制原理和面向?qū)ο缶幊虄煞矫娴膬?yōu)點(diǎn),可在寄存器傳輸級(jí)、事務(wù)級(jí)、系統(tǒng)級(jí)不同抽象層次進(jìn)行硬件建模。SystemC基本單元是模塊 (module),模塊內(nèi)可包含子模塊、端口和過(guò)程,模塊之間通過(guò)端口和信號(hào)進(jìn)行連接和通訊,利用SystemC的這些基本機(jī)制可方便建立CA (cycle accurate)時(shí)鐘周期精確的模型。SystemC重要概念有模塊、進(jìn)程、接口、端口以及通道[1]。

      進(jìn)程 (process)是程序在并發(fā)環(huán)境中的執(zhí)行過(guò)程,SystemC的基本進(jìn)程包括:SC_M(jìn)ETHOD,SC_THREAD,SC_CTHREAD。

      SC_M(jìn)ETHOD:當(dāng)敏感列表上有事件發(fā)生時(shí),才被調(diào)用,調(diào)用后迅速返回,用法很像Verilog中描述的組合邏輯;

      SC_THREAD:能夠被掛起和重新激活,當(dāng)敏感表上有事件發(fā)生,線(xiàn)程被重新激活運(yùn)行到新的wait()語(yǔ)句再重新掛起,主要用于對(duì)程序的驗(yàn)證;

      SC_CTHREAD:繼承于線(xiàn)程進(jìn)程,只能在時(shí)鐘的上升沿或者下降沿被觸發(fā)或者激活,用于時(shí)鐘精確的建模。

      模塊間通道通信如圖1所示。

      圖1 模塊間通道通信

      接口 (interface),提供一組固定的通信方法,是C++抽象類(lèi),它以純虛數(shù)的方式定義了一組抽象的方法。通道 (channel),實(shí)現(xiàn)一個(gè)或者多個(gè)接口,接口中定義的虛函數(shù)必須在通道中實(shí)現(xiàn),它是一個(gè)實(shí)現(xiàn)通信功能的 “模塊”,只不過(guò)它僅完成通信功能。端口 (port),定義在模塊中,模塊通過(guò)端口與通道連接,通過(guò)端口,模塊中的進(jìn)程就能夠連接到一定的接口,與其它模塊通信。

      1.2 TLM建模

      TLM (transaction level modeling)2.0的 引 入,是 在事務(wù)層[1,2]對(duì)硬件建模,以獲取更高的仿真速度,允許設(shè)計(jì)人員對(duì)系統(tǒng)架構(gòu)及性能的分析、對(duì)固件驅(qū)動(dòng)及應(yīng)用軟件在RTL (register transfer level)實(shí)現(xiàn)前進(jìn)行開(kāi)發(fā)驗(yàn)證。TLM 2.0是建立在SystemC類(lèi)庫(kù)之上的類(lèi)庫(kù),方便用戶(hù)進(jìn)行事務(wù)級(jí)模型的開(kāi)發(fā)。TLM 2.0主要由TLM-1、互操作層和實(shí)用類(lèi)組成。TLM 2.0的核心是互操作層,主要由一般的負(fù)載模型及基本的總線(xiàn)協(xié)議、發(fā)起者與目標(biāo)套接字、全局時(shí)間量和核心接口組成。而核心的接口又由阻塞傳輸接口、非阻塞的傳輸接口、直接存儲(chǔ)訪(fǎng)問(wèn)接口、傳輸調(diào)試接口組成[1]。

      TLM 2.0主要有兩種模型風(fēng)格:寬松時(shí)序LT (loosely-timed)和近似時(shí)序 AT (approximately-timed),以便用在不同場(chǎng)合。一般LT用在軟件開(kāi)發(fā)調(diào)試上,AT用在硬件架構(gòu)性能分析上。寬松時(shí)序LT有較快的執(zhí)行速度。一個(gè)事務(wù)有兩個(gè)時(shí)間點(diǎn),請(qǐng)求的開(kāi)始時(shí)間點(diǎn)與響應(yīng)的開(kāi)始時(shí)間點(diǎn)。LT允許進(jìn)程跑在仿真時(shí)間前以獲得較快仿真速度。近似時(shí)序AT的事務(wù)有多個(gè)階段,一般在請(qǐng)求響應(yīng)的開(kāi)始、結(jié)束都有時(shí)間點(diǎn),并按照SystemC調(diào)度器嚴(yán)格按時(shí)間執(zhí)行。

      1.3 Verilog與SystemC

      不難發(fā)現(xiàn)SystemC和Verilog在硬件描述方面語(yǔ)言特征很像,開(kāi)發(fā)SystemC標(biāo)準(zhǔn)的工程師,正是借用Verilog的硬件描述方法和概念,將RTL級(jí)的描述語(yǔ)言升級(jí)為系統(tǒng)級(jí)的建模語(yǔ)言。Verilog采用層次化、模塊化的設(shè)計(jì)方法,將一個(gè)復(fù)雜的設(shè)計(jì)劃分成幾個(gè)頂層模塊,這些頂層模塊又可細(xì)化為子模塊,子模塊又可細(xì)化為更小的模塊,而模塊之間的連接、通信是通過(guò)input、output或inout信號(hào)實(shí)現(xiàn)的。這樣,一個(gè)復(fù)雜的硬件設(shè)計(jì)就劃分為以模塊為基本單元的層次化的樹(shù)狀結(jié)構(gòu),然后用分而治之的方法逐個(gè)設(shè)計(jì)每個(gè)模塊,使設(shè)計(jì)變得條理化而更容易。模塊內(nèi)部定義了內(nèi)部使用信號(hào),有assign為代表的連續(xù)賦值語(yǔ)句和always塊為代表的過(guò)程賦值語(yǔ)句。assign語(yǔ)句描述組合邏輯,輸出隨時(shí)隨輸入變化而變化,沒(méi)有時(shí)鐘周期的概念,只有輸入到輸出的最大延遲路徑?jīng)Q定輸出何時(shí)有效。電平敏感的always塊主要用來(lái)描述復(fù)雜的組合邏輯,也可能描述含鎖存器的電路。時(shí)鐘邊沿敏感的always塊用來(lái)描述時(shí)序電路,通常在always塊被賦值的信號(hào)都是reg寄存器,寄存器能存儲(chǔ)信息,僅在時(shí)鐘邊沿改變值,做到信號(hào)的同步。模塊就是通過(guò)其中的控制邏輯,將輸入信號(hào)和內(nèi)部信號(hào)加工處理,驅(qū)動(dòng)輸出信號(hào);模塊的輸出僅取決于輸入和內(nèi)部的控制邏輯,而且一個(gè)輸入信號(hào)只能有一個(gè)驅(qū)動(dòng)模塊,使模塊間的耦合度降低,模塊間的關(guān)聯(lián)和通信僅靠輸入輸出端口;模塊化的設(shè)計(jì)方法便于設(shè)計(jì)實(shí)現(xiàn)和調(diào)試驗(yàn)證。

      Verilog語(yǔ)言的主要概念有模塊module、輸入信號(hào)input、輸出信號(hào)output、連續(xù)賦值語(yǔ)句assign(描述組合邏輯)、過(guò)程賦值語(yǔ)句always塊 (主要描述時(shí)序邏輯)、時(shí)鐘沿等,SystemC建模語(yǔ)言主要概念有模塊sc_module、進(jìn)程sc_process、端口sc_port、接口sc_interface、通道sc_channel,它們的對(duì)應(yīng)關(guān)系見(jiàn)表1。

      表1 Verilog與SystemC對(duì)比關(guān)系

      2 SystemC模型建立

      2.1 MIPS處理器結(jié)構(gòu)

      精簡(jiǎn)指令集計(jì)算機(jī) RISC (reduced instruction set com-puter)的代表MIPS指令架構(gòu)采用32位固定的指令長(zhǎng)度、簡(jiǎn)明的指令結(jié)構(gòu),便于譯碼;擁有32個(gè)通用寄存器;僅Load/Store指令可訪(fǎng)存,訪(fǎng)存尋址方法少:這些特點(diǎn)使MIPS處理器便于采用流水線(xiàn)等技術(shù)增強(qiáng)CPU性能。

      經(jīng)典MIPS處理器的執(zhí)行過(guò)程分為取指IF(instruction fetch)、譯碼ID (instruction decode)、執(zhí)行 EX (execute)、訪(fǎng)存 MEM (memory access)、寫(xiě)回 WB (write back)這5個(gè)階段[3,4],用控制器產(chǎn)生的控制信號(hào)控制處理器的執(zhí)行。根據(jù)處理器的執(zhí)行流,MIPS處理器可劃分為取指部件、譯碼部件、執(zhí)行部件、訪(fǎng)存部件和數(shù)據(jù)寫(xiě)回通路這5大功能部件;根據(jù)處理器的控制流,MIPS處理器包含控制各功能部件協(xié)同工作的控制器;根據(jù)處理器數(shù)據(jù)流的傳遞,MIPS處理器包含通用寄存器文件、L1指令Cache、L1數(shù)據(jù)Cache以及可選的L2共享Cache等數(shù)據(jù)存儲(chǔ)部件。

      (1)取指階段:CPU在一條指令執(zhí)行的第一階段是根據(jù)當(dāng)前程序計(jì)數(shù)器PC值從存儲(chǔ)器中獲得當(dāng)前要執(zhí)行的指令,對(duì)于MIPS結(jié)構(gòu)的指令而言,這是一個(gè)固定的32比特?cái)?shù)據(jù)。當(dāng)L1指令Cache命中時(shí),可快速取得指令存入指令寄存器IR內(nèi);當(dāng)L1指令Cache缺失時(shí),需要訪(fǎng)問(wèn)下一級(jí)高速緩存,最會(huì)的情況是到片外的主存儲(chǔ)器中取指令,當(dāng)然這會(huì)帶來(lái)很大的處理器延遲。

      (2)譯碼階段:現(xiàn)在我們已將指令取來(lái)放在IR (instruction register)寄存器中了,在譯碼階段就是根據(jù)IR產(chǎn)生各功能部件的控制信號(hào)和數(shù)據(jù)輸入信號(hào)。MIPS指令分為算術(shù)邏輯指令、訪(fǎng)存指令、程序轉(zhuǎn)移指令、數(shù)據(jù)傳輸指令和處理器控制指令等類(lèi)別。指令譯碼就是按照MIPS指令編碼格式識(shí)別當(dāng)前指令是何種類(lèi)型指令、需用到什么功能部件,以產(chǎn)生該功能部件需要的控制信號(hào)和數(shù)據(jù)信號(hào)。譯碼階段還需要完成的是源寄存器的讀取,根據(jù)指令編碼中源寄存器Rs、Rt的寄存器號(hào),從寄存器文件中讀取源寄存器的值,以用于指令執(zhí)行的下一階段。

      (3)執(zhí)行階段:執(zhí)行部件主要包含算術(shù)邏輯單元ALU(arithmetic logic unit)和 浮 點(diǎn) 運(yùn) 算 單 元 FPU (float point unit)這些功能部件。算術(shù)邏輯單元ALU主要包括定點(diǎn)加法器、邏輯運(yùn)算、移位運(yùn)算、定點(diǎn)乘法器、定點(diǎn)除法器;浮點(diǎn)運(yùn)算單元FPU主要包括浮點(diǎn)加法器、浮點(diǎn)乘法器和浮點(diǎn)除法器。經(jīng)過(guò)譯碼,我們知道了當(dāng)前指令的類(lèi)型以及將占用的功能部件,然后使用譯碼階段讀取的源操作數(shù)進(jìn)行計(jì)算。以整數(shù)加法 “A+B”指令為例,指令譯碼產(chǎn)生的控制信號(hào)將選擇ALU的加法單元,使用譯碼階段讀取的寄存器值A(chǔ)、B為加法器的輸入,經(jīng)過(guò)通常是1個(gè)時(shí)鐘周期的延遲,加法器的輸出端產(chǎn)生有效的輸出C,以供下一階段使用。

      (4)訪(fǎng)存階段:訪(fǎng)存階段不是所有指令都需要經(jīng)歷的指令執(zhí)行階段,僅訪(fǎng)存Load/Store型指令才需要。訪(fǎng)存與取指有些相同,都是對(duì)主存儲(chǔ)器的訪(fǎng)問(wèn),訪(fǎng)存特指對(duì)數(shù)據(jù)的訪(fǎng)問(wèn),可讀可寫(xiě),先要訪(fǎng)問(wèn)L1數(shù)據(jù)Cache;取指是指對(duì)程序指令的訪(fǎng)問(wèn),只可讀,先訪(fǎng)問(wèn)L1指令Cache。訪(fǎng)存先要計(jì)算數(shù)據(jù)的地址,需要用到上一階段的ALU計(jì)算出訪(fǎng)存地址A,然后在此階段先訪(fǎng)問(wèn)L1數(shù)據(jù)Cache,若命中就可快速返回,否則需要訪(fǎng)問(wèn)下一級(jí)存儲(chǔ)層次,這將帶來(lái)更大的方寸延遲。

      (5)寫(xiě)回階段:寄存器寫(xiě)回階段也不是所有指令都需要經(jīng)歷的指令執(zhí)行階段,僅需要更新寄存器值的指令才需要,如大多數(shù)算術(shù)邏輯指令和Load型訪(fǎng)存指令。寫(xiě)回階段唯一需要做的是將ALU的輸出或訪(fǎng)存部件的輸出鏈接到寄存器文件的輸入端,更新寄存器的值,它其實(shí)起到數(shù)據(jù)通路的作用。

      2.2 SystemC模型映射

      針對(duì)周期精確及端口信號(hào)級(jí)精確的SystemC模型設(shè)計(jì)[5-7],本文提出模塊化的 “結(jié)構(gòu)框圖-模塊細(xì)化-模型映射”的規(guī)范化SystemC模型映設(shè)計(jì)方法。

      2.2.1 結(jié)構(gòu)框架

      SystemC建模的第一步是根據(jù)目標(biāo)系統(tǒng)的功能特征,將系統(tǒng)劃分為獨(dú)立的功能子系統(tǒng),以結(jié)構(gòu)框圖的形式表示出來(lái),各功能子系統(tǒng)的聯(lián)系、數(shù)據(jù)交互可用箭頭和文字標(biāo)注。這樣目標(biāo)系統(tǒng)的結(jié)構(gòu)框圖被建立好,從這樣的系統(tǒng)頂層框圖可清楚看到系統(tǒng)可分為幾大部分,以及各部分關(guān)聯(lián),為建模的下一步打好基礎(chǔ)。如圖2經(jīng)典5周期MIPS處理器的結(jié)構(gòu)框架。

      圖2 經(jīng)典MIPS處理器結(jié)構(gòu)框架

      2.2.2 模塊細(xì)化

      建模的第二步是模塊細(xì)化,就是將頂層的功能子系統(tǒng)進(jìn)一步模塊化、功能細(xì)化。這一階段要精確到模塊module,找出系統(tǒng)的主要模塊,并且要明確各模塊的主要接口信號(hào)(input、output、inout),這時(shí)模塊內(nèi)的邏輯實(shí)現(xiàn)可先不考慮。

      具體而言,IF取指功能部件,需要的輸入信號(hào)有時(shí)鐘輸入Clk、指令的地址PC (program counter)、取指請(qǐng)求信號(hào)Inst_Req等,主要的輸出有取指應(yīng)答Inst_Ack、取到的指令I(lǐng)nst。取指部件包含L1指令Cache子模塊,主要的輸入是指令地址PC,輸出為所取的指令I(lǐng)nst。取指功能部件可描述為:IF {Clk_I,PC_I,Inst_Req_I,Inst_Ack_O、Inst_O}。

      ID譯碼功能部件,輸入剛?cè)〉闹噶領(lǐng)nst,輸出有ALU操作碼ALU_Op、操作數(shù)ALU_DataA和ALU_DataB以及訪(fǎng)存請(qǐng)求Mem_Req、訪(fǎng)存地址基地址 Mem_Addr-Base、訪(fǎng)存寫(xiě)數(shù)據(jù)Mem_DataWr等。經(jīng)過(guò)仔細(xì)分析,譯碼部件要讀取源操作數(shù),因而包含寄存器讀取子模塊Regfile;輸入是指令譯碼的RsIdx、RtIdx源寄存器索引號(hào),輸出是第一源操作數(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ù)處理器所實(shí)現(xiàn)的運(yùn)算功能,執(zhí)行功能部件包括定點(diǎn)加法器Adder、邏輯運(yùn)算Logic、移位運(yùn)算Shifter、比較器Comparator、定點(diǎn)乘法器 Multiplier、定點(diǎn)除法器Divider等基本運(yùn)算單元。這些運(yùn)算單元的輸入均是ID譯碼部件產(chǎn)生的ALU輸入源數(shù)據(jù)ALU_DataA和ALU_DataB,而由操作碼ALU_Op譯碼產(chǎn)生對(duì)不同子功能運(yùn)算單元的選擇信號(hào),因一條指令僅使用一個(gè)運(yùn)算單元,這樣的選擇信號(hào)可避免其它運(yùn)算單元的工作,從而有利于低功耗的實(shí)現(xiàn)。這些運(yùn)算單元主要的輸出是各自的運(yùn)算結(jié)果,通過(guò)前面的運(yùn)算單元選擇信號(hào)可選擇當(dāng)前有效的運(yùn)算結(jié)果作為整個(gè)ALU的輸出ALU_Out;而有些運(yùn)算單元有自己特殊的輸出信號(hào),如加法器有溢出C輸出標(biāo)志、符號(hào)S輸出標(biāo)志,比較器有零Z輸出標(biāo)志、比較結(jié)果LT標(biāo)志,除法器有除數(shù)為零異常標(biāo)志信號(hào)等。執(zhí)行功能部件可描述為:EX {Clk_I,ALU _Op_I,ALU _DataA_I,ALU _DataB_I,ALU_Out,C,S,Z,LT}。

      MEM訪(fǎng)存功能部件,僅供Load/Store型指令訪(fǎng)問(wèn)程序所使用數(shù)據(jù)。輸入為ID部件產(chǎn)生的訪(fǎng)存請(qǐng)求信號(hào)Mem_Req、讀寫(xiě)控制信號(hào) Mem_RW、訪(fǎng)存寫(xiě)數(shù)據(jù) Mem_DataWr,以及EX執(zhí)行部件計(jì)算出的訪(fǎng)存地址Mem_Addr。當(dāng)是Store型指令時(shí),將Mem_DataWr數(shù)據(jù)寫(xiě)入內(nèi)存后指令執(zhí)行完畢;當(dāng)為L(zhǎng)oad型指令時(shí),訪(fǎng)問(wèn)存儲(chǔ)器取得數(shù)據(jù)Mem_DataRd,然后還要經(jīng)寫(xiě)回階段存入寄存器。MEM訪(fǎng)存部件產(chǎn)生訪(fǎng)存控制信號(hào),主要包括L1級(jí)數(shù)據(jù)Cache子模塊。訪(fǎng)存功能部件可描述為 MEM {Clk_I,Mem_Req_I,Mem_RW_I,Mem_Addr_I,Mem_DataWr_I,Mem_DataRd_O}。

      WB寫(xiě)回功能部件,主要作用是完成通用寄存器的更新。輸入有算術(shù)邏輯指令使用EX功能部件產(chǎn)生的計(jì)算結(jié)果ALU_Out、Load型指令使用MEM功能部件取回的數(shù)據(jù)Mem_DataRd,以此選擇寄存器文件寫(xiě)數(shù)據(jù)輸入Reg_DataWr;另外有寄存器寫(xiě)控制信號(hào)Reg_WriteEN。寫(xiě)回功能部件可描述為 WB {Clk_I,Reg_DataWr_I,Reg_WriteEN}。

      數(shù)字系統(tǒng)包含數(shù)據(jù)通路和控制邏輯兩大部分,數(shù)據(jù)通路就是上面描述的5大功能部件;而為使各種指令在處理器上經(jīng)不同執(zhí)行路徑有條不紊的執(zhí)行,一個(gè)控制指令全局執(zhí)行的狀態(tài)機(jī)FSM是必需的。FSM狀態(tài)有S_IDLE、S_IF、S_ID、S_EX、S_M(jìn)EM、S_WB,輸入為指令類(lèi)型Inst_Type、取指完成信號(hào)Inst_Ack、訪(fǎng)存完成信號(hào)Mem_Ack,輸出為各階段的執(zhí)行控制信號(hào)和當(dāng)前狀態(tài),狀態(tài)機(jī)可描述為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)過(guò)用畫(huà)結(jié)構(gòu)框圖方法進(jìn)行系統(tǒng)頂層描述,再進(jìn)行模塊的細(xì)化后,最后進(jìn)行系統(tǒng)到SystemC模型的映射。模型映射用SystemC語(yǔ)言實(shí)現(xiàn)各個(gè)模塊module的內(nèi)部邏輯,將頂層結(jié)構(gòu)框圖描述的系統(tǒng)映射為SystemC的模型系統(tǒng)。當(dāng)有Verilog的RTL模型時(shí),可更容易將RTL模型映射為SystemC模型,因SystemC標(biāo)準(zhǔn)參考了Verilog關(guān)于模塊、接口等概念。

      本文所建立的MIPS處理器模型,主要就是用SystemC提供的接口實(shí)現(xiàn)5大功能部件和控制狀態(tài)機(jī)。下面以IF取指部件為例,介紹SystemC的實(shí)現(xiàn)。

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

      SystemC的線(xiàn)程一般是個(gè)死循環(huán),在運(yùn)行了指定時(shí)鐘周期數(shù)后,由SystemC調(diào)度器回收結(jié)束各線(xiàn)程。周期精確主要靠wait()函數(shù)同步各個(gè)SystemC線(xiàn)程在每個(gè)時(shí)鐘周期執(zhí)行一次,當(dāng)線(xiàn)程被調(diào)度器調(diào)度執(zhí)行,線(xiàn)程從wait()的下一條語(yǔ)句開(kāi)始執(zhí)行直到遇到wait()語(yǔ)句結(jié)束本次執(zhí)行。在本IF取指部件的實(shí)現(xiàn)中,先對(duì)取指請(qǐng)求信號(hào)Inst_Req_I進(jìn)行采樣,若有效則繼續(xù)執(zhí)行,否則等待下一時(shí)鐘周期再采樣該信號(hào)。取指需先用程序計(jì)數(shù)器PC值計(jì)算下一條指令的地址,訪(fǎng)問(wèn)指令存儲(chǔ)器imem并通過(guò)Inst_O輸出端口輸出所取得的指令,然后PC加4指向下一條順序指令地址,置Inst_Ack_O信號(hào)有效,通知其它模塊輸出指令有效。

      為了保持SystemC建模風(fēng)格和Verilog硬件描述風(fēng)格一致,讓從已有的RTL模型映射到SystemC的系統(tǒng)級(jí)模型更容易,本文提出運(yùn)用C++語(yǔ)言提供的宏,使用 “宏映射”技術(shù):

      對(duì)連續(xù)賦值語(yǔ)句的assign關(guān)鍵字,在SystemC中可定義空宏 “#define assign”,則可編譯通過(guò);

      定義wire或reg型變量,可先定義以下宏:“#define wire(m,n) unsigned int”,則聲明20位的信號(hào)可表示為:“wire(19,0) signal;”,與Verilog十分相似;

      對(duì)于位選擇,如signal[15:8],SystemC中可定義宏:“#define BITS (name,m,n)(((unsigned int)name<< (31-m))>> (32- (m-n+1)))”,可如 BITS (signal,15,8)使用。

      3 仿真與架構(gòu)探索

      3.1 系統(tǒng)仿真

      當(dāng)系統(tǒng)的模型建立后,需要驗(yàn)證模型的正確性[7]。Verilog描述的RTL模型驗(yàn)證困難、可調(diào)式性差,驗(yàn)證需要用Verilog等語(yǔ)言寫(xiě)測(cè)試激勵(lì),測(cè)試激勵(lì)生成效率低下而且不能充分測(cè)試系統(tǒng)的功能與性能;主要通過(guò)查看信號(hào)波形圖分析系統(tǒng)的問(wèn)題,不能進(jìn)行運(yùn)行時(shí)單步調(diào)試,不直觀(guān),也不容易定位系統(tǒng)的問(wèn)題。而用SystemC描述的系統(tǒng)級(jí)模型,借助C++集成開(kāi)發(fā)調(diào)試環(huán)境,將系統(tǒng)架構(gòu)設(shè)計(jì)、系統(tǒng)級(jí)驗(yàn)證結(jié)合在一起;系統(tǒng)測(cè)試激勵(lì)Testbench可用C/C++語(yǔ)言,和建模語(yǔ)言SystemC使用相同的高級(jí)程序設(shè)計(jì)語(yǔ)言,不但抽象程度高,而且Testbench生成效率高,能達(dá)到較高的覆蓋率,充分驗(yàn)證系統(tǒng)功能;調(diào)試方面,C++調(diào)試器支持運(yùn)行時(shí)單步執(zhí)行、查看各信號(hào)變量值等,方便定位系統(tǒng)設(shè)計(jì)錯(cuò)誤。

      為了驗(yàn)證本文設(shè)計(jì)的MIPS系統(tǒng)級(jí)周期精確模型的正確性,即5大功能部件和控制邏輯設(shè)計(jì)正確,能正確執(zhí)行每一條指令,需要在處理器模型上運(yùn)行測(cè)試程序。

      測(cè)試程序描述:冒泡排序算法,對(duì)100個(gè)數(shù)進(jìn)行升序排序,初始化數(shù)組元素依次為100、99、98…3、2、1,輸出應(yīng)是1到100的升序排序,為了清晰本測(cè)試程序僅打印輸出前20個(gè)數(shù)。此排序是冒泡排序的最壞情況,算法復(fù)雜度為O(n2)。測(cè)試程序用C語(yǔ)言描述,用Cygwin環(huán)境下MIPS-GCC交叉編譯器編譯生成機(jī)器代碼。

      測(cè)試機(jī)器配置:

      運(yùn)行結(jié)果如圖3所示,測(cè)試程序順序輸出1到20的排序結(jié)果,印證了所建的處理器模型能正確工作,程序就像跑在一臺(tái)真實(shí)的計(jì)算機(jī)上一樣。另外可以知道處理器模型模擬了251 095個(gè)時(shí)鐘周期,執(zhí)行了83 699條指令,模擬器模擬總共耗時(shí)8.166s,仿真速度30 748個(gè)時(shí)鐘周期每秒,指令執(zhí)行速度10249條指令每秒。

      3.2 構(gòu)架探索

      使用高級(jí)程序設(shè)計(jì)語(yǔ)言SystemC編寫(xiě)的處理器系統(tǒng)級(jí)模型最大的好處在于能用于處理器架構(gòu)的探索以及系統(tǒng)的性能瓶頸分析。SystemC將硬件描述特征與C++面向?qū)ο筇攸c(diǎn)結(jié)合在一起,使這樣系統(tǒng)級(jí)的模型有較好的參數(shù)可配置性和可擴(kuò)展性。在處理器架構(gòu)探索方面,可配置處理器有幾級(jí)高速緩存,每級(jí)Cache的容量、Cache組織方式以及Cache替換策略等[8,9];處理器采用多少核心,2核、4核還是8核,處理器采用同構(gòu)多核還是異構(gòu)多核[10]。在系統(tǒng)性能瓶頸方面,著重關(guān)注總線(xiàn)的設(shè)計(jì),如采用什么總線(xiàn)協(xié)議,使用AMBA AHB或更快的AXI,采用多大總線(xiàn)頻率,多寬的總線(xiàn),什么樣的總線(xiàn)仲裁協(xié)議等[11,12]。這些都是處理器架構(gòu)設(shè)計(jì)空間需要考慮的問(wèn)題,不同的構(gòu)架方案都可方便對(duì)系統(tǒng)級(jí)模型進(jìn)行參數(shù)的配置或少量修改完成,通過(guò)系統(tǒng)級(jí)仿真、量化分析的設(shè)計(jì)方法,幫我們找到系統(tǒng)性能瓶頸,指導(dǎo)我們找到滿(mǎn)足系統(tǒng)設(shè)計(jì)需求的最優(yōu)系統(tǒng)架構(gòu)。

      圖3 處理器模型執(zhí)行冒泡排序仿真結(jié)果

      本文以所設(shè)計(jì)的MIPS系統(tǒng)級(jí)模型為基礎(chǔ),分析高速緩存Cache的設(shè)計(jì)對(duì)系統(tǒng)構(gòu)架及性能的影響。我們知道,Cache的引入,減少了訪(fǎng)存延遲,降低了 “存儲(chǔ)墻”對(duì)系統(tǒng)性能的影響,因而Cache的設(shè)計(jì)對(duì)系統(tǒng)性能的影響至關(guān)重要。論文建立了帶L1指令Cache和L1數(shù)據(jù)Cache的MIPS處理器模型,下面分析不同數(shù)據(jù)Cache的架構(gòu)設(shè)計(jì)對(duì)系統(tǒng)性能的影響。

      圖4橫坐標(biāo)為Cache的容量,采用的是對(duì)數(shù)坐標(biāo),如“8”代表28=256字節(jié),從256B到32KB??v坐標(biāo)為Cache命中率,如式 (1)為Cache平均訪(fǎng)問(wèn)時(shí)間的計(jì)算式[3],Taccess表示訪(fǎng)存平均延時(shí),Thit表示訪(fǎng)存命中時(shí)間,Tpenalty表示訪(fǎng)存缺失時(shí)額外需要的時(shí)間,Rhit表示命中率;命中率越高,訪(fǎng)問(wèn)較慢外存概率越小,Taccess平均訪(fǎng)存延時(shí)越小,因而系統(tǒng)性能越高,故Cache命中率可用來(lái)反映處理器性能。圖中有4條折線(xiàn),代表不同Cache組織策略,分別表示1路、2路、4路、8路組相聯(lián)Cache,注意1路Cache其實(shí)是直接映射Cache。Cache平均訪(fǎng)問(wèn)時(shí)間計(jì)算式如下

      圖4 Cache路數(shù)、容量與命中率關(guān)系

      處理器模型采用的測(cè)試基準(zhǔn)程序?yàn)槌S玫腷zip2文件壓縮程序,分別配置模型的Cache容量參數(shù)和組相聯(lián)路數(shù)參數(shù),運(yùn)行仿真得到不同高速緩存配置下的Cache命中率。

      分析圖4曲線(xiàn)的走勢(shì),可知在相同Cache容量下,直接映射的Cache命中率最低,8路組相聯(lián)命中率最高,命中率隨路數(shù)的增多而提高??梢钥吹?,4路組相聯(lián)曲線(xiàn)和8路組相聯(lián)曲線(xiàn)基本重合,2路組相聯(lián)曲線(xiàn)略有下移,而直接映射曲線(xiàn)下移較多。我們需知道并不是相聯(lián)路數(shù)越多越好,路數(shù)越多,主存與Cache同時(shí)比較標(biāo)志位的路數(shù)也越多,比較邏輯越復(fù)雜,延時(shí)更大,L1命中時(shí)間Thit也越大;因而L1級(jí)Cache的組相聯(lián)路數(shù)選擇為2路或4路比較合適。

      再看在Cache相聯(lián)路數(shù)一定,Cache命中率隨Cache容量增大的變化趨勢(shì)。Cache命中率隨Cache容量增加而單調(diào)上升,只不過(guò)先上升較快,然后上升較平緩。當(dāng)Cache容量為512B時(shí),曲線(xiàn)斜率最大,命中率上升最快;但命中率還較低,不足90%。當(dāng)Cache容量增加到1KB時(shí),曲線(xiàn)上升變得平緩,即使Cache容量進(jìn)一步增加,命中率提高得較?。欢藭r(shí)Cache命中率已經(jīng)較高,4路Cache的命中率超過(guò)了90%。當(dāng)Cache容量增加到4KB后,2路、4路與8路相聯(lián)Cache曲線(xiàn)基本重合,命中率十分相近,約為93%;增加到16KB時(shí),直接相聯(lián)曲線(xiàn)也基本和其它3條曲線(xiàn)重合;Cache容量為32KB時(shí),命中率最高,約為95%。L1級(jí)Cache不應(yīng)太大,因較大的L1級(jí)Cache會(huì)增加命中訪(fǎng)問(wèn)延時(shí)Thit,通常L1級(jí)Cache不超過(guò)32KB。因此,L1級(jí)Cache容量設(shè)計(jì)為4KB到32KB比較合適,本例中命中率在93%~95%之間。

      4 結(jié)束語(yǔ)

      電子設(shè)計(jì)自動(dòng)化從底層硬件的描述語(yǔ)言Verilog/VHDL發(fā)展到系統(tǒng)級(jí)建模語(yǔ)言SystemC,為系統(tǒng)級(jí)架構(gòu)設(shè)計(jì)與驗(yàn)證提升到一個(gè)新的高度。本文提出了 “結(jié)構(gòu)框圖-模塊細(xì)化-模型映射”的規(guī)范化系統(tǒng)建模方法,有助于從RTL設(shè)計(jì)轉(zhuǎn)化到系統(tǒng)模型的設(shè)計(jì),并建立了MIPS處理器周期精確的系統(tǒng)級(jí)模型。然后基于建立的處理器模型,展示了將系統(tǒng)模型用于系統(tǒng)構(gòu)架的設(shè)計(jì)上,通過(guò)對(duì)Cache的仿真分析,得出了L1級(jí)Cache宜采用2路或4路組相聯(lián)組織結(jié)構(gòu)、Cache的容量在4KB到32KB之間的結(jié)論。用SystemC對(duì)系統(tǒng)進(jìn)行建模逐漸成為數(shù)字系統(tǒng)設(shè)計(jì)新的方向標(biāo),可以在設(shè)計(jì)早期對(duì)系統(tǒng)架構(gòu)及性能進(jìn)行定量評(píng)估,保證系統(tǒng)設(shè)計(jì)的成功。

      [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事務(wù)級(jí)建模方法 [J].中國(guó)集成電路,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)強(qiáng),楊靚,盧強(qiáng).基于SystemC的周期精確級(jí)DSP處理器建模 [J].微電子學(xué)與計(jì)算機(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)設(shè)計(jì)的Turbo編解碼器 [D].上海:上海交通大學(xué),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的動(dòng)態(tài)可重構(gòu)SoC系統(tǒng)級(jí)建??蚣苎芯浚跠].成都:電子科技大學(xué),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é)同驗(yàn)證平臺(tái)的聯(lián)合架構(gòu)設(shè)計(jì) [D].上海:上海交通大學(xué),2013:34-65.]

      猜你喜歡
      命中率寄存器部件
      Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
      夜夜“奮戰(zhàn)”會(huì)提高“命中率”嗎
      2015男籃亞錦賽四強(qiáng)隊(duì)三分球進(jìn)攻特點(diǎn)的比較研究
      基于Siemens NX和Sinumerik的銑頭部件再制造
      部件拆分與對(duì)外漢字部件教學(xué)
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      投籃的力量休斯敦火箭
      NBA特刊(2017年8期)2017-06-05 15:00:13
      水輪機(jī)過(guò)流部件改造與節(jié)能增效
      試析心理因素對(duì)投籃命中率的影響
      高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
      凤翔县| 曲阜市| 宣威市| 兴山县| 唐海县| 唐河县| 迁西县| 香港| 安阳市| 九龙城区| 通州市| 辰溪县| 边坝县| 鄯善县| 金山区| 昌乐县| 定州市| 林口县| 洱源县| 玛沁县| 阿克陶县| 繁昌县| 徐闻县| 长沙市| 汨罗市| 遂平县| 乐昌市| 天门市| 广州市| 鱼台县| 绥江县| 南部县| 监利县| 金华市| 闸北区| 永城市| 玉溪市| 临澧县| 卢湾区| 格尔木市| 阳春市|