世界超强完美DIY 电子奇才五年全手工制作CPU

2015-07-08 极客范

(点击上方公众号,可快速关注我们)

在如今越来越靠程序化、流水线作业来完成生产的制造业中,想找一件手工打造的产品,真是越来越难了。

好在当今社会中,还是有一些强人在孜孜不倦的在完成着心中的“完美

DIY”梦想。因此也使我们多了一些大开眼界、崇拜和向慕的机会。

这个神奇的Magic-1,就是由一个名叫Bill Buzbee的家伙手工打造的CPU。而Magic-1也是基于这个CPU制造的计算机的名字。有意思的是,“制作Magic-1的念头是在一次午餐中冒出来的”,Buzbee说。

Buzbee是一位编译器作者。但他为自己不熟悉CPU的实际工作而感到郁闷。因此想到了亲自动手来作一个CPU。Buzbee在大学时候没有学过任何电子类的课程,而且对于晶体管、电阻、电容等也只是一知半解。不过他的朋友Ken想到有一本老杂志曾经介绍过如何使用TTL集成电路来制作极其简单的CPU,并推荐他去看一看。一周后,Buzbee找到了这些文章,并全部读了一遍。然后在下一次午餐上,Buzbee对Ken说起决定自己打造一个CPU。Ken说:“为什么不呢?”于是,Bill Buzbee的Magic-1项目拉开了序幕。

纯手工CPU制造编年大史记

  • 2001年12月6日 Buzbee开始写项目日志,并为自己制定了一张艰难但还算乐观的日程表

  • 2001年12月18日 完成错误处理和中断机制的基本设计

  • 2001年12月29日 完成微代码的第一轮设计

  • 2002年1月6日 完成了Magic-1模拟器,可以对调用/返回指令序列进行跟踪

  • 2002年1月8日 模拟了Fibonacci函数,并丰富了软件接口约定

  • 2002年1月13日 Magic-1汇编器(qas)成形

  • 2002年1月18日 决定是选择大尾数法还是小尾数法表示整数的字节顺序,最终选择了大尾数法

  • 2002年2月28日 在模拟器中完成了页面错误机制

  • 2002年3月9日 决定使用普通电线来进行连线

  • 2002年6月3日 对指令集架构进行了意义重大的改变

  • 2002年6月4日 用C语言编写了Fabonacci程序并编译为Magic汇编程序

  • 2002年6月22日 改用分立的数据和代码地址空间

  • 2002年6月25日 设计用于多进程的上下文环境切换

  • 2002年7月12日 完成对微代码的重写工作

  • 2002年8月13日 放弃对rotate指令的支持

  • 2002年9月11日 上了Gil Smith的一堂电子电路课程

  • 2002年9月22日 从eBay上买了板材和外壳

  • 2002年的其他日子 向Ken Sumrall请教如何使用寄存器,从他那里学到了Ohm规则

  • 2003年3月30日 从Jhon Doran的D16/M中得到了灵感,完成了ALU/寄存器板的架构

  • 2003年4月13日 完成控制板的架构

  • 2003年4月14日 思考前面板的架构

  • 2003年5月3日 第一轮架构设计完毕

  • 2003年5月6日 将构建环境从Linux一直到Windows

  • 2003年5月16日 构思新的Magic-1模拟器

  • 2003年5月27日 在新的模拟器上成功运行了Fibonacci程序

  • 2003年6月3日 完成了新的汇编器功能

  • 2003年6月21日 Magic架构验证和测试用例达到了100%覆盖率

  • 2003年6月23日 Alistair Roe通过email提出了Magic-1外壳的构想

  • 2003年8月3日 将LCC(C编译器)一直到了Magic上

  • 2003年8月10日 在模拟器上成功地实现了Fibonacci程序的C语言版本 (这一天是Buzbee的生日)

  • 2003年8月27日 从David Conroy那里学到了信号完整性

  • 2003年9月18日 决定使用普通的带皮电线进行连接(奇怪,前面已经决定一次了)

  • 2004年1月3日 完成了全部的设计工作,开始制作

  • 2004年1月18日 Magic-1有了第一次心跳

  • 2004年1月26日 前面板完成

  • 2004年2月9日 内存板完成

  • 2004年2月20日 EPROM子板完成

  • 2004年2月26日 设备板完成

  • 2004年3月7日 微代码序列成功运转

  • 2004年3月9日 执行了第一条指令

  • 2004年3月19日 控制板完成

  • 2004年4月8日 尝试发布前期的工作

  • 2004年4月12日 ALU/寄存器板完成;同日被告知,发布尝试失败

  • 2004年4月13日 Magic-1成功运行了Fibonacci程序!

  • 2004年4月25日 Dave Conroy的测试会话发现了不真实的内存碎片

  • 2004年5月3日 Magic-1能“说话”了

  • 2004年5月8日 运行“Sieve of Erasthones”基准

  • 2004年5月16日 完成了IDE接口,Alistair Roe完成了外壳设计

  • 2004年7月23日 发布基本架构

  • 2004年9月12日 用户模式程序可以工作

  • 2004年9月15日 运行“Dhrystone”基准

  • 2004年9月22日 使用copy-on-write实现了fork()

  • 2004年10月23日 Magic-1的Dhrystone得分达到了384(0.25MIPS)

  • 2004年10月31日 运行Colossal Cave Adventure

  • 2005年4月9日 Alistair Roe设计的外壳到货

  • 2005年5月13日 Magic-1的硬件设计完毕

