自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

手工焊接,二進制寫碼,B站Up主手搓CPU爆火出圈

新聞 前端
CPU是怎么執(zhí)行0101的呢?就為了這點好奇心,一位B站Up主自己動手焊了個CPU……

  在 B 站當 UP 主,門檻是出了名的高。

有人會用 AI 還原朱元璋,有人能造自動駕駛自行車,還有人會手搓 CPU……

從外形來看,這個 CPU 采用了先進的「3D 堆疊」技術(shù)(手動狗頭),全部由三極管、二極管和電阻焊接而成。

具體來說,UP 主林乃衛(wèi)大約用了 1000 多個三極管、2000 多個二極管和 2000 多個電阻,焊點達到上萬個,網(wǎng)購材料大約花了 1000 多塊錢。

為了打造這款 CPU,UP 主花了大半年的時間逐點焊接,人送外號「焊武帝」。

由于其體型巨大,網(wǎng)友開玩笑說,「這是當年的巨型計算機啊?!惯B作者本人也調(diào)侃說,它的制程是 2.54mm,「比先進的 3 納米大了將近 1 百萬倍。」

不過,比外形更古樸的是 UP 主的編程方式:由于指令集和架構(gòu)都是自主開發(fā)的,還沒有適配任何編程語言,因此他選擇采用二進制編程,也就是原始的機器語言——0 和 1。

這個「龐然大物」運行起來的效果也很炫酷:

UP 主用自制 CPU 運行流水燈效果,即讓小燈挨個亮起來。

有人說,「我看不懂也沒怎么震撼,但這就是我小時候想象中的『科學家』,稀奇古怪的儀器和五顏六色的燈泡,拿各種五顏六色的液體互相勾兌,然后產(chǎn)生各類超強的氧化反應(yīng)?!?/p>

我們知道,要自制這么一個 CPU,除了熟練掌握數(shù)電、模電、匯編等基礎(chǔ)知識,還要具備超強的動手能力和毅力。其過程之艱辛普通人可能難以體會。那么,林同學為什么要費這么大工夫去做呢?

「在寫代碼時要分析可執(zhí)行文件中的二進制,那時候在想,CPU 是怎么執(zhí)行這一串 0101 的呢?結(jié)合數(shù)電課程,猜測大概是那么回事,就想試一試。當初想用門級電路來做的,但是感覺難度不是很高,想整個從零開始理解透,就從最基礎(chǔ)的模擬電路開始搭建了?!沽滞瑢W告訴機器之心。

當然,當 UP 主只是林同學的愛好之一,他的本職工作是 php/.net / 安卓 APP 程序員。他表示自己喜歡學習各種新科技,對高難度的技術(shù)有較強的動力去學習,有許多新奇的創(chuàng)意,卻沒資金去實現(xiàn)。在這次 B 站大火之后,希望林同學能有更多的資金去實現(xiàn)自己的創(chuàng)意。

一位 B 站 UP 主的手搓 CPU 之路

雖然打造這款 CPU 只用了半年,但林同學透露,它的原理圖幾年前就畫好了,大概是這樣:

手工焊接,二進制寫碼,B站Up主手搓CPU爆火出圈

圖源:https://tieba.baidu.com/p/7432882849?see_lz=1

畫完圖,Up 主首先驗證了門電路。這一步屬于理論驗證,是必要的步驟。

手工焊接,二進制寫碼,B站Up主手搓CPU爆火出圈

圖源:https://tieba.baidu.com/p/7432882849?see_lz=1#140122397516l

做好驗證之后,手搓的部分就正式開始了。CPU 通常由通用寄存器組、運算器、控制器和數(shù)據(jù)通路等部件組成。Up 主首先就從寄存器做起。

他先造了一個移位寄存器——一種在若干相同時間脈沖下工作的以觸發(fā)器級聯(lián)為基礎(chǔ)的器件,用 Up 主的話說就是數(shù)據(jù)從一個方向進,一個時鐘周期移動一個位置,最后從另一個方向出。最終 Up 主的成品是 6 位的移位寄存器:

有網(wǎng)友提問:「為什么移位寄存器不用現(xiàn)成的芯片?」Up 主表示「為了樂趣」。

手工焊接,二進制寫碼,B站Up主手搓CPU爆火出圈

圖源:https://tieba.baidu.com/p/7432882849?see_lz=1#140122397516l

