在《我的世界》里从零打造一台计算机有多难复旦本科生大神花费了一年心血博客

一块小小的CPU里有多少个晶体管?几十亿个。

这篇造计算机的教程一经转载就在知乎上火了。

这并不是一篇游戏攻略,而是来自复旦大学的季文瀚,写的一篇课程论文。他在大二时就有了大胆的设想,经过一年的精心营造,建起了一个计算机雏形,取名Alpha21016。

虽然它不能与现实中的计算机相比,只能实现一些简单的功能,但这台计算机体积惊人,光看它复杂的结构就已经能感受工程量的巨大。

有网友感叹,发课程论文可惜了,简直可以发学术论文啊。

季文瀚计算机使用的是哈佛结构,而非更常见的冯·诺依曼结构。程序储存器和数据储存器分开放置。程序储存器1kb,数据储存器0.5kb。

它可以实现各种函数运算:加减乘除、三角函数还有矩阵运算。它包含一个16bit的CPU和一个32bit的浮点运算单元 (FPU) 。

从硬件上看,它是个超大规模集成电路,逻辑门总数大概在5万-10万门之间。光是存储器堆叠起来就有8层。

要造出这样一台计算机,数字电路、微机原理、汇编语言、编译原理都不能少。想想你挂过哪几门课,从学会到熟练运用就更难了。

有了专业知识的支持,就能将计算机拆解成基本的部件。

我们都知道计算机的基础是数字电路,数字电路的基础是“门”,季文瀚用游戏里基本的“红石电路”搭建出了逻辑门。

从逻辑门出发,再搭建出组合电路、时序电路、触发器,有了这些就能组成CPU的一些基本单元,最终造出整个计算机。

现实世界中,晶体管是数字电路的基础;在《我的世界》中,红石电路是构成复杂电路的基本单元。

红石电路玩家,只用火把和方块,就能造出基本的逻辑门:或门和非门。或门和非门的组合可以造出与门、异或门等任意逻辑门。

但仅仅知道怎么制造逻辑门离造出计算机还很远,可能大致相当于造出汉字笔画到写出《红楼梦》的距离。

季文瀚先给自己的CPU架构画了一个草图:

其中每一个方框都代表一个或若干个硬件单元,小一点的大约一两百个门电路,大的有几千个门电路。这个密密麻麻的部分,也只是架构的右半部分而已。

知道了CPU的基本架构,再按照架构图分别造出每个部分,比如CPU的重要模块“算数逻辑单元”(ALU)和“指令寄存器”(IR),工程量很大。

算数逻辑单元还能进一步拆解,它的加法器由数个全加器组成,上面基本的逻辑门可以组成加法器中最基本的全加器 (下图)。

全加器也是计算机的一个核心部件。

同时,《我的世界》还提供的基于活塞机械的断路,用信号控制电路的通断,也就是继电器。利用继电器和逻辑门的组合可以造出存储器。

大概是因为太复杂,季文瀚一开始也没想直接搭个计算机。

最初,他的目标是造出一台16 bit的简单计算器。

但做到一半,他就觉得可以实现更复杂的东西,于是想改成单片机:这是具有“图灵完备性”,可以执行一切计算机程序的简单计算机。

他规划了指令集架构,储存器架构,以及指令发射方式等等。

后来,触发器、可读写储存器、缓冲队列等等重要电路,季文瀚都设计成功了。

有了这些,少年又做了更雄伟的计划:做个16 bit的CPU。

CPU旁边,还有一个包含超越函数的单精度32 bit浮点处理器 (FPU) 。

这里,计算器作为片外系统,并没有被抛弃。季文瀚把16 bit计算器,改成了完全时序逻辑电路控制、且有溢出判断的计算器——这在Minecraft红石电路玩家里,已是前所未有。

它借用CPU的ALU部分进行运算,并经过总线传输数据。

CPU和计算器的大部分硬件,都在这张表格里。