镂空的顶板,可以看到内部的照明蓝光,非常绚丽

学过数字逻辑和数字电路的朋友一定知道,通过使用TTL门电路,的确是能够实现一个CPU的;笔者在大学时也曾在软件上使用74系列芯片模拟过功能非常简单 的CPU。然而,Buzbee朋友搞得这个家伙却是一个功能完全的CPU,我不知该如何形容它的功能,我本想说“麻雀虽小,五脏俱全”,但是……

这款“家酿”CPU可以支持完整的硬件地址转换、内存影射IO和DMA,并且支持多进程,主频“高达”3MHz;该CPU采用8位地址总线,每个进程拥有128K地址空间,其中包括32个2K的数据页和32个2K的代码页,这些地址影射到22位的物理地址空间中,如果算上外部设备的地址空间就是23位物理 地址空间。

怎么样?够强的吧?这还不算什么,这个Buzbee还用这个CPU组装了一台微型计算机,名字就叫Magic-1,这台计 算机包括两个串口和一块20M的1.3吋硬盘和另一块30M硬盘。最让人“乍舌”的事,这位朋友还将这台计算机做为一个Web服务器,同时支持 Telnet会话(虽然只支持一个会话)。哦,还有,为了让这个系统能够跑起来,Buzbee还为它准备了一个C编译器!

ALU/寄存器板的元件面

ALU/寄存器板的连线面

控制板的元件面

设备板的元件面,中间有一块锂电池

看看背面连线的局部图

出处:百度文库

链接:http://wenku.baidu.com/view/e4874ad8ce2f0066f5332280

世界超强完美DIY 电子奇才五年全手工制作CPU的更多相关文章

  1. 用三维的视角理解二维世界:完美解释meshgrid函数,三维曲面,等高线,看完你就懂了。...

    完美解释meshgrid函数,三维曲面,等高线 #用三维的视角理解二维世界 #完美解释meshgrid函数,三维曲面,等高线 import numpy as np import matplotlib. ...

  2. 实验五  用PS制作图文合成海报

    实验五  用PS制作图文合成海报 [实验目的] ⑴.熟悉PS软件基本操作 ⑵.学会用PS制作内容较丰富的海报式广告 [实验条件] ⑴.个人计算机一台 ⑵.个人计算机中预装Windows7操作系统和浏览 ...

  3. 【Unity3D游戏开发】NGUI之多分辨率下完美分布式协同开发 (五)

    NGUI多分辨率下完美分布式协同开发:不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 NGUI多分辨率下完美分布式协同开发不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 开发问题 原因分析 ...

  4. 《CSS世界》读书笔记(十五)

    <!-- <CSS世界>张鑫旭著 --> 字母x——CSS世界中隐匿的举足轻重的角色 在各种内联相关模型中,凡是涉及垂直方向的排版或者对齐的,都离不开最基本的基线(baseli ...

  5. 【GoLang】golang 的精髓--流水线,对现实世界的完美模拟

    直接上代码: package main import ( "fmt" "runtime" "strconv" "sync" ...

  6. golang 的精髓--pipeline流水线,对现实世界的完美模拟

    https://blog.golang.org/pipelines https://www.cnblogs.com/junneyang/p/6215785.html 简介 Go语言的并发原语允许开发者 ...

  7. 我的第五个网页制作:pre、html转义、abbr标签的使用

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 操作系统学习笔记(五)--CPU调度

    由于第四章线程的介绍没有上传视频,故之后看书来补. 最近开始学习操作系统原理这门课程,特将学习笔记整理成技术博客的形式发表,希望能给大家的操作系统学习带来帮助.同时盼望大家能对文章评论,大家一起多多交 ...

  9. 极客DIY:开源WiFi智能手表制作

    如果你喜欢拥有一款属于自己的无线手表,那么请不要错过,相信阅读完这篇文章对你会很有帮助. 硬件规格 ESP8266(32Mbit闪存) MPU-9250(陀螺仪传感器)以及 AK8963(内置磁力计) ...

随机推荐

  1. ubuntu 下非交互式执行远程shell命令

    apt-get install sshpass sshpass -p **your_password** ssh -o StrictHostKeyChecking=no "root@$ip& ...

  2. 定时器springMVC

  3. SEO基础问题:1. 关于网站的三要素你知道多少?

    800x600 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 /* Style ...

  4. json数组转数组对象

    import java.io.IOException; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import com. ...

  5. NetworkComms V3 使用TCP通信传递IList<T>类型的数据

    客户端从服务器获取一组IList<T>类型的数据非常常见(通常从数据库中获取) 我们用NeworkComms V3来演示一下(NetworkcommsV2.x版本也同样支持) [ 使用pr ...

  6. IE9以下 placeholder兼容

    //input placeholder兼容!(function ($, doc, win) { $.fn.placeholder = function () { var i = doc.createE ...

  7. 通过GET方法返回定义的任意对象

    package util; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputSt ...

  8. JavaScript 字符串常用操作

    JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...

  9. ICML历年Best Papers

    作者:我爱机器学习原文链接:ICML历年Best Papers ICML (Machine Learning)(1999-2016) 2016 Dueling Network Architecture ...

  10. php截取utf-8中文字符串乱码的解决方法

    /** * PHP截取UTF-8字符串,解决半字符问题. * 英文.数字(半角)为1字节(8位),中文(全角)为2字节 * @return 取出的字符串, 当$len小于等于0时, 会返回整个字符串 ...