原创 超强全手工DIY 制作的 CPU:Magic-1 Homebrew [图文]

2009-6-18 21:06 5925 8 8 分类: 工程师职场

超强全手工DIY 制作的 CPUMagic-1 Homebrew [图文]<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


转载自:http://www.xiaohui.com/weekly/20050915.htm


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


 


点击看大图


 


看了上面这张图片, 你也许觉得奇怪, 这不是一张 TELNET 终端的图片么? 有什么奇怪的?


那么, 请你再看看下面这张图片:



 


点击看大图


 


这是什么东西? 你也许以为只是一个普通的设备. 如果你细心点, 你会发现这东西的底部印着 Magic-1 Homebrew CPU 的字样. 没错, 这确实是一块 CPU, 是一个叫Bill Buzbee人全手工焊出来的 CPU! Buzbee 举四年之力, 以个人之力, 做出了这么一台全手工造的 CPU, 功能齐全, 实在是不简单. 这台全手工的 CPU 可以支持完整的硬件地址转换、内存影射IODMA,并且支持多进程,主频高达”3MHz;该CPU采用8位地址总线,每个进程拥有128K地址空间,其中包括322K的数据页和322K的代码页,这些地址影射到22位的物理地址空间中,如果算上外部设备的地址空间就是23位物理地址空间。


更厉害的是, 他用这台 CPU 组装了一台电脑,名字也就叫 Magic-1。这台计算机包括两个串口和一块<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />20M1.3吋硬盘和另一块30M硬盘。为了让这个系统跑起来, Buzbee LLC 编译器移植到了它上面. 更另人吃惊的是, 他还将这台电脑做为一个 WEB 服务器, 同时支持 TELNET 会话! 第一张图就是我在美国山地时间 2005.09.15 04:15 TELNET 登录到这台服务器上时, 收到的回馈信息.


感兴趣的朋友,可以用如下地址 TELNET MAGIC-1 上面去看看:


telnet magic-1.org


作者的网站 http://www.homebrewcpu.com/首页第一段是这样说的:


 


Magic-1 is a homebuilt minicomputer. It doesn't use an off-the-shelf microprocessor, but rather has a custom CPU made out of 74 Series TTL chips. Altogether there are more than 200 chips in Magic-1 connected together with thousands of individually wrapped wires. And, it works. Not only the hardware, but there's also a full ANSI C compiler for Magic-1 (retargeted LCC), and a rudimentary homebrew operating system.


 


 



 


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


在网页 http://www.homebrewcpu.com/construction.htm 中, 我们可以看到他开发这块 CPU 的进度表:


 




12-6-2001: I begin a running development diary, and start off with an embarrassingly optimistic schedule.


12-18-2001: Do basic design of fault/interrupt mechanism, and make mistake that eventually becomes the last bug to fix before Magic-1 comes alive two-and-a-half years later.


12-29-2001: Complete first rev. of the microcode.


1-6-2002: Magic-1 simulator complete enough to trace call/return sequence.


1-8-2002: Simulate Fibonacci function and flesh out software conventions


1-13-2002: Magic-1 assembler (qas) takes shape


1-18-2002: Big-endian vs. little-endian


2-28-2002: Page fault mechanism works in simulator


3-9-2002: Decide on construction technique: wire-wrap prototype boards


6-3-2002: During LCC retargeting, decide to significantly change Magic instruction set architecture


6-4-2002: Compile Fibonacci program in C to Magic assembly


6-22-2002: Move to split code and data spaces


6-25-2002: Design context switch to work well with Minix operating system


7-12-2002: Complete microcode rewrite


8-13-2002: Drop support for rotate instructions


9-11-2002: Gil Smith give me basic electronics lesson, as well as a wire-wrap gun & supplies


9-22-2002: Buy card cage on eBay and begin construction [pictures]


Fall 2002: During a Vito's lunch, I ask Ken Sumrall how to know what value resistors to use. He introduces me to Ohm's Law.


3-30-2003: Inspired by John Doran's D16/M, complete ALU/Register card schematics


4-13-2003: Complete control card schematics


4-14-2003: Thoughts on front panel


5-3-2003: First rev of schematics complete


5-6-2003: Move build environment from Linux to Windows


5-16-2003: Thoughts on new Magic-1 simulator


5-27-2003: Fibonacci runs on new simulator


6-3-2003: New assembler functional


6-21-2003: Hit 100% coverage on Magic architectural validation test suite


6-23-2003: Alistair Roe emails with thoughts on an enclosure for Magic-1


8-3-2003: Retarget LCC C compiler to Magic & create retargeting notes


8-10-2003: On my birthday, C version of Fibonacci runs in simulator


8-27-2003: David Conroy teaches me about signal integrity


9-18-2003: Decide to use cut-strip-wrap wire-wrapping technique


1-3-2004: Design complete, construction begins


1-18-2004: Magic-1's heart beats for the first time [pictures]


1-26-2004: Front panel logic card complete, [pictures]


2-9-2004: Memory card complete, [pictures]


2-20-2004: EPROM daughter card complete, [pictures]


2-26-2004: Device card complete, [pictures]


