1. 程式人生 > >自定義指令集的CPU設計

自定義指令集的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