經(jīng)過上兩篇文章的閱讀,大家應(yīng)該清楚自己的CPU大致是如何處理數(shù)據(jù)的,而又是如何執(zhí)行指令的。我們現(xiàn)在來在簡(jiǎn)略的說一下流水線CPU的設(shè)計(jì)。(源碼在CSDN下載頁(yè),請(qǐng)自?。?/span>
流水線CPU的基本數(shù)據(jù)通路和單周期沒有什么太大區(qū)別,而且也是每個(gè)時(shí)鐘周期都有一條指令執(zhí)行結(jié)束。但是他又和多周期CPU一樣一條指令需要多個(gè)時(shí)鐘周期完成。而同時(shí)使這兩條條件同時(shí)滿足的就是流水線技術(shù)了。先上一張圖
由于在多周期CPU中,比如我們正在第三級(jí)執(zhí)行第五條指令的執(zhí)行操作,對(duì)于整個(gè)數(shù)據(jù)通路來講,其它幾級(jí)都是空閑狀態(tài),那我們?yōu)榱颂岣逤PU的工作效率,就讓他提前后邊指令的其他幾級(jí)操作。這樣一來,我們的CPU就像工廠內(nèi)的流水線一樣,每一級(jí)都在工作,大大提升了他的工作效率。
在設(shè)計(jì)中,流水線CPU甚至?xí)榷嘀芷贑PU更好實(shí)現(xiàn)。由于數(shù)據(jù)是一級(jí)一級(jí)向下流,我們都無需進(jìn)行狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移來控制,只需要讓數(shù)據(jù)與他的控制信號(hào)同步流向器件。每一個(gè)時(shí)鐘周期數(shù)據(jù)都是從上一級(jí)流向下一級(jí)。而對(duì)應(yīng)的寄存器就是在每個(gè)時(shí)鐘上升沿都讀出舊數(shù)據(jù),寫入新數(shù)據(jù)。
但是在流水線CPU中,分支跳轉(zhuǎn)語句變成了一個(gè)難點(diǎn),當(dāng)指令發(fā)現(xiàn)是分支跳轉(zhuǎn)指令時(shí),輸出branch信號(hào),后等待ALU輸出比較值是否相等。如果相等,進(jìn)行跳轉(zhuǎn)。但是跳轉(zhuǎn)時(shí),我們的流水線已將后三條指令讀入并操作了一部分了。這時(shí)我們便需要清空存儲(chǔ)器?;蛘呶覀円部梢援?dāng)檢測(cè)到branch信號(hào)時(shí)CPU停止讀入指令,直到判斷結(jié)果輸出時(shí)在進(jìn)行跳轉(zhuǎn)。、
流水線CPU是非常好用的CPU,在我們后續(xù)的程序編寫的時(shí)候基本上都會(huì)使用流水線CPU,偶爾也會(huì)用多周期CPU。
-
FPGA
+關(guān)注
關(guān)注
1625文章
21620瀏覽量
601232
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論