3-7-2004: Microcode sequencer comes to life


3-9-2004: First instruction executed


3-19-2004: Control card complete, [pictures]


4-8-2004: Premature bringup attempt


4-12-2004: ALU/Register card complete, [pictures]


4-12-2004: Bring-up attempt - failure!


4-13-2004: Success! Magic-1 runs Fibonacci, [video]


4-25-2004: Dave Conroy debugging session finds ungrounded memory chip


5-3-2005: Magic-1 talks


5-8-2004: Sieve of Erasthones benchmark runs


5-16-2004: IDE interface comes alive; Alistair Roe's enclosure concept


7-23-2004: Basic bringup complete


9-12-2004: User-mode programs work; telnet access to Magic-1


9-15-2004: Dhrystone benchmark runs


9-22-2004: fork() implemented using copy-on-write


10-23-2004: Magic-1's Dhrystone score hits 384 (0.25 MIPS)


10-31-2004: Colossal Cave Adventure runs


4-9-2005: Alistair Roe's enclosure and front panel arrives on doorstep


5-13-2005: Magic-1 is hardware complete.


2001.12.06: Buzbee开始写项目:志,并为自己制定了一张艰难但还算乐观的:程表


2001.12.18: 完成错误处理和中断机制的基本设计


2001.12.29: 完成微代码的第一轮设计


2002.01.06: 完成了Magic-1模拟器,可以对调用/返回指令序列进行跟踪


2002.01.08: 模拟了Fibonacci函数,并丰富了软件接口约定


2002.01.13: Magic-1汇编器(qas)成形


2002.01.18: 决定是选择大尾数法还是小尾数法表示整数的字节顺序,最终选择了大尾数法


2002.02.28: 在模拟器中完成了页面错误机制


2002.03.09: 决定使用普通电线来进行连线


2002.06.03: 对指令集架构进行了意义重大的改变


2002.06.04: C语言编写了Fabonacci程序并编译为Magic汇编程序


2002.06.22: 改用分立的数据和代码地址空间


2002.06.25: 设计用于多进程的上下文环境切换


2002.07.12: 完成对微代码的重写工作


2002.08.13: 放弃对rotate指令的支持


2002.09.11: 上了Gil Smith的一堂电子电路课程


2002.09.22: eBay上买了板材和外壳


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


2003.03.30: Jhon DoranD16/M中得到了灵感,完成了ALU/寄存器板的架构


2003.04.13: 完成控制板的架构


2003.04.14: 思考前面板的架构


2003.05.03: 第一轮架构设计完毕


2003.05.06: 将构建环境从Linux一直到Windows


2003.05.16: 构思新的Magic-1模拟器


2003.05.27: 在新的模拟器上成功运行了Fibonacci程序


2003.06.03: 完成了新的汇编器功能


2003.06.21: Magic架构验证和测试用例达到了100%覆盖率


2003.06.23: Alistair Roe通过email提出了Magic-1外壳的构想


2003.08.03: LCCC编译器)移植到了Magic


2003.08.10: 在模拟器上成功地实现了Fibonacci程序的C语言版本 (这一天是Buzbee的生日)


2003.08.27: David Conroy那里学到了信号完整性


2003.09.18: 决定使用普通的带皮电线进行连接


2004.01.03: 完成了全部的设计工作,开始制作


2004.01.18: Magic-1有了第一次心跳


2004.01.26: 前面板完成


2004.02.09: 内存板完成


2004.02.20: EPROM子板完成


2004.02.26: 设备板完成


2004.03.07: 微代码序列成功运转


2004.03.09: 执行了第一条指令


2004.03.19: 控制板完成


2004.04.08: 尝试发布前期的工作


2004.04.12: ALU/寄存器板完成;同:被告知,发布尝试失败


2004.04.13: Magic-1成功运行了Fibonacci程序!


2004.04.25: Dave Conroy的测试会话发现了不真实的内存碎片


2004.05.03: Magic-1说话


2004.05.08: 运行“Sieve of Erasthones”基准


2004.05.16: 完成了IDE接口,Alistair Roe完成了外壳设计


2004.07.23: 发布基本架构


2004.09.12: 用户模式程序可以工作


2004.09.15: 运行“Dhrystone”基准


2004.09.22: 使用copy-on-write实现了fork()


2004.10.23: Magic-1Dhrystone得分达到了3840.25MIPS


2004.10.31: 运行Colossal Cave Adventure


2005.04.09: Alistair Roe设计的外壳到货


2005.05.13: Magic-1的硬件设计完毕


 


 


在网页 http://www.homebrewcpu.com/photo_gallery.htm 中, 我们可以看到这台全手工 CPU 运行状态的各种图片:


1. 工作中



 


点击看大图


 


2. 作者在调试时的照片:



 


点击看大图


 


3. 机箱内部。绚美的蓝光,异常美丽。




 


点击看大图


 


点击看大图


 


4. 内存板 Component side of the memory board



 


点击看大图


 


5. ALU/寄存器连线面 Wire-wrap side of the ALU/Register card



 


点击看大图


 


6. 控制卡 Component side of the control card


 

点击看大图

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条