表上的40个硬件,除了指令译码器、指令发射端、异常中断响应没有做完,其他都做好了。还有一些小的硬件单元没有列出来。

目前,CPU的ALU、主储存器、和寄存器等EU部分已经完工,内部环状总线已竣工,CU部分,也就是最繁琐的部分,还没有完工。

季文瀚说,虽然还没完全竣工,但CPU已经可以执行许多种机器指令 (以MOV为主) :通用寄存器赋值,按字/字节+立即数/间接/直接寻址。

其中,最容易用肉眼感受到威力的,还是借用CPU的ALU完成运算的计算器。

他在视频里展现了加减乘除,正余弦,以及平方根的计算。

从养着小猪的地方走楼梯下来,就是计算器的所在地了。这里有两排按钮,还有显示屏,如上图。

屏幕后面,可以看到运转的电路。

先做加减乘除。比如加法:

减法也是同理。只不过,负号和减号在这里分成了两个按钮。

乘法和除法的运算量比较大:三位数乘三位数,大概需要20秒;除法更慢一些,电脑还会卡。

下图就是除法,因为打了反除号 (\) ,所以被除数在右边。左下是商,右下是余数。

空间限制了算力,所以计算器要有溢出判断,超过±32627的范围就会报错,显示“E”。

不论是输入的数还是计算结果,超出范围都会报错:

除以“0”,也会报错。

注意,计算机用二进制来计算,算好之后还要从二进制转成十进制,才是最终的答案。这里用到了BCD/BIN转换算法,把二进制BIN码,转成十进制BCD码。

四则运算做完了,还有正余弦,用的是Cordic旋转迭代算法:

需要多次迭代,所以运算比较慢,大概花了两分钟。

相比之下开根号就快许多,用的是快速平方根算法:

20秒 (就) 开好了。

计算能力就展示到这里。

而机智的你可能已经也感受到了,显示器对于一台计算机有多重要。那么:

游戏空间太狭窄,造显卡是不现实的:2×2个红石灯,就是游戏能控制的最小像素了。

所以,季文瀚做了字符显示器。

首先,用七段显示器来表示数字。

比如,“4”就有左上、右上、中、右下,一共四根小棒。

每根小棒又由三个方块组成。把这些方块的活塞往回抽,就显示出凹陷的“4”了。

而每个十进制数,都可以对应二进制的四位数,比如3是0011,9是1001。输入二进制数,屏幕就能显示成十进制。

数字搞定了,还有其他字符。季文瀚用了自己设计的缩减版ASCII码,只有不到64个字符:

给每个字符编个号:0,1,2,…,63。每个号码,都可以转成二进制数00000-111111。

然后,显示出来长这样:

打开夜视,萤火一般,美不胜收。

其实,这些字是“印”在了显示器的键盘上,白天长这样:

也就是说,计算机有了,显示器有了,键盘也有了。

而这样的杰作,居然来自一位“业余选手”。

现在来回顾一下,从逻辑门到计算机,都要经历什么:

或门,非门

→与门,异或门

→全加器,信号长度转换器,多态选择器,储存器单元,译码器单元,求补码单元,移位器单元

→可读写储存器,译码器,加法器,移位器,时钟发生器

→加减法器,乘法器,除法器,可读写储存器阵列,寄存器,程序计数器

→总线,ALU,CU

→计算机

令人意外的是,造出这项复杂工程的季文瀚,是复旦大学2011级生命科学学院的本科生,没有受过系统地计算机科学专业教育。他说,看到国外玩家的作品很感兴趣,才自学了一些专业课。

大二便启动了Alpha21016计算机的开发,作为《网络虚拟环境与计算机应用》这门课的项目来做的。

从他对技术细节的解读来看,那时的季文瀚,已经硬件和软件上拥有无比充分的准备。

普通人的话,可能了解逻辑电路的基础。普通红石玩家的话,可以把逻辑电路的基础知识,用来搭建简单或复杂的红石电路。

高阶红石玩家,也曾经在季文瀚的项目开始之前,造出过计算器。

