自制CPU 4條指令 145個電晶體 計算速度未知

之前我上傳的自制8位CPU實現了加減法運算,可是在電路設計有一個BUG,本來是實現4條指令的,可是因為這個BUG讓我這個板子不能做加法運算,這個版本就修改了這個bug,完美實現了4條指令,分別是

1。 加法運算

2。 減法運算

3。 按位取反運算

4。 補碼運算

其實用MOS管實現加法運算特別簡單,但是減法運算就要麻煩了,在計算機系統裡沒有減法運算,本質上是轉換成加法運算來實現的。那要怎麼做呢,在前面的影片裡我介紹過了,透過對被減數進行補碼運算,而補碼運算就是對輸入的資料按位取反加1,所以要實現按位取反指令,加1到是好辦,呼叫之前設計的加法器加1便是。所以補碼運算本質上就是加法器和按位取反指令的組合。我扣掉幾層頭皮巧妙的設計讓這些指令透過撥碼開關實現,並在一個計算週期內完成計算。

下圖就是本次設計好的原理圖:

自制CPU 4條指令 145個電晶體 計算速度未知

下圖是做好的板子,其實板子早就做好了,只是沒時間驗證

自制CPU 4條指令 145個電晶體 計算速度未知

現在就演示一下加法運算,指令編碼0000,輸出有效值9位,設定指令薄碼開關為0000就行了,這個為加法運算指令,下圖是二進位制加法的計算,燈亮表示1,滅表示0 。可以看到101001+1001001=1110010的結果,對應十進位制就是41+73=114,反正只要255以內的加法能運算。

自制CPU 4條指令 145個電晶體 計算速度未知

然後是減法指令運算,指令編碼0011,輸出有效值8位,因結果疊加了補碼運算,產生了溢位,所以結果的最高位為1,也就是第9位,正確的結果就是低8位,本身這個也是8位以內的計算邏輯。下圖是減法運算的圖,10101-101=10000,對應10進位制就是21-7=16,只要是255以內減法運算都可以。

自制CPU 4條指令 145個電晶體 計算速度未知

下圖是按位取反指令,指令編碼0001,輸出有效值8位,這個沒什麼好說的,運算元1全部設成0,運算元2輸入要運算資料,輸入00110010 輸出11001101

自制CPU 4條指令 145個電晶體 計算速度未知

下圖是補碼運算,指令編碼是0011,輸出有效值8位,運算規則是按位取反+1,運算元1全部設成0,運算元2輸入要運算資料。所以1100的補碼就是11110100,結果都是正確的。

自制CPU 4條指令 145個電晶體 計算速度未知

可以看到,四條指令除了加法指令的有效值是9位以外,其它的全部是低8位,是名副其實8位CPU,當然這離真正的CPU還差的遠,我也只是好奇CPU執行原理慢慢琢磨的,有空就慢慢折騰吧。