1. 程式人生 > >【從零開始自制CPU之學習篇06】寄存器

【從零開始自制CPU之學習篇06】寄存器

如何 put 有效 技術分享 net erl 如果 ans 搭建

  上一篇文章學習了總線的相關知識,途中ABC當時假設為一個個的8位寄存器。這一篇要學習怎麽構建這個寄存器

    技術分享圖片

  這分為兩個三個部分,數據輸入,寄存器,數據輸出。首先不管輸出,來看數據輸入和寄存器這兩個部分。【03觸發器與鎖存器】中講了D型觸發器,那麽我們的寄存器(D寄存器)就由D鎖存器(74LS74)構成,結構如下:

    技術分享圖片

  圖中畫了2位的寄存器,每一個部分就是一個1位的寄存器,如果一共8位的話就需要8個這樣的1位寄存器。load端為0,那麽數據端不論是多少,輸出端Q都不會改變。如果load端為1,當時鐘上沿時,Q就會保存D傳入的數據。圖中上面的寄存器拿load為0舉例,下面的是load為1。實際搭建的圖如下:

    技術分享圖片

  中間四個數字電路分別為 74LS04(反相器),74LS08(與門),74LS32(或門),74LS74(D型鎖存器)。黃線為load,藍線為數據data,白線為時鐘clk,可以連接到之前用555定時器做的pc上。實驗到時候可以把黃線接在+或者-,表示load到0和1。這是你會看到燈泡(寄存器的數據),會隨著clk,相應的根據load的值,存儲或無視藍線data的值。

  這樣一個1位寄存器的輸入和寄存就做完了,還差輸出端。藍線只需要接入到總線上,就能收到來自總線的數據了,但把數據輸出到總線,需要做些處理,需要連接一個三態雙向總線收發器。這個在【05總線】這一篇中由講過為什麽。

  整合:至此我們了解了一個1位的寄存器從輸入到輸出的制作,8位的話則需要8個這樣的組合。這裏我們可以直接用兩個 4bit D-type registers with 3-state outputs(74LS173)即可。顧名思義,即3態輸出端的4位D型寄存器集成電路。這裏要說明一下,雖然我們要親手做cpu,但改方便時要方便。我們當然不能方便到直接用一個8086放在面包板上就算做了個cpu,可當然也不能全用基本門電路,甚至用二三極管和電容做cpu,我們要找一個折中到辦法,在了解到原理,但重復度比較高的零件,就盡量用即成的。下圖位74LS173針腳圖:

    技術分享圖片

  • CP 時鐘輸入端(上升沿有效)
  • CR 清除端
  • 1~4D 數據輸入端
  • 1~4Q 輸出端
  • N,M 三態允許允許端(低電平有效)——是否輸出到總線
  • G1,G2 數據選通端(低電平有效)——是否存入

這裏引入官方說明:

  技術分享圖片

  這樣兩個74LS173就組成了一個8位寄存器,包含輸入和輸出端的控制。由於實踐中設計的cpu需要直觀看到寄存器裏的內容,所以不管輸出到總線的控制信號如何,我們都希望能夠通過LED燈來觀察寄存器裏的內容。所以我們使74LS173的輸出端控制始終為可輸出,連接到LED燈上,再在後面接一個74LS245(三態控制)來控制信號是否輸出到總線。設計圖如下:

    技術分享圖片

  其中M,N始終接地,即低電平有效,輸出端一直有效,通過LED燈後再進行三態輸出處理。

  實操圖第一步:

    技術分享圖片

  實操圖第二步:寄存器輸出端連接到三態上,三態的輸出端連接到總線。總線又通過藍線連接到寄存器到輸入端,還有三根黃線,最右邊是load(數據是否存入),中間是clear(永遠0),左邊是三態的允許(是否輸出到總線)。白線是clk。

    技術分享圖片

  將設備連接到pc和總線上:

    技術分享圖片

  連接多個寄存器:

    技術分享圖片

  總結:至此多個寄存器已經可以和總線交互,並且連接到了pc上,隨著時鐘到改變,通過load和三態決定是否載入和輸出數據。

  參考視頻:eater.net

【從零開始自制CPU之學習篇06】寄存器