江寒用4個與非門打造出D觸發器后,又在其基礎上實現了“二進制存儲單元”。
這是只能存取、記憶1個二進制位的小裝置。
包括一個輸入、一個輸出,和一個負責寫操作的load接口。
別看它小,可是構成寄存器和內存陣列的基本結構。
根據out(t)=in(t-1)的設計需求,D觸發器的輸出必須反饋到輸入。
但簡單的將輸出信號傳送給輸入端,肯定是行不通的。
必須通過合理的設計,才能讓其正確工作。
比如加裝一個“多路轉換器”,用它的“選擇位”作為寄存器的“加載位”……
D觸發器的設計,保證了輸出變化僅發生在兩個時鐘周期之間的切換點上,而不會發生在時鐘周期內部。
這樣,即使時序邏輯電路在時鐘周期內出現不穩定,也不會影響輸出的準確性。
只需要保證在下一個時鐘周期開始時,輸出準確無誤的數值就可以了。
這種“離散化”的特性,對于保證計算機系統的同步協調十分重要。
比如,要讓ALU計算兩個數A與B的和。
假設A所在的RAM寄存器,距離ALU很近,而B所在的RAM寄存器,距離ALU較遠。
由于物理條件的限制,比如電阻、干擾、信號噪聲或者其他隨機因素,A、B信號也許無法同步到達ALU。
為了不讓運算結果出錯,就要保證:在一個時鐘周期內,ALU輸出的結果,能到達最遠的RAM寄存器。
這樣才能將互相獨立的一系列硬件,同步成一個協調、統一的整體系統。
江寒耗費了一點腦細胞后,終于將“二進制單元”搞定。
接下來,就可以大展拳腳了。
只要做出一個二進制單元,就能很容易地做出n位寄存器。
只要將n個一模一樣的二進制單元,有機地組織在一起,就能構建出n個“比特門”。
然后將此寄存器的load信號,賦予每個“比特門”,就可以批量存取數據了。
通常用8個“比特門”,來實現一個字節的數據存取。
若干個字節組織在一起,又可以構成任意位寬的寄存器。
比如江寒打算實現的,就是一個由4個字節組成的32位寄存器。
每個寄存器存儲的位寬,也叫“字長”,若干個寄存器組織在一起,就形成了“寄存器組”。
江寒設計的寄存器組,由8個32位寄存器組成。
接下來,是“存儲塊”,也就是俗稱內存的RAM(隨機讀寫存儲器)。
這種內存在設計上,要求不管存儲單元的物理位置在哪里,ALU都能花費基本相同的時間,直接訪問。
設計的時候,先給RAM的每個記憶單元,分配一個地址,然后構建一個由N個寄存器組成的陣列。
再構建一個邏輯門,使其通過地址訪問到對應的記憶單元……
典型的RAM接受三種輸入值:數據、地址和加載位。
RAM設計起來不容易,但實現起來意外的簡單。
江寒先做出了一個字節的RAM,然后將其與空白圖紙一起賣掉。
得到圖紙后,就利用自動搭建功能,批量生產出大量“字節存儲單元”。
接下來,就可以組裝出任意規模的存儲陣列了。
江寒組裝了一個8個字節的存儲陣列,稱之為RAM8,然后將其再次轉換成圖紙。
接下來,制作8組RAM8陣列,設計配套的電路,將其組合在一起,就成了RAM64。
重復上述過程,就打造出了RAM512、RAM4K、RAM16K、RAM64K……
“我去,這么貴?”
前面還好,從4kb內存開始,自動構建功能的附加收費,就超過了元件本身的價格了。
但為了節省時間,消滅錯誤率,還是得使用這個自動構建功能。
浪費點積分也是值得的。
反正積分來的容易,萬一不夠了,再多做幾臺無線電發射器也就是了……