学霸一年学完计算机,复旦本科学霸,一年时间在游戏中造出一台计算机

本文主要是介绍学霸一年学完计算机,复旦本科学霸,一年时间在游戏中造出一台计算机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

3634b4b5a08ab7a4f6eda5f9e0ab5a01.gif

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

单枪匹马造出一个CPU乃至完整的电脑需要多长时间?有位大牛在《我的世界》游戏里用实际行动回答了这个问题:可能要花费一年多。

935eef3e80a5643552c310e0df15ef60.gif

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

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

这台计算机能做什么

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

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

gif;base64,R0lGODlhAQABAIAAAP

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

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

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

gif;base64,R0lGODlhAQABAIAAAP

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

gif;base64,R0lGODlhAQABAIAAAP

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

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

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

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

我并不是计算机专业

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

gif;base64,R0lGODlhAQABAIAAAP

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

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

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

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

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

最后,膜拜,仰望大佬~

这篇关于学霸一年学完计算机,复旦本科学霸,一年时间在游戏中造出一台计算机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/315975

相关文章

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

游戏闪退弹窗提示找不到storm.dll文件怎么办? Stormdll文件损坏修复技巧

《游戏闪退弹窗提示找不到storm.dll文件怎么办?Stormdll文件损坏修复技巧》DLL文件丢失或损坏会导致软件无法正常运行,例如我们在电脑上运行软件或游戏时会得到以下提示:storm.dll... 很多玩家在打开游戏时,突然弹出“找不到storm.dll文件”的提示框,随后游戏直接闪退,这通常是由于

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

go中的时间处理过程

《go中的时间处理过程》:本文主要介绍go中的时间处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 获取当前时间2 获取当前时间戳3 获取当前时间的字符串格式4 相互转化4.1 时间戳转时间字符串 (int64 > string)4.2 时间字符串转时间

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

golang float和科学计数法转字符串的实现方式

《golangfloat和科学计数法转字符串的实现方式》:本文主要介绍golangfloat和科学计数法转字符串的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望... 目录golang float和科学计数法转字符串需要对float转字符串做处理总结golang float