接著,Up 主手搓的第二個 CPU 部件是程序計數(shù)器(PC)。PC 是控制器的一部分,涉及的功能較多,也是手搓階段最復雜的一個模塊。CPU 重啟時要將它的計數(shù)清零,工作狀態(tài)下要借助 PC 實現(xiàn)挨個字節(jié)讀取指令和數(shù)據(jù),每操作一次,計數(shù)自動加一,同時還要實現(xiàn)直接跳轉(zhuǎn)、調(diào)用函數(shù),函數(shù)返回的功能,因此 PC 的構(gòu)建過程比移位寄存器要復雜和困難得多。

尤其是 Up 主采用「純手搓」——焊接的過程也會遇到一些虛焊的麻煩,找出問題并解決花費了 Up 主大量時間和精力。其中有一次一個二極管焊反了,Up 主排查了 3 天。

不過,最后的成品很優(yōu)秀,上電測試也成功通過:

CPU 中還有兩個關(guān)鍵的部分——ROM 和 RAM,不過這兩個部分手搓不太現(xiàn)實,Up 主選擇用 hm628512 來組裝 ROM 和 RAM。

然后 Up 主開始構(gòu)建指令譯碼器,用來解析 CPU 指令以運行,它也是控制器的一部分。

最后還有兩個要組裝的部件:運算器(ALU)和通用緩存。

至此,CPU 中寄存器、控制器、運算器等主要部件已經(jīng)完備,一個手工焊接的 CPU 就基本做成了!

搓出來了,怎么運行?

由于這個 CPU 是 Up 主自己手搓的,全部是由二級管、三極管和電阻焊接而成,因此沒有現(xiàn)成的指令集和編程語言能夠使用。那這樣的 CPU 怎么跑起來?回歸最原始的二進制吧。

二進制在計算機工作機制中屬于最底層的基礎(chǔ)原理,對于計算機專業(yè)的同學來說并不陌生,但用二進制直接編程就不是所有人都能掌握的技能了。UP 主正是借助二進制編程讓手搓的 CPU 跑了起來。

有了二進制碼,怎么輸入機器?Up 主自己上手「扣」代碼,真 · 手敲代碼。目前有三條指令,包括內(nèi)存賦值指令、內(nèi)存地址左移指令和跳轉(zhuǎn)指令。Up 主編寫了一個流水燈的程序,用于測試。

這下指令也輸入了,CPU 能跑出結(jié)果嗎?

出現(xiàn)了一些小問題,流水燈有時不能正常亮起。別擔心,有 bug 是常有的事,那 debug 一下吧。

Up 主很快就找到了 bug,是「有個地方斷開了」。修復之后為了讓運行效果更明顯,Up 主又重新寫了一遍二進制代碼,將 CPU 調(diào)整為跳轉(zhuǎn)到 0X00FF 處運行。

再手扣一遍程序,結(jié)果是運行成功,流水燈正常亮起,完全沒有問題。

組件完整,能運行程序,這個「爆肝」的手搓項目終于大功告成。

網(wǎng)友留言道:「馮諾依曼大呼內(nèi)行」。

在完成這個 CPU 的基礎(chǔ)原型之后,林同學下一步打算繼續(xù)完善它的功能,讓它可以運行更加復雜的程序。

 

責任編輯:張燕妮 來源: 機器之心Pro
相關(guān)推薦

2021-08-02 10:40:45

機器人人工智能算法

2021-11-10 09:15:00

CPU01 二進制Linux

2009-05-26 13:39:11

F#Visual Stud

2018-10-22 14:37:16

二進制數(shù)據(jù)存儲

2009-02-27 09:37:33

Google二進制代碼

2022-10-31 08:02:42

二進制計算乘法

2020-03-23 10:43:46

AI 數(shù)據(jù)人工智能

2009-12-16 10:49:42

Ruby操作二進制文件

2017-04-11 10:48:53

JS二進制

2022-07-26 13:00:01

安全符號源代碼

2009-08-12 18:06:53

C#讀取二進制文件

2010-10-13 15:45:23

MySQL二進制日志

2010-06-09 13:02:29

MySQL啟用二進制日

2018-03-19 09:53:45

2011-05-25 14:10:38

浮點數(shù)

2013-04-28 15:37:35

JBoss

2013-07-29 11:19:16

iOS開發(fā)iOS開發(fā)學習FMDB更新二進制圖片

2024-02-01 09:04:12

2022-07-18 09:01:15

SwiftApple二進制目標

2021-01-14 09:40:54

漏洞macOS屬性表文件
點贊
收藏

51CTO技術(shù)棧公眾號