但制造一台计算机,并没有多少人敢想。季文瀚不但想到,还用了一整年去实现,几近完成。

毕竟,如果有个容量惊人的大脑,总归要拿来用的吧。

技术博客原文传送门:

FPGA原理和结构

本书由日本可重构领域专家团队撰写,是一本讲解FPGA原理的书。前5章从FPGA的相关概念入手,简明又严谨地阐述了FPGA硬件构成和CAD工具的内部原理等理论基础,有助于读者快速入门,也有助于读者了解如何优化自己的电路代码,获得更高的性能。第6章分析了FPGA的优势,系统地介绍适用于FPGA开发的“硬件算法”,有助于读者利用FPGA更高效、更有针对性地解决问题。第7章和第8章则讲解了FPGA的技术动态和应用案例。

我的世界少儿趣味编程

通过不断思考、不断尝试、不断完善,培养孩子逻辑思考能力,提升独立解决问题的能力。书中精选了编程学校课堂上超受欢迎的内容,让孩子爱不释手,比如搭建墙壁/拆除墙壁/挖隧道/建台阶/建造旋转楼梯/平整地面/农作物收割机器人/伐木机器人……

一个64位操作系统的设计与实现

本书讲述了一个 64 位多核操作系统的自制过程。此操作系统自制过程是先从虚拟平台构筑起一个基础框架,随后再将基础框架移植到物理平台中进行升级、完善与优化。

30天自制操作系统

这是一本兼具趣味性、实用性与学习性的书籍。作者从计算机的构造、汇编语言、C语言开始解说,让你在实践中掌握算法。在这本书的指导下,从零编写所有代码,30天后就可以制作出一个具有窗口系统的32位多任务操作系统。

大家好,这里是程序员晚枫,全网同名。熟悉我的朋友都知道,我的账号内容80%都是关于开源项目的功能文档,剩下20%是关于开发这些功能的周边。今年开始邀请了小伙伴们参与开源项目的开发和维护,今天就以potx-cloud为例,讲一下怎么成为一个Python库的发布者。potx-cloud是什么potx-cloud是专门用来调用腾讯云平台的工具库,目前的核心功能是:1行代码,实现文字识别。pi

一、异或运算的基础:从二进制到逻辑1.1 什么是异或运算?异或运算(XOR)是一种位运算,作用于二进制数。它的基本规则非常简单:对于两个二进制位,异或运算的结果为1当且仅当这两个位不同;否则,结果为0。可以用真值表来表示:输入A输入B输出A^B000011101110在编程中,异或运算通常用^符号表示。例如,在C、Python、Java等语言中,a ^ b表示对变量a和b进行逐位异或运算。1.2

