• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 手搓一個16位RISC架構(gòu)CPU

    手搓一個16位RISC架構(gòu)CPU

    作者: 時間:2025-04-07 來源:硬件筆記本 收藏

    今天給大家分享一個耗時又有趣的項目:手搓一個16位RISC架構(gòu)

    本文引用地址:http://www.czjhyjcfj.com/article/202504/469071.htm

    項目的起因是,作者在學(xué)習(xí)了MITx的 "計算結(jié)構(gòu) "課程后,發(fā)現(xiàn)好像自己做一個也沒那么難。


    在掌握了電子學(xué)的初級知識和課程中介紹的概念之后,就開始設(shè)計想要做一個基于NMOS邏輯的RISC 。

    課程中介紹的是Beta CPU——有一個負載存儲,32位RISC架構(gòu)。

    為了節(jié)省空間、晶體管,少掉一點頭發(fā),作者決定把自己的這個CPU減少到16位。

    注:MITx的"Computation Structures"官網(wǎng)中對這門課的描述是This course introduces architecture of digital systems, emphasizing structural principles common to a wide range of technologies.

    相當(dāng)于我們國內(nèi)的數(shù)字電路以及計算機組成原理的課程。

    B站有UP主做搬運,有興趣的可以看一下:【MIT公開課】6.004 計算結(jié)構(gòu) · 2019年春(完結(jié)·中英字幕·機翻)[1]

    課程原文鏈接:Computation Structures[2]

    如果把它安裝在墻上,它將占據(jù)一整面墻。



    為了讓整個計算機看起來更復(fù)古,輸入輸出部分,作者專門搬出來自己壁櫥里的一個舊的Apple II Plus來處理。


    注:Apple II Plus 發(fā)布日期 1979年6月,已經(jīng)是40多年前的事了……



    作者用釘板、原型板、2N7000晶體管、電阻(主要是SIP和一些分立器件)、LED、一些HP-5082顯示芯片、一些電致發(fā)光線和許多可愛的彩色跳線來構(gòu)建這么一款CPU。


    作者給整個計算機起名為——Spikeputer,目標(biāo)是它能夠執(zhí)行簡單的程序,并且能夠讓計算過程可視化。


    下面是作者提供的一段介紹:

    Spikeputor將會是一臺功能齊全的計算機,它的CPU完全由NMOS邏輯制成,使用約5000個MOSFET(2N7000)、電阻和LED來顯示邏輯。

    HP-5082-7340 Hex顯示芯片將被戰(zhàn)略性地加入來顯示主要CPU組件輸出的數(shù)字內(nèi)容,盡管如果你閱讀二進制,LED將提供同樣的信息。

    利用電致發(fā)光線來可視化主要部件之間的邏輯路徑。

    CPU的時鐘頻率將可以從最大速度(預(yù)測為數(shù)萬赫茲范圍)下調(diào)至單步。(補充:GHz=千兆赫)

    由于制作Spikeputor的主要驅(qū)動力是讓它能夠可視化計算過程,所以速度并不是最重要的,雖然還是會采取一些步驟(例如時鐘樹)來提高計算機的整體性能。



    Spikeputor CPU的設(shè)計特點和主要部件

    • 16位的地址空間

    • 寄存器內(nèi)存:七個16位寄存器,加上1個硬編碼為0的寄存器。

    • 多功能ALU

      • 加法和減法,支持負數(shù)補碼

      • 比較(等于、小于、小于或等于)

      • 布爾邏輯(AND, OR, XOR, Identity)

      • 移位運算

    • 用簡單的邏輯門實現(xiàn)的控制邏輯(沒有微代碼或ROM)

    • 用于程序計數(shù)器、指令、常數(shù)、CPU階段和一些必要的狀態(tài)標(biāo)志的附加寄存器

    • 單字操作碼用于寄存器之間的操作

    • 寄存器和16位常數(shù)之間操作的雙字操作碼

      • ALU功能(見上文)

      • 內(nèi)存功能:加載、相對于PC的加載和存儲

      • 有條件(BEQ, BNE)和無條件的分支,帶分支點存儲

    • IRQ和RESET處理(包括自動使用寄存器R6作為異常指針)

    • 所有I/O的直接內(nèi)存訪問(DMA)。

    內(nèi)存

    為了能夠執(zhí)行更多瑣碎的程序,Spikeputor CPU將與高速靜態(tài)存儲器RAM(2 x 32K AS6C62256)和ROM(2 x 32K AT27C256R)芯片連接。此外,還會創(chuàng)建一個鏡像的只寫 "屏幕存儲器",也是由(大約5000個)晶體管制成,提供一個48乘18的可尋址LED陣列。存儲器地址將被限制在字的邊界內(nèi)。試圖尋址奇數(shù)的存儲器位置會返回相應(yīng)的偶數(shù)的16位字。由于沒有任何16K的SRAM和ROM芯片可用,我使用了32K的芯片,并會設(shè)計一個內(nèi)存系統(tǒng),從RAM和ROM中選擇16K的庫進行讀取操作。完整的32K字(64kbytes)的RAM可以在任何時候被寫入。

    輸入/輸出

    I/O功能作者用1986年的Apple II Plus計算機上運行的定制軟件和硬件來實現(xiàn)。作為項目的一部分,作者還設(shè)計了一個名為BIAS(連接蘋果和Spikeputor的板卡)的自定義外設(shè)卡,以及蘋果上的軟件,來提供鍵盤輸入、屏幕輸出和長期數(shù)據(jù)存儲和檢索。I/O控制器將直接訪問Spikeputor內(nèi)存,并在所有讀寫操作中停止Spikeputor CPU。

    還實現(xiàn)了16位通用輸入和輸出信號,鏡像到固定的高內(nèi)存位置。


    結(jié)構(gòu)

    整個Spikeputor被組裝在一系列的無焊接面包板上。每個主要部件(ALU、寄存器存儲器、控制邏輯/程序計數(shù)器/狀態(tài)寄存器和屏幕存儲器)被布置在一個10.16cm×5.08cm的釘板上。每個釘板可以包含一個9×6的陣列(54)的面包板,并根據(jù)需要為一些小的電路留出一些空間。四塊掛板中的每一塊都被安裝在墻上,在安裝的下方有空間放Apple II Plus的桌子。


    電源

    電力需求在25w左右。Spikeputor使用+5V電源,由一組8端口的USB電源提供(每塊釘板一個),非常方便。電致發(fā)光線的電源是單獨的(額外5w)。

    欣賞一下圖片和視頻:




    簡單的小游戲:

    ,時長01:25

    斐波那契數(shù)列計算:

    ,時長01:03

    計算圓周率:

    ,時長03:37

    參考資料

    [1]MIT公開課:

    https://www.bilibili.com/video/av86045726/

    [2]Computation Structures: https://ocw.mit.edu/courses/6-004-computation-structures-spring-2017/





    關(guān)鍵詞: RISC-V CPU

    評論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 治县。| 鄂州市| 保山市| 海丰县| 梅州市| 昌乐县| 宁都县| 怀仁县| 小金县| 苏尼特右旗| 乌拉特前旗| 惠来县| 那曲县| 尼木县| 普兰县| 色达县| 乌恰县| 开江县| 方正县| 双流县| 镇赉县| 隆回县| 扎赉特旗| 上虞市| 神池县| 即墨市| 苍山县| 文化| 林西县| 山阴县| 任丘市| 普格县| 延寿县| 临漳县| 柳江县| 五大连池市| 盖州市| 赣州市| 会宁县| 萨迦县| 阜城县|