最近對學習的掌控可能出現了問題,左支右絀,p2掛了,p2、p3、p4、p5每周在計組花的連續時間少了很多,學習到的東西也少了很多,流水線都還沒真正開始寫,和別人比落后了一大截,隨筆自然就荒廢了,我得盡快調整狀態,下決心只要學不死,就往死里學,盡快迎頭趕上鴨!!
由於p4斷斷續續做的,現在臨考前來總結一下p4,順便恢復一下記憶,對Verilog命名規范、p4設計CPU技巧、實現細節等等進行初步總結,如有不對煩請指正。
一、Verilog設計單周期CPU流程
由於p3和理論部分我們已經掌握了單周期CPU的理論知識,也對CPU的實現有形象化的認識。我們要做的就是“翻譯”一遍。
我主要是先設計CPU文檔,再用Verilog描述CPU。
1.畫出各個部件的端口及功能定義表,定義各個基礎部件的端口,描述部件的功能。在這里我們不需要考慮部件功能的實現細節,只需要遵循高內聚低耦合的特點划分部件,將各個部件的功能描述清楚就可以了。
關於部件的划分,在這里我主要遵循高小鵬老師的《計算機組成與實現》,單獨設計了NPC組合邏輯部件,將求beq,jal等跳轉指令的地址都放到這里來,我認為在設計單周期CPU時會顯得更加清晰,不容易出錯。
關於各個部件的命名規范,我稍后再提。
大概表頭設計如下:
2.設計各條指令的數據通路,同時修正擴展第一步中相應模塊的端口和功能。
在這里其實理論上可以建一個以指令為列各個部件端口為行的表格,但我最初是在word里畫的,所以把他拆分成了各個部件。
表頭列出單個部件的信號端口(輸入端)和驅動源(其他部件的輸出端),各條指令,我稱之為數據綜合表:
由圖所示,表頭設計好了,需要的做的只是按照每一條指令數據通路進行填空而已,在這個過程中,如果需要對部件端口功能進行修改擴展則及時修改擴展。
填表的過程就相當於在logisim中連線,這樣就不要照着圖就能設計出Verilog描述的CPU了。
注意:端口名稱需要嚴格按照之前表格里的名稱來寫,方便后面verilog的描述。
3.綜合數據通路 初步構建Controller
如上表所示,綜合數據通路的過程就是添加多路選擇器以及描述控制器的過程。
四、構建Controller端口與功能表
直接上圖,關注表頭:
端口定義也可從圖中獲得。
4.利用上述端口與功能定義表使用Verilog描述各個部件和多路選擇器(包括controller)
注意:實驗中reset需要對所有時序部件(包括GRF DM PC進行同步復位,不包括IM);
理解:將CPU看成大型的有限狀態機,復位代表保存的狀態全部清零。
5.描述數據通路
利用設計的數據通路綜合表,就能知道端口之間的連接關系。
用Verilog描述時,由於需要模塊實例化,不同部件端口不能直接相連,必須使用wire型作為媒介,命名規范之后提。
6.測試程序
二、描述Controller的方法
我是采用assign賦值、和或邏輯,
或邏輯就是或門;和邏輯可以利用三目運算符從而代替直接描述logisim中的門級描述,避免出錯。
例如 assign subu=(Op==6'b000000&&Func==6'b100011)?1:0;
至於if-else和case語句我覺得並沒有更簡單,宏定義我就想不到了,評論區可以指正完善我的思考題orz。
我的P4 Verilog的命名規范(嘗試總結,試行版)大概率P5要修改
1.各部件端口定義與功能表
杜絕單純的I O 等毫無意義千篇一律的設置。
在填寫表格時,可以PC.DO 部件名+.+端口名
DO DI WD RD Addr 只要在表格中寫清楚就好·····注意大小寫
2.在寫數據通路時,wire和各個部件的輸出端口同名,從而確保CPU連接的正確性
PC.DO -> PCDO去掉.
特殊情況下須標注
3.多路選擇器按順序命名Mux1 Mux2 Mux3 實例化時改為M1 M2 M3
好像沒有要強調的啊。。。。啊先這樣吧
加油鴨!