動手設計 CPU(三)—— 微程序控制的存儲器讀寫系統設計

一、架構設計

在設計完第一個練習架構 — 微程序控制的運算器設計 之後,我們進入了第二個架構的設計過程 — 微程序控制的存儲器讀寫系統設計,接下來我們來探討一下如何進行實現。

下圖爲我們將要設計的微程序控制的運算器的整體架構。

在這裏插入圖片描述
根據上述的架構,我們暫用下述的指令進行設計。
在這裏插入圖片描述
上述架構的整體邏輯是,uPC+CROM+uIR 選出一個指令,然後根據 XPCXMAR 兩個信號從數據選擇器中選出 PC 中或 MAR 中的地址,根據選出的地址,對 RAM 進行讀取或寫入。

其中 R 寄存器 用於存數,MAR 用於存地址,因此我們需要利用上述這個架構實現下述 4 個指令。

  1. 從 0 號單元中取出 Ad1 放入 MAR
  2. 將 MAR 地址傳入 RAM 中,取出對應數據,存入 R 寄存器
  3. 從 1 號單元中取出 Ad2 放入 MAR
  4. 將 R 寄存器中數據存入 MAR 中對應的地址單元

我們再次將上述電路中的元件分離,逐一實現 R、MAR、PC、RAM、數據選擇器,具體實現邏輯如下所示。

二、元件實現

(1) R 寄存器

我們通過封裝 74374 — 鎖存器的輸入輸出來實現 R 寄存器,該寄存器的主要特點在於 OEN 的三態允許控制端,比普通的寄存器更適合應用在 CPU 設計中。
在這裏插入圖片描述
封裝一下,即可得到下述的 R 寄存器。
在這裏插入圖片描述

(2) MAR 地址寄存器

對比 R 寄存器使用了鎖存器,MAR 寄存器則可以直接使用普通的寄存器完成,即直接調用 74273 進行實現,主要目的就是封裝輸入、輸出端。
在這裏插入圖片描述
封裝一下,即可得到下述的 MAR 寄存器。
在這裏插入圖片描述

(3) PC 指令寄存器

PC 指令寄存器與第二篇文章中所實現的 uPC 沒有較大差別,因此我們直接對 74161 進行封裝即可,主要目的仍然是封裝輸入、輸出端,讓電路設計地更加間接。
在這裏插入圖片描述
封裝一下,即可得到下述的 PC 指令寄存器。
在這裏插入圖片描述

(4) RAM

與 ROM 的設計過程一致,點擊下圖的按鈕,根據流程即可設計 1-port 的 RAM,此處設計部分爲 Quartus 應用的操作,不明白的可以繼續查詢網上資料,此處不再贅言。
在這裏插入圖片描述
最後的設計成果如下所示。
在這裏插入圖片描述
這裏有兩個地方需要注意一下。

  • wren 低電平時讀允許,高電平時寫允許。
  • CLK 下降沿打入

(5) 數據選擇器

此處我們需要實現二選一的數據選擇器,即按照每一位進行與運算,從而選出我們想要的數據,實現思路較爲簡單,具體電路如下所示。
在這裏插入圖片描述
封裝一下,即可得到對應的二選一數據選擇器。
在這裏插入圖片描述

三、完整電路實現

設計完上述的 5 個元件之後,再根據最開始給出的架構,即可搭建出我們要設計的架構 微程序控制的存儲器讀寫系統設計,具體搭建電路如下。
在這裏插入圖片描述
其中可以發現,指令中的 WR 和 RD 被合併成了一個 bitbit,其實 XPC 和 XMAR 也可以合成一個 bitbit,但是爲了設計方便,此處沒有進行合併。

除此之外,需要仔細關注三個時鐘輸入端。在一開始的設計中,CLK1 和 CLK2 其實是設計成同一個輸入端的,但是由於延遲的存在,可能會發生 IR 的信號還沒傳過來,CLK2 的上升沿就到了,導致傳遞出去的信號仍然是舊的 IR 信號,從而導致錯誤。

如下圖所示,PC 突然發生了變化便是由於延遲的問題,調了好久才找到原因…T^T
在這裏插入圖片描述
正因爲上述的原因,最後將 CLK1、CLK2、CLK_ram 三個時鐘端進行了分離,才成功仿真成功!

四、仿真測試

CROM 指令預存

在這裏插入圖片描述
此處的 4 條指令便執行了文章開頭要求實現的 4 條指令。

  1. 從 0 號單元中取出 Ad1 放入 MAR
  2. 將 MAR 地址傳入 RAM 中,取出對應數據,存入 R 寄存器
  3. 從 1 號單元中取出 Ad2 放入 MAR
  4. 將 R 寄存器中數據存入 MAR 中對應的地址單元

RAM 數據預存

在這裏插入圖片描述

仿真結果

將上述數據導入存儲器中,再按下述波形調整 CLK1、CLK2、CLK_ram 三個波形,即每一次先執行 CLK1 傳入指令,再執行 CLK_ram 輸出結果,最後執行 CLK2 將數據傳入對應寄存器中。

觀察 PC_out、mar_out、R_out、ran_out 不難發現上述指令均執行成功!
在這裏插入圖片描述

五、總結

至此,我們即實現了 微程序控制的存儲器讀寫系統設計 的架構,與上一個架構一致,沒有太大難度,主要的目的仍然是熟悉環境,並且設計一些基礎元件,例如 MAR、PC、RAM 等。

除此之外,對比第一個架構,這個架構的設計過程中,時鐘安排對結果的影響更加明顯,這要求我們在之後的設計中,一定要仔細觀察時鐘,不能將時鐘瞎合併,否則會因爲延遲導致出錯。

CPU 設計第三篇結束,旅程仍在繼續!💪💪💪

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章