CPU設(shè)計實戰(zhàn):LoongArch版 課件 04-流水線CPU設(shè)計實驗_第1頁
CPU設(shè)計實戰(zhàn):LoongArch版 課件 04-流水線CPU設(shè)計實驗_第2頁
CPU設(shè)計實戰(zhàn):LoongArch版 課件 04-流水線CPU設(shè)計實驗_第3頁
CPU設(shè)計實戰(zhàn):LoongArch版 課件 04-流水線CPU設(shè)計實驗_第4頁
CPU設(shè)計實戰(zhàn):LoongArch版 課件 04-流水線CPU設(shè)計實驗_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

流水線CPU設(shè)計實驗2010203單周期CPU設(shè)計回顧流水線CPU相關(guān)理論流水線CPU設(shè)計要點3010203單周期CPU設(shè)計回顧流水線CPU相關(guān)理論流水線CPU設(shè)計要點CPU設(shè)計的特點:根據(jù)指令系統(tǒng)規(guī)范中的定義設(shè)計出“數(shù)據(jù)通路+控制邏輯”對指令系統(tǒng)中定義的指令逐條進行功能分解,得到一系列操作和操作的對象,這些操作和操作的對象必然對應(yīng)其各自的數(shù)據(jù)通路因為指令間存在一些相同或相近的操作和操作對象,所以我們可以只設(shè)計一套數(shù)據(jù)通路供多個指令公用對于確實存在差異無法共享數(shù)據(jù)通路的情況,只能各自設(shè)計一套,再用多路選擇器從中選擇出所需的結(jié)果CPU的一般設(shè)計方法4實現(xiàn)指令一覽5add.w(add

word)

add.wrd,rj,rk GR[rd]=GR[rj]

+

GR[rk]addi.w(add

immediateword)

addi.wrd,rj,si12 GR[rd]=GR[rj]+sext32(si12)sub.w(subtractword) sub.wrd,rj,rk GR[rd]=GR[rj]-GR[rk]slt(setlessthan) sltrd,rj,rk GR[rd]=GR[rj]<signedGR[rk]sltu(setlessthanunsigned) slturd,rj,rk GR[rd]=GR[rj]<unsignedGR[rk]slli.w(shiftleftlogicimmediateword) slli.wrd,rj,ui5 GR[rd]=GR[rj]<<ui5srli.w(shiftrightlogicimmediateword) srli.wrd,rj,ui5 GR[rd]=GR[rj]>>logicui5srai.w(shiftrightarithmeticimmediateword) srai.wrd,rj,ui5 GR[rd]=GR[rj]>>arithui5and(and) andrd,rj,rk GR[rd]=GR[rj]&GR[rk]or(or) orrd,rj,rk GR[rd]=GR[rj]|GR[rk]nor(notor) norrd,rj,rk GR[rd]=~(GR[rj]|GR[rk])xor(exclusiveor) xorrd,rj,rk GR[rd]=GR[rj]^GR[rk]lu12i(loadupperfrombit12immediate) lu12ird,si20 GR[rd]={si20,12’b0}beq(branchonequal) beqrj,rd,off16 if(GR[rj]==GR[rd])PC=PC+sext32({off16,2’b0})bne(branchonnotequal) bnerj,rd,offs16 if(GR[rj]!=GR[rd])PC=PC+sext32({off16,2’b0})b(branch) boffs26 PC=PC+sext32({off26,2’b0})bl(branchandlink) bloffs26 GR[1]=PC+4;PC=PC+sext32({off26,2’b0})jirl(jumpindirectregisterlink) jirlrd,rj,offs16 GR[rd]=PC+4;PC=GR[rj]+sext32({offs16,2’b0})ld.w(loadwordsigned) ld.wrd,rj,si12 GR[rd]=MEM[GR[rj]+sext32(si12)][31:0]st.w(storeword) st.wrd,rj,si12 MEM[GR[rj]+sext32(si12)][31:0]=GR[rd][31:0]單周期CPU結(jié)構(gòu)設(shè)計67010203單周期CPU設(shè)計回顧流水線CPU相關(guān)理論流水線CPU設(shè)計要點五級流水:取指、譯碼、執(zhí)行、訪存、寫回相關(guān):結(jié)構(gòu)相關(guān)、控制相關(guān)、數(shù)據(jù)相關(guān)數(shù)據(jù)相關(guān):寫后讀、寫后寫、讀后寫相關(guān)引起的沖突(hazard)流水線CPU設(shè)計相關(guān)基礎(chǔ)知識89010203單周期CPU設(shè)計回顧流水線CPU相關(guān)理論流水線CPU設(shè)計要點單周期CPU->流水線CPU10無阻塞的流水線設(shè)計11reg[WIDTH-1:0]pipe1_data;reg[WIDTH-1:0]pipe2_data;reg[WIDTH-1:0]pipe3_data;always@(posedgeclk)beginpipe1_data<=datain;endalways@(posedgeclk)beginpipe2_data<=pipe1_data;endalways@(posedgeclk)beginpipe3_data<=pipe2_data;endassigndataout=pipe3_data;可阻塞的流水線設(shè)計12assignpipe2_ready_go=……assignpipe2_allowin=!pipe2_valid||pipe2_ready_go&&pipe3_allowin;assignpipe2_to_pipe3_valid=pipe2_valid&&pipe2_ready_go;always@(posedgeclk)beginif(rst)beginpipe2_valid<=1’b0;endelseif(pipe2_allowin)beginpipe2_valid<=pipe1_to_pipe2_valid;endif(pipe1_to_pipe2_valid&&pipe2_allowin)beginpipe2_data<=pipe1_data;endend流水線時序行為分析13流水線的data包含兩部分內(nèi)容原單周期CPU數(shù)據(jù)通路被流水線緩存隔斷的內(nèi)容譯碼級得到的控制信息,按需逐級傳遞下去指令RAM和數(shù)據(jù)RAM采用同步讀RAM帶來的設(shè)計變化指令RAM:pre-IF級發(fā)請求、IF級返回指令數(shù)據(jù)RAM:EXE級發(fā)請求、MEM級返回讀數(shù)據(jù)CPU流水化設(shè)計的特殊性14五級流水線CPU結(jié)構(gòu)設(shè)計15單端口同步RAM時序特性16輸入CLK 時鐘CSN 片選,低有效A 讀寫地址WEN 寫時能,低有效D 寫入數(shù)據(jù)輸出Q 讀出數(shù)據(jù)處理相關(guān)引起的沖突17用阻塞的方式解決數(shù)據(jù)相關(guān)判斷譯碼級指令與后面流水線的相關(guān)情況寫回級要不要考慮?譯碼級指令阻塞不動從譯碼級開始逐級排空后面的流水線用取消的方式解決控制相關(guān)譯碼級的taken分支需要取消當前取指級僅當譯碼級分支指令源操作數(shù)就緒時才能取消流水線CPU數(shù)據(jù)前遞18將執(zhí)行、訪存、寫回級已產(chǎn)生的結(jié)果前遞到譯碼級產(chǎn)生前遞值的選擇器是有優(yōu)先級選擇可以前遞的情況就不要阻塞了完整功能流水線CPU

Verilog編碼舉例(供教師參考)分支誤預(yù)測取消處理控制相關(guān)引起的沖突20assignds_br_cond_true=...assignds_br_taken=ds2es_valid

&&es_allowin&&ds_br_cond_true;always@(posedgeclk)beginif(reset||ds_br_taken)ds_valid<=1’b0;elseif(ds_allowin)ds_valid<=fs2ds_valid;...end//FSstagealways@(posedgeclk)beginif(reset)

fs_valid<=1’b0;elseif(fs_allowin)

fs_valid<=prefs2fs_valid;elseif(ds_br_taken)//此處條件有效蘊含

fs_valid&&

//(!fs_ready_go||!ds_allowin)fs_valid<=1’b0;end阻塞方式處理RAW相關(guān)引起的沖突21//DSstageassignsrc1_from_gr=...assignsrc2_from_gr=...assignsrc1_stall=src1_from_gr&&(rf_addr1!=5’b0)&&((es_valid&&es_gr_we&&(es_dest==rf_addr1))||(ms_valid&&ms_gr_we&&(ms_dest==rf_addr1))||(ws_valid&&ws_gr_we&&(ws_dest==rf_addr1)));assignsrc2_stall=src2_from_gr&&(rf_addr2!=5’b0)&&((es_valid&&es_gr_we&&(es_dest==rf_addr2))||(ms_valid&&ms_gr_we&&(ms_dest==rf_addr2))||(ws_valid&&ws_gr_we&&(ws_dest==rf_addr2)));assignds_stall=src1_stall||src2_stall;assignds_ready_go=!ds_stall;前遞優(yōu)化RAW相關(guān)處理22//ESstageassignes_is_load=...//DSstageassignsrc1_hit_es=es_valid&&es_gr_we&&(es_dest==rf_addr1)&&(rf_addr1!=5’b0);assignsrc1_hit_ms=ms_valid&&ms_gr_we&&(ms_dest==rf_addr1)&&(rf_addr1!=5’b0);assignsrc1_hit_ws=ws_valid&&ws_gr_we&&(ws_dest==rf_addr1)&&(rf_addr1!=5’b0);assignsrc1_stall=src1_from_gr&&src1_hit_es&&es_is_load;//這樣寫在后續(xù)實驗中還是對的嗎?assignrj_value=src1_hit_es?es_fwd_value:src1_hit_ms?ms_fwd_value:src1_hit_ws?ws_fwd_value:rf_data1;assignsrc2_hit_es=es_valid&&es_gr_we&&(es_dest==rf_addr2)&&(rf_addr2!=5’b0);assignsrc2_hit_ms=ms_valid&&ms_gr_we&&(ms_dest==rf_addr2)&&(rf_addr2!=5’b0);assignsrc2_hit_ws=ws_valid&&ws_gr_we

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論