流水线cpu —Verilog HDL
一.準備工作
先看看書(《計算機原理與設計 Verilog HDL版》),搞懂一點原理。然后照著書上的代碼寫一寫(用8.4的就可以了,不用8.6的)。
注意mux2x32,mux4,cla32等可以用單周期的mux,alu。 (cla32就是個加法器,)
然后dffe32在書上前幾章也有。
pipeimem即為im指令存儲器,可以套用單周期的IM。
pipemem是數據存儲器,可以套用單周期的dm
regfile 可以套用單周期的RF。
?
alu可以完全套用單周期的alu。pipecu中的aluc,rij型的wire,以及wreg中的一部分都可以套用單周期的代碼。只是注意要調整好,不要多寫,少寫,導致錯誤。(我犯過錯誤就是,alu的功能與pipecu的aluc不一致,少寫了一些東西,導致數據讀入都出問題。)
需要理解流水線cpu的各種問題及解決對策。
比如lw指令從memory讀到register,在mem級才可以前推(forward)到id級,這樣如果下一條指令要用到寄存器的 結果,需要阻塞(stall)一周期,否則已經進入了exe級了而書上示例的cpu只能forward到id級。
這里補充一點,用了8.4的代碼,然后為了消除控制冒險,要在mars的測試文件(.asm)中,每一條J型指令后加一個nop。這里是因為看8.2.2,采用了延遲槽技術,i指令是跳轉類指令,i+1無論如何都會被執行。(提前到在ID級判斷是否要跳轉),這里加nop,剛好取代了i+1。
二.調整接口&&細節調整
寫完代碼,modelsim編譯成功。(或者有問題,按照transcript的提升改一改)。
然后start simulation、
?
?
?
?
simulation失敗,提升error loading design。
error loading design的原因基本上是:模塊名錯誤(定義的和使用的。),參數錯誤(接口錯誤,比如參數順序不一致,參數寬度不一致)
注意網上看error loading design很多都說沒有提示,這是誤導了。(導致我自己不看提示改了一天,雖然確實也改好了一些吧)確實提示不多,但是modelsim transricpt 在start simulation 后也會有一些error提示的
Error: (vsim-3043) E:/pipe3/pipelinecomp_tb.v(55): Unresolved reference to 'ID' in U_SCCOMP.U_SCPU.ID.
這個就提示ID不知道是啥。
然后我看了一下pipelinecpu中,pipeid 起名id_stage ,而不是ID。把ID改成id_stage就完事了
?
調整接口很困難(對我來說)。要細心。
?
比如clrn就是rest等等,需要理解后替換。
比如因為仍然使用了單周期的頂層例化文件,comp中cpu模塊只有一個aluout的例化,那么就不能按照8.4的代碼在module cpu里ealu,malu,walu三個輸出。其中walu,ealu改為wire型。malu改名為aluout,仍保留為輸出。
還有pipemem(即為DM,data'memory)因為在comp中例化,就不需要像8.4中一樣在module pipelinecpu中使用了。
?
還有許多細節,需要自己摸索。
?
三.效果
還是學號排序,應該是成功了
放錯圖了
?這是mars setting momeryconfiguration text at address,然后assemble,然后dump的結果。
正確的圖
先設置mars setting momeryconfiguration data at address,assemble,不要運行,dump,然后仿真的結果
單周期的時候也是這么設置的,一開始忘記了...
?
?
轉載于:https://www.cnblogs.com/lqerio/p/11117618.html
總結
以上是生活随笔為你收集整理的流水线cpu —Verilog HDL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: canvas学习总结四:绘制虚线
- 下一篇: gogs安装完了, idea的git也配