<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          強(qiáng)!自制CPU,這個小伙辦到了

          共 3148字,需瀏覽 7分鐘

           ·

          2021-06-09 05:25

          2021 年 4 月初,一位熱衷于自制 CPU 的 19 歲極客小伙 Filip Szkandera自己設(shè)計和制造出了 32 位功能性 RISC-V CPU,并構(gòu)建了與其他自制計算機(jī)不同的個人計算機(jī)「菠蘿一號Pineapple ONE)」。

          從設(shè)計、調(diào)試和安裝 CPU 和所有硬件,Filip 整整花了兩年時間。

          Filip 還受邀在東京舉辦的 RISC-V Days Tokyo 2021 Spring 上做了演示,他也成為了該會議自 2017 年舉辦以來最年輕的演示者。


          創(chuàng)建者 Filip Szkandera。

          整體來看,「菠蘿一號」是由 8 塊正方形打印電路板垂直堆疊組成,每塊邊側(cè)高度約為 10 厘米,外加一個 VGA 顯示接口卡。

          一共使用了 230 多個集成電路,大多數(shù)是 74HCT 系列邏輯芯片。示意圖如下:



          32 位 RISC-V CPU 的規(guī)格如下:

          • 最大時鐘速度:500kHz
          • 程序內(nèi)存:512kB
          • 內(nèi)存 512kB
          • 閃存 512kB
          • VGA 輸出:200×150px(黑白)
          • 2 個 8 位輸入端口
          • 2 個 8 位輸出端口

          目前,「菠蘿一號」計算機(jī)支持的命令包括:HELLO、HI、PEEK <ADDRESS>、POKE <ADDRESS> <DATA>、SYSTEM INFORMATION、CLEAR 等。



          此外雖然 CPU 的運(yùn)行速度僅有 500kHz,但玩?zhèn)€貪吃蛇游戲還是綽綽有余的:


          Filip 在一篇博客中介紹了他從設(shè)計 CPU、制作原型機(jī)、輸入 / 輸出端口、最終成品到軟件編程的技術(shù)細(xì)節(jié)(下文以第一人稱敘述)。

          設(shè)計自己的 RISC-V CPU

          此前,我在 Youtube 上發(fā)現(xiàn)了電子愛好者 Ben Eater 自制 CPU(構(gòu)建著名的 8 位計算機(jī)和經(jīng)典的 6502 微處理器)的相關(guān)教程,所以非常著迷,也就有了自制 CPU 的想法。

          然而,我覺得對于 CPU 基礎(chǔ)知識了解的還不夠,因此又觀看了 Google Robotics 軟件工程師 Robert Baruch 的教程視頻,他只使用了基本邏輯元件構(gòu)建了 32 位 RISC-V CPU。

          之后,我便開始在一個名為「Logisim-Evolution」的項(xiàng)目中制造自己的 RISC-V CPU。

          我給自己設(shè)定的目標(biāo)是不使用任何微控制器或 FPGA,只使用基本的分立邏輯元件。

          編譯器支持的最基礎(chǔ) RISC-V CPU 必須包含擴(kuò)展「整數(shù)(I)」且至少為 32 位。

          此外,我還需要安裝一個 VGA(視頻圖形陣列)輸出卡。

          我花了整整 6 個月的時間在 Logisim 項(xiàng)目上,終于得到一個可運(yùn)行的程序模擬。

          下一步繪制所有模塊的原理圖、從 JLCPCB 網(wǎng)站上購買所有的 PCB(印制電路板)并重新設(shè)計。

          由于這是我首次購買 PCB,擔(dān)心搞砸一切,于是決定在設(shè)計過程中分模塊處理,一次選購幾個,以免自己應(yīng)接不暇。

          Logisim-Evolution 項(xiàng)目中的模擬原理圖如下:



          經(jīng)過了兩輪設(shè)計,最后只剩下幾個模塊需要處理,其中一個是直接生成器(immediate generator)。

          當(dāng)我絞盡腦汁想將它從模擬轉(zhuǎn)化為合適的原理圖時,發(fā)現(xiàn)自己犯了一個致命錯誤:完全不清楚模擬是如何運(yùn)行的。

          幸運(yùn)的是,修復(fù)起來也沒有那么困難,于是對已經(jīng)制作完成的 PCB 做了改進(jìn)。


          原型機(jī)

          接下來,我將開源電子原型平臺 Arduino 連接到每個 PCB 的輸入端、同時監(jiān)控輸出端并與預(yù)測端(prediction)做對比,從而對這些 PCB 進(jìn)行測試。設(shè)置好之后,一切就可以自動運(yùn)行了。

          每次測試都至少持續(xù)數(shù)個小時。

          當(dāng)我準(zhǔn)備好將所有 PCB 整合到一塊時,模塊也已經(jīng)間隔地安裝在了木頭上,并使用 3D 打印墊片(spacer)來固定。接著上傳了一個測試程序并開始測試。

          原型機(jī)示意圖如下:


          Arduino 平臺僅用來調(diào)試,沒有在最終成品中使用。

          盡管我單獨(dú)測試了每個 PCB,但首次嘗試還是失敗了,這不足為奇。
          我又不得不花費(fèi)大量時間來找失敗的原因,找出了一些錯誤,如很難發(fā)現(xiàn)的時序問題。

          輸入 / 輸出端口

          我構(gòu)建的 RISC-V CPU 擁有兩個 8 位輸入端口和兩個 8 位輸出端口,你可以通過 RJ50 連接器在前板上訪問。
          此外,頂部模塊上有一個 7 段式顯示器(7-segment display),它與一個可以通過程序訪問的寄存器相連。

          至于與 VGA 顯示器的連接,我受 Ben Eater 的啟發(fā)構(gòu)建了一個 VGA 卡。VGA 的輸出分辨率是 200×150 像素,黑白顯示。
          雖然我想實(shí)現(xiàn)彩色顯示,但需要使用大型 V-RAM,太貴了,也就放棄了。

          下板(board)將顯示存儲在 EEPROM(帶電可擦可編程只讀存儲器,型號 39SF010A)中的靜態(tài)圖像。
          我在最終成品中使用到了雙端口 SRAM(靜態(tài)隨機(jī)存取存儲器)。


          我還構(gòu)建了一些演示用的 I/O 模塊,它們在末端都有 RJ50 連接器。

          PS/2 解碼器是買的現(xiàn)成的,我沒有時間自己制作。

          最終成品

          讓原型機(jī)運(yùn)行不太容易,在大約 5 個月的時間后,我終于成功了。

          我又重新設(shè)計了所有的 PCB,修復(fù)錯誤,并將這些 PCB 以塔狀結(jié)構(gòu)堆疊,所以每個模塊僅用針座(pinheader)相連接。重新設(shè)計 PCB 大約花了 3 個月的時間,然后對最終的 PCB 進(jìn)行有序排列。

          此外,我還設(shè)計并使用 Prusa i3 3D 打印機(jī)打印了一個圓柱體外殼,足以容納所有的 PCB 和 I/O 連接器,這樣也可以將鍵盤和 VGA 顯示器直接連接到計算機(jī)。

          最終成品,左:無圓柱體外殼,右:安裝圓柱體外殼。

          最終成品的組件拆卸:


          方框圖:


          編程

          最后,在經(jīng)過了數(shù)百小時的設(shè)計、焊接和調(diào)試,我終于看到了成功的曙光。在好友 Jan Vykydal 的幫助下,我設(shè)置了一個兼容 RISC-V 且運(yùn)行良好的編譯器,使用 C 語言編寫了一些系統(tǒng)軟件和 demo 程序。這個編譯器可以生成機(jī)器代碼,我使用一個 Python 腳本來接收代碼并 flash 入 CPU 內(nèi)存。


          我還創(chuàng)建了一個具有一些有用函數(shù)的庫,代碼如下:


          Pineshell:

          利用這個庫,我創(chuàng)建了一個簡單的 shell 程序,這樣可以通過「與其中一個輸入端口相連的 PS/2 鍵盤」來實(shí)現(xiàn)與該程序的交互。我使用帶有模塊的 PS/2 鍵盤將輸入信號解碼為 8 位。


          大功告成!


          來源:機(jī)器之心編譯   編輯:杜偉

          版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除。

          參考鏈接:
          https://riscv-association.jp/en/2021/04/filip-szkandera/
          https://hackaday.io/project/178826-pineapple-one/details
          https://www.youtube.com/watch?v=NUAVKNVrPh0&t=16s
          https://spectrum.ieee.org/geek-life/hands-on/build-a-riscv-cpu-from-scratch
          ·················END·················



          推薦閱讀

          ?   硬核圖解,再填猛將!?   Python實(shí)現(xiàn)的導(dǎo)彈跟蹤算法,燃!?   看書vs視頻,我的一點(diǎn)小建議,共勉!



          瀏覽 59
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本一级片在线 | 波多野结衣一区二区三区在线 | 青草草在线视频 | 免费在线日韩 | 夜夜骚av.一区二区三区 |