自己動手寫CPU——寄存器堆、數據存儲器(基於FPGA與Verilog)


  上一篇寫的是基本的設計方案,由於考研復習很忙,不知道下一次什么時候才能打開博客,今天就再寫一篇。寫一寫CPU中涉及到RAM的部件,如寄存器堆、數據存儲器等。

  大家應該在大一剛接觸到計算機的時候就知道ROM、RAM了吧。但也記不得那些繁雜的名稱,只知道ROM是只讀存儲器,RAM是可讀寫存儲器。其實知道這些也就夠了。CPU內寄存器堆、數據存儲器等部件都是可讀出可寫入的部件,所以全部屬於RAM,其實在ISE中是可以直接進行調用IP核來完成這些操作的,但今天暫且不談IP核,或許后期會對IP核模塊進行詳細的闡述。

  首先來說一說寄存器組,由於指令時MIPS指令,采用32位定長指令字,存數據的寄存器地址位寬都為5位,所以寄存器堆為32x32位的寄存器組。書上或者老師給的一些原理圖都復雜的看不懂,其實只要理解透徹了寄存器堆是很簡單的。如圖為寄存器堆的輸入輸出結構圖。

  首先說寫入,要將32位的數據寫入32x32的寄存器堆中,那么必定有一個寫使能信號(we),還得有一個寫入數據寄存的地址(Rw)。當寫入使能(we)為1時,表示我現在要向寄存器中寫入數據了,那么立馬通過Rw在寄存器組([31:0] Reg_Data [31:0]——32個32位寄存器)找到對應的32位寄存器,例如Rw = 5'd16,那么找到的就應該是32位寄存器組中32’d16的寄存器。找到要寫入的寄存器后,將要寫入的數據賦給寄存器即可。讀出其實和寫入是一樣的,想要讀出一段數據,就必須先找到存放數據的寄存器,那么依舊通過地址來尋找,當Ra = 5'd16時,那么找到的就是32位寄存器組中32’d16的寄存器,再將寄存器中的數據輸出即可。仿真后波形如圖。  寄存器堆如果理解了,那數據存儲器就非常簡單了,都是同樣的道理,先通過地址找到對應的寄存器,然后將數據輸進去或者將里邊的數據輸出來就可以,在此就不再贅述了。

  以上就是關於寄存器堆和數據存儲器的全部,時間有限,可能寫的有些粗糙,代碼這些東西,還是重在理解,理解透徹了,寫出來加上仿真真的是分分鍾的事。

  今天就......emmmmm到次結束。

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM