【文章內(nèi)容簡介】
理器延遲調(diào)試 處理器的運算速度是衡量處理器好壞的最重要的標(biāo)準(zhǔn),而運算速度和處理器的頻率息息相關(guān),因此,處理器的延遲調(diào)試對處理器的性能有很關(guān)鍵的作用。本文介 紹了通用的幾種 ASIC 延遲調(diào)試方法,具體介紹了在工作中出現(xiàn)的發(fā)射模塊延遲的調(diào)試過程。 3) . 基于 VMM驗證方法學(xué)的對微處理器的驗證 現(xiàn)在隨著集成電路設(shè)計越來越復(fù)雜,微處理器的驗證成為整個處理器的開發(fā)過程中最重要的過程,往往驗證過程占整個開發(fā)設(shè)計的 70%80%。因此加速驗證的過程變得十分必要,而通過不斷的測試,修改原處理器設(shè)計中不合理的地方。本文通過基于 Systemverilog 自動對比平臺的搭建,基于 C 語言的對比模型,完成自動對比,加速驗證的速度。具體分析了在測試過程中遇見的幾個經(jīng)典的 BUG 以及修改方法 ?;诠δ芨采w率的通道劃分,基于嵌入式匯編的定向測試編寫,保證整個微處理器的功能正確性。在完成軟件仿真后,把整個處理器下載到 FPGA 中進(jìn)行硬件驗證和應(yīng)用程序驗證。 本章闡述了課題的研究背景與意義,總結(jié)了微處理器的發(fā)展現(xiàn)狀,分析了微處理器結(jié)構(gòu)的作用,在此基礎(chǔ)上提出了研究課題,并且給出了本課題的主要研究工作和論文的結(jié)構(gòu)安排。 第二章主要介紹 MIPS 處理器的指令集,以及 MIPS 處理器的結(jié)構(gòu)流水線相關(guān)策略以及性能概括。 第三章詳細(xì)描述微處理器中的訪存部件模塊設(shè)計,包括 SRAM 的時序要求 以及應(yīng)用, LSQ隊列以及訪存和內(nèi)存的交互。并且詳細(xì)描述發(fā)射模塊的結(jié)構(gòu)體系設(shè)計,包括 IQ 準(zhǔn)備和維護、指令發(fā)射和數(shù)據(jù)寫回。 第四章詳細(xì)介紹微處理器的延遲調(diào)試幾種方法,具體介紹了發(fā)射模塊調(diào)延遲的過程。 第五章介紹了基于 VMM 驗證方法學(xué)的對微處理器的驗證,搭建基于 systemverilog 語言的驗證自動對比平臺的搭建,對微處理器的 c 語言建模,快速的定位 BUG 位置,對功能覆蓋率通道的劃分,最后通過編寫嵌入式匯編的定向測試激勵達(dá)到功能覆蓋率 100%的設(shè)計目標(biāo)。 西安理工大學(xué)碩士學(xué)位論文 4 2. 64bit MIPS 架構(gòu)處理器體系結(jié)構(gòu) 微處理 器分為 RSIC(精簡指令集處理器)和 CSIC(復(fù)雜指令級處理器)。兩種類型的處理器有著各自不同的優(yōu)缺點。本論文采用的是 MIPS 架構(gòu)的 RSIC 處理器 【 23】 。 RSIC CPU 簡介 IBM 研究中心的 John Cocke 提出 RSIC(精簡指令集計算機)概念。相對于復(fù)雜指令集來說精簡的指令集指令數(shù)少 【 24】 。 RSIC 指令集包含了簡單基本的指令集,通過這些指令,就可以組成復(fù)雜的指令。相比于 CSIC( Complex Instruction Set Computing)微處理器來說 RSIC 微處理器有以下優(yōu)點 【 25】 : 1) .RSIC 微處理器對結(jié)構(gòu)的依賴不大,設(shè)計簡單,結(jié)構(gòu)簡單,驗證相對來說不復(fù)雜 【 25】 。 2).RSIC 指令集指令數(shù)不多,軟件開發(fā)相對簡單 【 25】 。 3).RSIC 編譯器編譯所使用的指令少,因此高級語言能更加有效的編寫 【 25】 。 RISC 微處理器不僅精簡了指令系統(tǒng),采用超標(biāo)量和超流水線結(jié)構(gòu);它們的指令數(shù)目只有幾十條,卻大大增強了并行處理能力。 RSIC 處理器性能特點如下: 一:由于指令集簡化后,減少了指令的數(shù)量,也就是說減少了硬件的消耗; 二:采用大量 的寄存器,不需要通過頻繁的和內(nèi)存和 cache 交互,提高了處理速度; 三:取數(shù)存數(shù)與取指令分開執(zhí)行,使處理器可以完成更多的操作。 指令集 MIPS 指令編碼格式統(tǒng)一,都是 32位單字對齊。不同種類的指令格式有所不同按照類型分為三種: I 類型(立即數(shù)型)、 J類型(跳轉(zhuǎn)類型)和 R 類型(寄存器型)。其指令格式入圖 所示。圖 是立即數(shù)型, 015 位是立即數(shù)。 rs 是原操作數(shù)寄存器。 rt 是目的寄存器。 Opcode 表示這條指令執(zhí)行的是什么樣的操作。圖 是跳轉(zhuǎn)類型 025 位表示的是跳轉(zhuǎn)地址。圖 寄存器型,通過 funct 位和 opcode 位表明執(zhí)行的操作是什么樣的操作。如果是兩操作數(shù)指令,則 sa 沒用, rd 是目標(biāo)寄存器, rt, rs是原操作數(shù)寄存器。如果是三操作數(shù)指令,則 rd, rt, rs是原操作數(shù)寄存器, sa 是目的寄存器。 64bit MIPS架構(gòu)處理器體系結(jié)構(gòu) 5 圖 MIPS 指令集 3 種指令類型 Fig MIPS instruction structure MIPS 的指令種類有 分為 7種如表 所示: MIPS 指令種類 MIPS 指令(部分) 指令的意義 實現(xiàn)與否 訪存類指令 lb, sb, lh, sh, lw, sw, ld, sd, lwc1, swc1, ldc1, sdc1 執(zhí)行從內(nèi)存中取數(shù),或把數(shù)據(jù)存入內(nèi)存中的操作。 實現(xiàn) 定點計算指令 add, sub, mult, and, or, sll, srl, slt, , ... 執(zhí)行定點加減乘除移位前導(dǎo)等運算操作 實現(xiàn) 浮點運算指令 cvt, movf, mul, div,madd, sub... 執(zhí)行 IEEE754 標(biāo)準(zhǔn)的加減乘除浮點運算操作 實現(xiàn) 跳轉(zhuǎn)分支指令 j, jr, jal, beq, bne ... 執(zhí)行跳轉(zhuǎn)操作 實現(xiàn) 協(xié)處理器指令 bc1f、 bc1f bc1t、 bc1t1 執(zhí)行協(xié)處理器CP0, CP1 指令操作 沒實現(xiàn) 斷點及陷阱指令 teq、 teqi、 tge、 tgei、tgeiu、 tgeu、 tlt、 tlti、執(zhí)行系統(tǒng)操作的指令 沒實現(xiàn) 西安理工大學(xué)碩士學(xué)位論文 6 tltiu、 tltu、 tne、 tnei。 表 MIPS 指令集的種類 Tab MIPS instruction type ( pipeline)設(shè)計思想 對通用設(shè)計來講, pipeline 是提高系統(tǒng)工作頻率的常見方法。它適合 于大量數(shù)據(jù)處理的場合。指令流水線技術(shù)是多條指令重疊執(zhí)行的一個處理器實現(xiàn)技術(shù),流水線的基本結(jié)構(gòu)是將適當(dāng)劃分的 N 個操作步驟串聯(lián)起來,最大特點是數(shù)據(jù)流在各個步驟的處理從時間上看是連續(xù)的。它實際是將大量的數(shù)據(jù)處理分成幾個階段。每個階段都利用上一個階段產(chǎn)生的中間結(jié)果,直到得到最終結(jié)果。這樣,從一個數(shù)據(jù)輸入到結(jié)果輸出需要多個時鐘周期,但僅從輸出結(jié)果來看,每個時鐘周期均可以得到一個結(jié)果。 pipeline 所付出的代價就是增加了輸入到輸出的時鐘數(shù)目。 圖 流水線原理示意圖 Fig pipeline elements 如圖 所示步驟 1 是第一級流水線依次類推。當(dāng) a1 的數(shù)據(jù)進(jìn)入步驟一流水線時后面的流水線因為沒有進(jìn)入數(shù)據(jù),可以看做沒有工作。當(dāng)下個時鐘周期 b1數(shù)據(jù)進(jìn)入流水線后 a1 的數(shù)據(jù)經(jīng)過步驟 1處理進(jìn)入到步驟 2,在這一個時鐘周期時,同時進(jìn)行的是 b1 在步驟 1 運算, a1 在步驟 2 運算依次類推。最后整個流水級都處于工作狀態(tài)。以每個時鐘周期 ,可以看出采用流水線時 a1的數(shù)據(jù)經(jīng)過 4個流水級 ,而后面每 運算出一個有效數(shù)據(jù)。而不采用流水級的設(shè)計只能每 出 一個數(shù)據(jù)。因此采用流水級的設(shè)計大大增加了微處理器設(shè)計大大增加了微處理器的運算效率。 步驟 1 步驟 2 步驟 3 步驟 4步驟 1 步驟 2 步驟 3 步驟 4步驟 1 步驟 2 步驟 3 步驟 4a 1b 1c 1a 2b 2a 3 a 464bit MIPS架構(gòu)處理器體系結(jié)構(gòu) 7 在多級流水階段中,若某級流水處理的時間比其它流水階段處理時間長的話,那其它流水階段處理的速度也會受很大影響。因此,在流水線里,應(yīng)該盡量保證每個階段所占用時間大致相同。這就要求在電路設(shè)計中,尋求邏輯復(fù)雜性與處理速度之間的平衡,顯得尤為重要。在 IC 設(shè)計初期,系統(tǒng)級劃分時,就應(yīng)合理分配電路到不同階段以使流水線保持均衡。下面對微處理器中影響流水線效率的因素進(jìn)行分析。 資源沖突 后 繼指令等待 當(dāng)處理器中多個指令同時使用同一個資源時,這樣后條指令的執(zhí)行就必須等前條指令執(zhí)行完畢后,方可進(jìn)行。這種因素在流水線中是不不可避免的,雖然編譯器在對指令進(jìn)行編譯時,會采取相應(yīng)算法來盡量減少此類沖突,但實際在 CPU 上跑一段應(yīng)用程序時,這種資源沖突的情況是普遍存在的。因此在微處理器設(shè)計中,處理資源沖突的電路策略在前端設(shè)計中肯定得預(yù)先考慮。 依賴 流水線空泡 在流水線中有的時候中間流水級會產(chǎn)生無效的數(shù)據(jù)這種情況稱為流水線的空泡。產(chǎn)生空泡的原因有很多,比如在微處理器中發(fā)射模塊中前面的指令發(fā) 射到了 fu0 里面,而后面的指令因為資源相關(guān),在下一個時鐘周期發(fā)射模塊沒有繼續(xù)發(fā)射指令,這個是后 fu0 的第一級流水線就產(chǎn)生了一個空泡。這個空泡是因第一個數(shù)據(jù)已經(jīng)進(jìn)入第二級流水線了,而第一級流水線沒有進(jìn)入新的數(shù)據(jù),因此產(chǎn)生的這個空泡是可以被后面的數(shù)據(jù)給擠掉。這里用valid 來表示流水級的數(shù)據(jù)是否有效,當(dāng) valid 為 0時表示所對應(yīng)的這級流水是空的,可以被擠掉,當(dāng) valid 為 1是表示對應(yīng)的流水線是有效數(shù)據(jù),執(zhí)行完后需要寫回,不能被擠掉。 數(shù)據(jù)沖突 后繼指令等待 數(shù)據(jù)沖突就是當(dāng)后條指令的源操作數(shù)要用到 前條指令的目的操作數(shù)時,后條指令就不能發(fā)射出去,由于后條指令的該源操作數(shù)要用到更新之后的數(shù)據(jù),因此必須等待前條指令將結(jié)果放到結(jié)果總線上時,后條指令才可進(jìn)行發(fā)射。此因素在流水線里,也是對流水線效率有所影響的。編譯器對指令編譯時,算法會確保減少數(shù)據(jù)相關(guān)的發(fā)生。 西安理工大學(xué)碩士學(xué)位論文 8 64bit MIPS 架構(gòu)處理器模塊設(shè)計 處理器的結(jié)構(gòu)是影響整個處理器的工作效率的關(guān)鍵部分,只有合理的結(jié)構(gòu)才能使處理器的效率達(dá)到最高。因此微處理器的結(jié)構(gòu)是否合理是整個微處理器設(shè)計中最關(guān)鍵的部分。作者在整個設(shè)計中負(fù)責(zé)微處理器的訪存部件的所有設(shè) 計,和部分發(fā)射模塊設(shè)計。 處理器結(jié)構(gòu) 本論文中的微處理器流水線采用經(jīng)典的取址,譯碼,發(fā)射,運算,寫回五個部分,馮 .諾曼結(jié)構(gòu), 2KB+4KB一級片內(nèi)高速緩存, 4譯碼,能處理 64 位數(shù)據(jù)、四發(fā)射、亂序執(zhí)行(動態(tài)調(diào)度、順序發(fā)射、靜態(tài)轉(zhuǎn)移預(yù)測)動態(tài)流水線結(jié)構(gòu),定點字長 64 位,浮點字長 64 位,PC 地址 32 位。浮點部件采用 IEEE 754 標(biāo)準(zhǔn)。 本文中的微處理器設(shè)計如圖 所示: P CP C + 1 6I C A C H EI T L BI RD e c o d e rI n s t r u c t i o nQ u e u eG e n e r a lR e g i s t e rF i l eF l o a t i n gP o i n tR e g i s t e rF i l eA L U 1A L U 2M E MF A L UD D R C o n t r o l l e rP r o c e s s o r I n t e r f a c eR e o d e r L o g i cb r a n c h b u sp r e b r a n c h b u sw r i t e b a c kw r i t e b a c k b u sI C A C H E m i s sr e f i l l b u s 圖 處理器整體結(jié)構(gòu)框圖 Fig cpu structure 1) .PC 模塊是整個流水線的最前端,負(fù)責(zé)計算和控制下一個時鐘周期需要取出的指令,根據(jù) PC 地址從 icache 中取出相應(yīng)的指令,當(dāng)取出指令后, PC地址相應(yīng)的加 16?;蛘哂商D(zhuǎn)類指令給出下一個時鐘周期取址所需要的 PC地址。 2) .ICAHCE(指令高速緩存),是在內(nèi)存和 CPU 之間的速度快存儲量小的數(shù)據(jù)緩存,由SRAM 組成,寬度 128,深度 256,采用兩組組相連直接映射。包括指令數(shù)據(jù)段(每行 128bit)和 tag 段(每行 20bit), valid 位( 1bit)。 基于 64bit 基于 MIPS架構(gòu)處理器模塊設(shè)計 9 3) .從 icache 出來的 tag 位和 pc 中的 tag 位( pc 地址的高 20 位)進(jìn)行對比,當(dāng)對比命中時說明 icache 中存的數(shù)據(jù)是 pc 地址所對應(yīng)的數(shù)據(jù),把數(shù)據(jù)送入 IR 中存儲。當(dāng)對比miss 的時候說明 icache 中沒有 pc 地址對應(yīng)的數(shù)據(jù)這個時候通過總線從內(nèi)存中把數(shù)據(jù)取出來,分別放入 icahce 和 IR中。 4) .IR 存儲的是 4 條 32 位指令,通過 Decoder 模塊把這些指令譯碼成 119 位的機器碼,把軟件編譯出來的指令轉(zhuǎn)換成硬件電路的控制信號包括 op, fc, valid,op, src, dest,imm, pc等等。 5) .譯碼后的 4 條指令放入 IQ( instruction qu