作为一名程序员,你一定遇到或亲自写过这样的代码。有人将它形象的形容为shi山,或者被戏称为“面向保就业编程”。以下面这个代码为例,其中的问题也显而易见,当越来越多的条件判断时,代码会变得非常臃肿,难以维护。 String mediaType = "blogger"; if ("lxf".equals(mediaType)) {

在《我的世界》里从零打造一台计算机有多难?复旦本科生大神花费了一年心血

计算机本科生与软考:挑战与机遇并存随着信息技术的迅猛发展,计算机软件行业对专业人才的需求日益增长。作为计算机本科生,我们不仅要在校园内掌握扎实的专业知识,还需要通过各种途径提升自己的实践能力。其中,软考(计算机技术与软件专业技术资格(水平)考试)无疑是一个极具挑战性的平台,它既是对我们知识水平的检验,也是我们展示实力的舞台。软考是由国家人力资源和社会保障部、工业和信息化部联合主办的国家级考

————转载的文章,写的很好,大家都在强调算法,看来学好算法真的很重要————本人今年北软研究生毕业,本科是35所示范性软院之一,在毕业之际,回顾软院的7年学习生活,很感慨,写点东西给软件学院的师弟师妹们。今年软件工程被提升至一级学科,没有挂在计算机科学之下了,而且软件学院开始招收工程博士生了,真是可喜可贺。我读软件学院本科的时候,软院才刚成立不久,35所示范性软院之一,那个时候想找个师兄问一问大

自考计算机本科的难度一直以来都是众多自考生关注的焦点。在当今信息化社会,计算机技术日新月异,自考计算机本科无疑成为许多人提升自我、追求职业发展的重要选择。然而,这条学习之路究竟有多难走?本文将从多个角度探讨自考计算机本科的难度,并为广大自考生提供一些建议。首先,从课程内容上来看,自考计算机本科的课程体系相当庞大且复杂。它涵盖了计算机基础、操作系统、数据结构、算法设计、数据库原理、计算机网络、软

计算机本科生考计算机软考:挑战与机遇并存在当今这个信息化、数字化的时代,计算机技术无疑是最为火热、最具前景的领域之一。对于计算机专业的本科生而言,除了日常的学习和实践,通过参加计算机软件水平考试(简称软考)来检验和提升自己的专业能力,也已成为越来越多学子的选择。软考,作为国家级的计算机技术与软件专业技术资格(水平)考试,不仅在国内具有很高的认可度,而且在国际上也逐渐受到重视。它涵盖了从基础

随着信息技术的迅猛发展,计算机行业已成为当今社会最热门、最具发展潜力的领域之一。对于广大本科生而言,想要在这个竞争激烈的行业中脱颖而出,除了扎实的专业知识外,还需要具备一定的实践能力和权威认证。计算机技术与软件专业技术资格(水平)考试,简称软考,正是为广大计算机爱好者提供了一个展示自己才能的平台。本文将针对本科生报考计算机软考的相关问题进行深入探讨,帮助广大学子更好地了解软考、备考软考。一、软

以下这是我自己对计算机本科生职业素养的理解和总结:     第一:学习能力。现有能力和成就,做出

**本科生报考计算机软考要求深度解析**随着信息技术的迅猛发展,计算机软件行业日益繁荣,对专业人才的需求也愈加旺盛。计算机技术与软件专业技术资格(水平)考试,简称软考,作为国家级的考试,为行业提供了权威的评价标准。对于本科生而言,报考软考不仅是提升自我能力、拓宽职业道路的重要途径,更是对所学知识的一次全面检验。那么,本科生报考计算机软考有哪些要求呢?本文将从多个角度进行深入解析。一、基本资

一、计算机本科生的选择在当今信息化的时代,计算机技术日新月异,越来越多的青年选择攻读计算机专业。他们中的许多人,不仅拥有扎实的计算机理论基础,还怀揣着对技术的热情和对未来的憧憬。然而,在这些计算机本科生中,有一部分人做出了与众不同的选择——他们选择投身军营,将自己的技术与青春献给祖国。对于拥有计算机本科学历的青年来说,当兵不仅意味着一种责任与担当,更是对个人能力的一种全面提升。在军队中,

在当今信息化时代,计算机技术的重要性日益凸显,而计算机等级考试作为衡量个人计算机应用能力的一种标准,备受广大学子关注。尤其是本科生,作为高等教育的主体,他们面临着是否需要参加计算机一级考试的抉择。本文将从多个角度探讨这个问题,帮助本科生明确自身需求,作出明智的选择。首先,我们需要明确计算机一级考试的性质。计算机一级考试主要考察的是计算机基础知识和应用能力,包括计算机软硬件基础、操作系统、办公软

这篇内容将从整体上介绍打造 AI Agent 的七个步骤,分别是需求梳理、软件选型、提示工程、数据库、构建 UI 界面、测试评估和部署发布。 梳理工作流 第一步,我们需要做的工作就是梳理需求。 首先,我们需要明确,做这个 AI Agent 是为了帮我们解决什么问题? 如果你是一位自媒体从业者,可能会

【本科生报考计算机软考难吗】在当今信息化时代,计算机技术日新月异,对于许多本科生而言,掌握一定的计算机知识和技能已成为求职、升学的重要砝码。计算机技术与软件专业技术资格(水平)考试,简称软考,作为国家级的计算机技术与软件专业技术水平考试,自然吸引了大量本科生的关注。那么,本科生报考计算机软考难吗?这个问题涉及多个方面,下面我们就来一一探讨。首先,从考试内容来看,软考涵盖了计算机科学与技术的

本文会带各位从零实现一个简单的地图引擎,来帮助大家了解`GIS`基础知识及`Web`地图的实现原理。

1个月前,写了篇管理文章,团队管理:空降,接管测试团队看了那篇空降接管团队的文章,你至少已经知道如何带团队 。今天,这篇,聊聊:怎样组建团队、招什么样的人、需要什么能力、招聘逻辑是怎样的 。01招聘启动之前,先梳理岗位画像,需要具备什么能力,加分项是什么,职责是什么,能产生什么价值,去哪可以招到这样的人,大概薪资预算等。很多岗位,迟迟招不到合适的人,多半是...

前言组件库,一套标准化的组件集合,是前端工程师开发提效不可或缺的工具。业内优秀的组件库比如 Antd Design 和 Element UI,大大节省了我们的开发时间。那么,做一套组件库,容易吗?答案肯定是不容易,当你去做这件事的时候,会发现它其实是一套体系。从开发、编译、测试,到最后发布,每一个流程都需要大量的知识积累。但是当你真正完成了一个组件库的搭建后,会发现收获的也许比想象中更多。希望能够

计算机中数值的二进制表示和运算存在有符号与无符号的差异。在存储层面,同一二进制位模式(如0xFFFFFFFF)可解释为有符号的-1或无符号的4294967295。运算时,CPU通过不同标志位(CF/OF)区分溢出类型:无符号运算关注CF(进位),有符号运算关注OF(溢出)。比较指令CMP根据操作数类型产生不同标志位组合,影响条件跳转。乘除法分MUL/DIV(无符号)和IMUL/IDIV(有符号),移位操作SAR(算术右移)保持符号位而SHR(逻辑右移)补零。数据扩展也分有符号(CBW/CWD)和无符号(MO

Graph 定义与描述分析 请关注:阿呆-bot 概述 本文档分析 spring-ai-alibaba-graph-core 模块中 Graph 的定义和描述机制,包括入口类、关键类关系、核心实现代码和设计模式。 入口类说明 StateGraph - Graph 定义入口 StateGraph ...

(搓手):呃...主要用了Spring Boot做后端,数据库是MySQL+Redis缓存,消息队列用Kafka处理订单异步通知,前端用了Vue...AI这块嘛...我们用了百度AI的API做客服,没怎么自己搞。(注:文中水货程序员小曾的AI知识仅涉及OpenAI API调用,实际生产需掌握RAG、Embedding向量数据库等深度技术,建议学习Spring AI官方文档及Milvus向量检索案例。:假设你要用Flink实时计算用户下单行为,然后触发个性化推荐,你会如何设计?

THE END
0.架构与工具图书推荐经典书籍畅销书清单异步社区为您推荐架构与工具图书清单、架构与工具经典图书、架构与工具畅销书,从入门到进阶是您自学架构与工具的必读好书。jvzq<84grwhjv7hqo1hpqtxAeqjf?W75988'v‚ug?wyiw/xgs?6
1.少儿编程学习Scratch趣味编程[程序100%原创]Minecraft我的世界2D xxb 01-02发布于:广东 作品简介:↑万↓年↑一↓更 开源! 100%纯原创2D我的世界!!! 98%高度还原2D我的世界!!! 所有引擎均为原创!!! 重做村庄生成! 重做光源引擎! 加了掉落物! 加了物品栏! 加了世界聊天(可以发图片)! 我真的服了,什么《存在违规图片》???就被下jvzquC41o/}ptui0zkgpoj|cpi4dqv4ockt0r{tlgez0WARH88