【主要目标】
曾几何时,在我父辈的那个年代,大家的条件只够捣鼓点晶体管和半导体的时候,玩点炫酷的电路制作的理工男叫“无线电发烧友”。在我年轻的时候,各种攒机文化兴盛的时候,对于新技术炽热爱好的技术男叫“电脑爱好者”。在今天这个计算设备无所不在,除了台式机,还有更多的笔记本,平板、手机这样的计算时代,我们新一代的极客宅男,捣鼓点什么有趣的玩意呢?
来, 造个计算机吧!
造一台计算机,听起来似乎是一件平常我们不太去想的事情,因为在大学里学计算机的时候,没有人告诉我们的专业是要造一台计算机。在学习计算机的过程中,很多的人识木而不知林,埋头于程序设计中,未曾停下来欣赏一个漂亮的计算机系统的美景。其实,学习计算机最好的方法就是亲自动手,从零开始构建属于我们自己的计算机系统,尽管由于现实的条件因素,我们没有办法造一台功能强大的计算机。然而,就像虽然没有条件造一台真正的汽车,但这并不影响我们造个车模。
在本次的实验中,我们将尝试如何从基本的逻辑门开始一步步构建一个模型级的计算机系统。
希望能够在大一或者大二的学生,通过自已来动手实现,主要涉及的计算机相关课程包括:
计算机简介、编程语言(高级语言)、数据结构、计算机组成原理、数字电路、VHDL、汇编语言、单片机、编译原理、操作系统等
动手实践有利于为上述课程学习打下基础,未来有利于培养整体计算机系统架构的视野。
主要分成两个大的阶段:
一、硬件实现阶段
我个人觉得学习要想真正掌握,必须自已亲自动手实践。因此对于硬件部分,目前的想法是通过对硬件电路的设计和学习,亲自设计一个简单的计算机系统,即上图中蓝色的部分。 想得是最原始的类似牛郎星那种计算机,就是只完成核心的CPU和简单的外围电路设计,然后能够进行机器语言级的运算。
这部分的主要工作包括:
1)设计CPU和内存
计算机的CPU和内存作为计算的核心是主要的工作量, 其中最核心的是牵涉到时钟问题,需要考虑同步
2) 设计整体计算机结构
在这个整体结构里面,CPU和内存解决以后,主要的问题在于通过FPGA板子与外设进行连接的驱动程序的编写,主要包括,与显示屏的接口,与键盘的接口,外存的读写等等。
1-2个月
设计ALU和内存单元
购买FPGA开发板
学习组合电器和时序电路的设计
学习Verilog设计
进行组合逻辑和时序逻辑元器件的设计
2-3月
计算机系统结构设计和实现,主要包括
(1) 设计CPU
(2) 设计输入/输出
(3) 总体系统结构(包括外围电路)设计
(4) 工具和元器件的购买
(5) 实际调试和实现。
二、软件实现阶段
软件部分对应是红色部分,主要通过一种高级语言实现下面的各个编译器,然后在硬件上是通过直接用机器语言写一个对该高级语言的编译器?还是只需要实现汇编语言的,其它的想办法再采用上层的语言交叉编译上机器上。
1)实现汇编编译器,把asm转换成0101
这是软件最底层的问题,是上面链式反应最后的一环,实现相对简单
2) 实现vm编译器,把vm转换成asm
把书上提到的虚拟机的vm语言实现一下
3) 实现高级语言编译器,把Jack语言转换成vm
这部分由于牵涉到高级语言的实现,所以代码会相对复杂一些,需要花得时间较长,
4) 实现基于Jack语言的操作系统
这个操作系统完全是基于虚拟机的,不需要考虑实模式、保护模式等。
在操作系统里面需要实现基本的数学操作、图形操作,可以在上面编制一些经典的经白机游戏。
1周
实现汇编编译器
2周
实现vm编译器
1~2个月
实现Jack编译器
1~2个月
实现JackOS系统
【费用预算】
软件部分只需要自已有计算机即可,不需要费用,主要费用在于硬件,总费用约在500块左右。
1 开发板购买 (400)
考虑到学习的目的,购买专门的学习板,考虑采用相对便宜的Altera公司的,带sd的最好,省得自已还需要再外接,焊接都比较麻烦
2 工具购买 (100~150)
一些常用的工具和耗材,
(1) 万用表(30)
(3) 电烙铁 (由于需要自已焊接外围电路,需要稍发的电烙铁,加烙铁架子30)
(4) 日常手工工具(各种螺丝刀,小钳子,镊子50)
3 耗材和元器件购买 (50)
(焊锡、助焊剂、烙铁头、杜邦线、排线、电工胶带、电阻、LED指示灯、开关、面包板等)