自定義指令集的CPU設計
前言:
本人剛剛大學畢業,積體電路專業。初入晶片設計行業,對晶片設計流程有所瞭解,在此分享一下這方面技巧,希望能夠給同樣學習中的人帶來啟發,另外如果有任何意見、建議、批評,指正。
本設計採用VERILOG 語言作為基礎,由於積體電路專業同學大都掌握verilog語言,所以本文不過多介紹,如有需要請檢視相關介紹。
本文采用VCS編譯平臺,加VERDI組合,完成設計和測試。本人水平有限,文中難免出現錯誤,歡迎指正!
組成結構:
如圖 1,CPU組成一般包括運算器,儲存器,和控制器。還需要各個外設模組。
圖 1
運算器:
運算器需要實現加法,減法等算數功能,還需要與,或,非,移位等邏輯操作功能,所以需要根據其設計目的,首先製作設計功能表。
如圖 2 為運算器模組設計框圖,包括如輸入輸出型別,位寬。
根據模組圖設計真值表
加減法器的實現:
多位加法器由一位加法器多次呼叫得到,所以只需要設計一個一位加法器即可。
減法器,5-1,可以表示為5+(-1),所以只需要能表示負數,在呼叫加法器即可,所以採用補碼的方式運算即可。
如圖4 為一個加法器。
經過多次呼叫,得到多位加法器。
根據真值表,確定使用什麼功能。在使用加法時直接輸入。在使用減法功能時,將被減數取反得到反碼,在使用加法器得到商。
邏輯運算:
邏輯運算就是與或非,直接根據真值表實現即可。
總體設計:
最後將它們組合在一起,完成運算器的設計
.
最終IO
儲存器:
儲存器主要是由4個通用暫存器,加一個狀態暫存器組成。這部分比較簡單,只需要設計一個暫存器,例化5次即可。
如圖 為單個暫存器寫法
最終IO 有 5個狀態輸入,D端輸入,兩個Q端輸入,讀寫訊號等組成
控制器
控制器需要根據自己定義好的指令來控制運算器和儲存器的工作,首先要先制定指令。
根據控制字來控制運算器與儲存器,由於控制字過多佔用bit太大,所以使用譯碼器,用8bit來控制。
如上圖 全部指令為20bit,通過每個20BIT的資料就可以使CPU動作了。
具體詳細設計見附件。
外設:
GPIO 控制器, CPU通過匯流排配置GPIO內部的控制暫存器來實現IO口的不同功能。
其具體配置見附件;
UART 控制器, CPU通過匯流排配置內部的控制暫存器來實現不同功能。
其具體配置見附件;
CPU綜合:
程式需要預先儲存到RAM中,所以需要一個可以將程式載入模組。
BOOT通過UART 將程式寫入RAM中,寫入完成返回DONE訊號,CPU接到DONE訊號後開始讀取指令。
下圖為BOOT介面
我們現在已經有運算器,儲存器,外設,控制器,還有可以下載程式的BOOT,將其組合便可以完成一個簡單的CPU設計。
最終模組圖
BOOT與CPU連線圖
模擬:
通過UART向內部寫入指令。
測試使用指令功能:
通過UART將GPIO採集到的資料傳送出去。
具體指令見附件
模擬圖:
CPU讀指令之後執行:
總結:
這只是一個非常簡單的CPU模型。當現在CPU設計思路大體相同,希望能夠拋磚引玉,給同學們一些啟發。
所以設計檔案在附件之中,可隨時下載。
附件:
http://download.csdn.net/detail/qq_29196023/9879493