自己设计制作CPU与单片机pdf下载

自己设计制作CPU与单片机百度网盘pdf下载

作者:
简介:自己设计制作CPU与单片机
出版社:人民邮电出版社
出版时间:2014-09-01
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

编辑推荐



  不亲自设计CPU的人很难以理解计算机的真谛。
  基础上不能与人并驾齐驱,永远不要谈超越别人。
  从精简指令系统RISC,到复杂指令系统CISC;
  从原理图设计,到硬件编程;
  从人机交互设计,到操作系统内核设计;
  从无,到有,设计属于你自己的CPU与单片机。
  去做一件看似不可能的事,
  才能知道你的极限在哪里。
内容简介
  《自己设计制作CPU与单片机》是一本为有志于计算机CPU设计的人员所写的书,不论你是狂热的发烧友,还是精明的计算机专业工作者。
  《自己设计制作CPU与单片机》以作者几十年学习设计制作CPU与通用单片机的经历,来告诉你如何从无到有地设计属于你自己的CPU和可以运行用户程序的单片机。书中以作者的十几个CPU设计工程为主线,展示了精简指令系统RISC和复杂指令系统CISC计算机CPU的设计方法。既有硬件编程,又有原理图设计,适合软硬件人员学习计算机核心技术之用。
  《自己设计制作CPU与单片机通过实例告诉读者,如何创造性地进行计算机高端产品CPU的立意和设计,介绍了人机交互和操作系统内核的设计方法。这是一本对要全面掌握计算机高端技术的人员而言必读的CPU设计制作之书。
作者简介
  姜咏江,1945年出生。副教授。中国计算机学会和中国电子学会高级会员。
  从事数学、计算机理论、微体系结构、操作系统方向研究。
  自己设计制作CPU与单片机多台。
目录
其他
前言
上篇 CPU设计制作入门
第1章 自己就能设计制造CPU
1.1 自己设计制作CPU有啥意义
1.2 我设计制作CPU的经历
1.3 电子电路设计制作的新变化
1.4 自己设计CPU的条件
1.5 创新CPU设计的意义
第2章 进入硬件设计的天地
2.1 搭建自己的制造工厂
2.1.1 安装你的设计制造工具
2.1.2 获得开工许可证
2.1.3 熟悉如何建立设计工程
2.2 设计制造CPU需要热身
2.2.1 初学硬件编程的例子
2.2.2 程序书写的要点你知道吗?
2.2.3 程序就是硬件吗
2.2.4 怎样知道自己设计的对与错
2.2.5 掌握仿真测试小工具
2.2.6 看看自己设计的转换图
2.3 硬件设计语言Verilog HDL
2.3.1 Verilog HDL语言的常量
2.3.2 Verilog HDL数据类型
2.3.3 Verilog HDL操作符
2.4 Verilog HDL语句和模块
2.4.1 连接语句assign
2.4.2 Always语句
2.4.3 模块
2.5 Verilog HDL其他常用语句
2.5.1 if语句
2.5.2 case语句
2.5.3 for循环语句
第3章 自己创造CPU的方法
3.1 深刻理解CPU的结构
3.1.1 简单CPU的组成
3.1.2 总线分类与设备控制
3.2 自创CPU的一般步骤
3.3 如何设计自己的指令系统
3.3.1 CPU必需有哪些指令
3.3.2 机器结构决定的基本动作
3.3.3 将基本动作组织成指令
3.3.4 CPU指令设计与全程逻辑分析
3.4 指令分析的一般性总结
3.4.1 指令有限状态机
3.4.2 程序如何描述指令
3.5 让CPU运行程序
3.5.1 简单汇编指令设计
3.5.2 CPU的汇编程序设计
3.5.3 如何编译汇编程序
第4章 一个简单CPU的设计
4.1 创建一个CPU设计工程
4.1.1 复制这个简单CPU工程
4.1.2 执行我们设计的汇编程序
4.2 剖析这个CPU设计程序
4.2.1 借用别人的存储器要了解什么
4.2.2 如何描述CPU的端口
4.2.3 CPU要设置哪些内部器件和导线?
4.2.4 器件连接和信息传递的描述
4.2.5 怎样才能看到CPU运行的内部变化
4.3 CPU行为的描述方法
4.3.1 CPU初始状态如何描述
4.3.2 取指令周期的描述
4.3.3 指令分析的描述
4.3.4 指令执行周期的描述
4.4 如何让CPU运行软件程序
4.4.1 设计用于检验的汇编程序
4.4.2 用表来编译汇编程序
4.4.3 仿真检验CPU设计
4.5 CPU设计工程小结
第5章 自制通用CPU与单片机
5.1 实体结构与器件应用
5.2 通用CPU指令系统设计
5.2.1 规划CPU的指令格式
5.2.2 增加的指令
5.2.3 新增输入输出端口
5.2.4 可读写的程序存储器
5.2.5 新增指令的状态描述
5.3 用汇编程序检验CPU设计
5.3.1 测试CPU的程序设计
5.3.2 汇编程序执行仿真
5.4 外设与CPU接口设计
5.4.1 输入缓冲区设想
5.4.2 输入缓冲区设计程序
5.4.3 仿真检测缓冲区设计
5.4.4 缓冲区与CPU连接
5.5 设备驱动程序设计
5.5.1 一个数码管驱动程序
5.5.2 四个数码管驱动程序
5.5.3 走马灯显示设计
5.6 时钟设计
5.6.1 分频设计
5.6.2 锁相环生成时钟程序
5.6.3 时钟IP程序
5.7 开发板连接程序设计
5.7.1 如何定义开发板上的设备
5.7.2 PMC开发板连接程序
5.7.3 连接程序解释
5.8 FPGA引脚连接
5.8.1 引脚连接清单
5.8.2 引脚连接操作
5.9 操作系统内核设计
5.9.1 操作系统核心
5.9.2 系统程序常驻内存
5.10 烧制CPU制作单片机
5.10.1 JTAG下载烧制
5.10.2 检验设计成果
5.10.3 ASP下载烧制单片机
第6章 流水线CPU设计
6.1 流水线结构
6.1.1 流水线要义
6.1.2 指令流水线的组织
6.1.3 流水线指令并行工作
6.1.4 流水线相关问题
6.1.5 解决相关的办法
6.2 第一个流水线CPU
6.2.1 流水线CPU指令系统
6.2.2 同步存储器
6.2.3 CPU设计程序分析
6.2.4 流水线CPU仿真
6.2.5 与非流水线速度比较
6.3 循环流水线CPU
6.3.1 流水线的效率
6.3.2 部件式结构设计
6.3.3 循环流水线的划分
6.3.4 循环流水线CPU设计
6.3.5 化解设备相关和控制相关方法
6.3.6 运行速度比较
第7章 非透明流水线通用单片机
7.1 三级流水线计算机设计思想
7.1.1 三级流水线的优势
7.1.2 发射与断流控制
7.2 重编指令系统
7.2.1 补充的指令
7.2.2 指令系统编码重设
7.3 流水线通用CPU设计
7.3.1 三级流水通用CPU程序
7.3.2 三级流水线通用CPU仿真
7.4 流水线操作系统内核设计
7.4.1 流水线操作系统程序
7.4.2 系统程序仿真
7.4.3 仿真检验操作系统
第8章 流水线编程的透明设计
8.1 分支指令透明化
8.1.1 改造分支指令设计
8.1.2 中断流水机制设计
8.2 其他指令透明化
8.2.1 Iptr指令优化
8.2.2 Call和Ret指令优化
8.2.3 运行汇编程序测试
8.3 缓冲区连接
8.3.1 输入缓冲区检验
8.3.2 缓冲区与CPU关联程序
8.3.3 通过缓冲区输入仿真
8.4 开发板的连接
8.4.1 连接程序设计
8.4.2 EP1C12Q引脚连接
8.5 烧制运行与测试
8.5.1 常驻程序
8.5.2 运行检测
8.5.3 透明三级流水线检测程序设计
8.5.4 透明流水线编程提示
中篇 深入CPU设计
第9章 信息与信息处理
9.1 信息与媒体
9.1.1 客观的信息
9.1.2 媒体与信息分类
9.2 信息处理与数据
9.2.1 信息处理
9.2.2 数据
9.2.3 信息量
9.2.4 计算机是信息处理工具
第10章 机器表示数和运算
10.1 限位记数
10.1.1 N进制
10.1.2 限位数
10.1.3 反码
10.2 解决正负数运算的对称制
10.2.1 限位数运算特征
10.2.2 用限位数表示正负数
10.2.3 什么是对称制
10.2.4 对称制运算
10.2.5 对称码和反码的关系
10.3 对称制加法的溢出
10.3.1 加减法溢出的判断
10.3.2 溢出的解决方法
10.3.3 乘法运算溢出的处理
10.3.4 变减法为加法
10.4 信息的二进制表示
10.4.1 图形文字数值化
10.4.2 颜色的数值化
10.4.3 模拟信息的数值化
第11章 逻辑代数是CPU的基石
11.1 逻辑代数的概念
11.2 逻辑代数的基本运算规则
11.2.1 逻辑变量与逻辑表达式
11.2.2 基本逻辑等式
11.2.3 异或
第12章 万能的逻辑电路
12.1 二极管和三极管
12.1.1 简单电路知识
12.1.2 简单表示电子管
12.1.3 基本逻辑门电路
12.2 依据表达式作电路
12.2.1 线路连接与交叉
12.2.2 基本组合电路符号
12.2.3 逻辑电路的画法
12.3 真值表与逻辑函数
12.3.1 真值表
12.3.2 逻辑表达式的化简
第13章 元器件与线路设计原理
13.1 RS触发器
13.1.1 RS触发器的结构
13.1.2 RS触发器工作原理
13.1.3 RS触发器的符号
13.2 D型触发器
13.2.1 时标触发器
13.2.2 边沿触发器
13.3 通断控制开关电路
13.3.1 三态门电路组成
13.3.2 三态门工作原理
13.4 带预置清除端的边沿触发器
13.5 线路数据传输
13.5.1 三态总线的数据传输
13.5.2 两态选择扇出总线
13.5.3 双向通断可控开关
13.6 寄存器原理
13.6.1 暂存寄存器设计
13.6.2 L门的工作原理
13.6.3 Jk触发器
13.6.4 Jk触发器的构造
13.6.5 Jk触发器工作过程
13.6.6 行波计数器
13.7 译码器和多路选择器
13.7.1 译码器
13.7.2 接收多路选择器
第14章 CPU的器件设计
14.1 原理图设计方法
14.1.1 原理图设计操作
14.1.2 器件的层次组合
14.1.3 Quartus II电子元件库
14.2 加减法运算器设计
14.2.1 加减法运算器设计的必要性
14.2.2 加法运算的分析
14.2.3 全加器设计操作
14.2.4 四位加法器设计
14.2.5 八位加法运算器设计
14.2.6 八位加减运算器设计
14.3 分段加减法运算器设计
14.3.1 分段计算原理
14.3.2 设计分段加减法运算器
14.3.3 分段加减法运算器仿真
14.3.4 分段加减法运算相关指令设计
14.4 通用计数器
14.4.1 同时同步计数器
14.4.2 二选一电路
14.4.3 加减单元
14.4.4 计数单元
14.4.5 八位计数器
14.4.6 计数器一般化
14.4.7 等效计数器设计
14.5 标志线的设计
14.6 移位寄存器设计
14.6.1 两位移位单元
14.6.2 多位左移位寄存器设计
14.6.3 左右移位寄存器设计
14.6.4 移位寄存器等效电路设计
14.7 乘法运算器的设计
14.7.1 乘法手算形式分析
14.7.2 乘法阵列原理图设计
14.7.3 分层设计乘法阵列
14.8 通用乘法运算器设计
14.8.1 求绝对值电路
14.8.2 实现有符号乘法运算
14.8.3 通用乘法运算器仿真
14.8.4 超长数乘法设计
14.9 除法运算器设计
14.9.1 除法手算形式分析
14.9.2 无符号数除法阵列
14.9.3 减法运算单元
14.9.4 四位减法运算器
14.9.5 除法试商运算单元
14.9.6 无符号数除法阵列行
14.9.7 无符号数除法运算器
14.9.8 有符号数除法器
14.10 译码器的设计
14.10.1 译码器设计
14.10.2 四位译码器设计
14.10.3 分层构造多位译码器
14.11 浮点加减法运算器设计
14.11.1 国际标准化组织的标准
14.11.2 限位浮点数的表示
14.11.3 浮点数的运算
14.11.4 随机右移运算器
14.11.5 浮点加减法运算器结构
14.11.6 浮点数加减法运算器设计
14.12 节拍器的设计
14.12.1 节拍器的结构
14.12.2 节拍器的工作原理
14.13 存储器设计
14.13.1 随机存储器
14.13.2 IP程序生成RAM
14.13.3 随机存储器仿真
14.14 总线结构设计
14.14.1 简单总线结构
14.14.2 总线控制字与微指令
14.14.3 总线结构中实用存储器
14.14.4 地址寄存器设计
第15章 X86型CPU及单片机设计
15.1 PMC硬件构成
15.2 CPU的逻辑结构
15.3 指令系统设计
15.3.1 机器指令设计
15.3.2 指令格式和寻址方式
15.3.3 指令全程与控制函数
15.4 控制矩阵
15.4.1 控制矩阵电路设计
15.4.2 分块设计控制矩阵
15.5 控制矩阵生成器
15.5.1 控制矩阵生成器安装
15.5.2 建立指令全程分析表
15.5.3 生成dBASE III文件
15.6 控制矩阵生成器的使用
15.6.1 基本操作
15.6.2 数据库中建分析表
15.6.3 生成逻辑模块描述
15.7 PMC110总线结构
15.7.1 运算器存储器总线连接
15.7.2 指针累加器等连入总线
15.7.3 寄存器等连入总线
15.8 CPU顶层总线结构
15.9 输入缓冲接口设计
15.9.1 PMC110缓冲区设计思想
15.9.2 缓冲区存储器设计
15.9.3 缓冲区接口电路
15.9.4 输入接口解决的问题
15.10 PMC110CPU与外设连接
15.11 PMC110操作系统核心设计
15.12 PMC110顶层与引脚
第16章 带LCD的通用单片机
16.1 FM12864J液晶屏
16.2 FM12864J逻辑结构与控制
16.2.1 HD16202逻辑结构
16.2.2 液晶屏操作指令
16.3 LCD读写控制
16.3.1 液晶屏的读写时序
16.3.2 液晶屏驱动程序
16.4 LCD帧控制程序
16.4.1 端口与工作变量
16.4.2 随时变化的端口
16.4.3 帧控制程序的初始状态
16.4.4 帧控制状态描述
16.4.5 帧控制例行状态描述
16.5 字库设计程序
16.5.1 Idle状态
16.5.2 字形设计
16.5.3 Ok状态描述
16.6 时钟和送显信号设计
16.7 内外总线连接
16.8 开发板连接程序
16.9 EP1C12Q240增加引脚连接
16.10 带LCD单片机顶层文件
16.11 带LCD单片机运行测试
第17章 动态CPU的思想方法
17.1 历史背景
17.2 并行计算机冲突概述
17.3 PU-MU-CHL并行结构——计算机核心重组
17.4 PU与MU连接控制
17.5 动态计算机的整机结构
第18章 动态CPU设计实例
18.1 PMC362CPU逻辑结构
18.2 PMC362CPU结构设计
18.3 PU设计
18.3.1 PU的总线连接
18.3.2 PU内部结构
18.4 PU-MU指令系统
18.4.1 PU指令表
18.4.2 PU控制矩阵设计
18.5 MU设计
18.5.1 MU总线结构
18.5.2 MU总线连接设计
18.5.3 MU内部结构
18.5.4 MU连接标志设计
18.6 CHL设计
18.6.1 CHL总线连接
18.6.2 CHL内部结构
18.6.3 CHL指令系统设计
18.7 顶层结构
18.8 设备连接优先级设计
18.9 主要部件和特色
18.10 测试程序设计
18.11 PMC362程序并行执行仿真
18.12 下载到开发板上运行检验
第19章 PMC计算机应用
19.1 PMC110汇编语言设计工具
19.1.1 程序设计编译器的安装
19.1.2 程序设计编译器的使用
19.1.3 编辑编译器使用实例
19.2 程序输入装填与执行
19.2.1 程序的输入与装填
19.2.2 输入编辑
19.2.3 人机交互方式
19.2.4 执行结果表示
19.3 系统复位与复杂操作
19.3.1 系统复位的方法
19.3.2 缓冲区复位
19.3.3 分段输入程序操作
19.4 需要知道的限制
第20章 汇编语言程序设计
20.1 汇编程序的基本结构
20.1.1 顺序结构
20.1.2 分支结构
20.1.3 循环结构
20.1.4 子程序调用结构
20.2 指令的分类
20.2.1 算术运算类指令
20.2.2 数据传送类指令
20.2.3 逻辑运算类指令
20.2.4 跳转类指令
20.2.5 数据移位指令
20.2.6 其他控制类指令
20.3 程序设计
20.3.1 分支循环结构设计
20.3.2 多重循环
20.3.3 使用地址指针
20.3.4 起泡排序
20.4 宏指令
20.4.1 宏指令格式
20.4.2 无参数宏
20.4.3 带参数的宏
20.4.4 宏与函数
20.5 汇编程序编译方法
20.5.1 编译的一般过程
20.5.2 机器编译方法
20.5.3 用数据库软件设计编译器
20.6 典型问题求解
20.6.1 求自然数n的阶乘
20.6.2 超长数乘除法
20.6.3 超长数除法运算器设计
20.6.4 超长数除法运算仿真
20.7 虚拟存储器结构设计
20.7.1 虚拟存储执行的机制
20.7.2 虚拟存储编程
20.7.3 虚拟存储程序设计
下篇 自己制作单片机
第21章 自制单片机器件与环境
21.1 自制计算机系统整体结构
21.1.1 单芯片计算机实例
21.1.2 功能结构划分
21.1.3 FPGA芯片和配件
21.1.4 FPGA的配件
21.2 PMC计算机的供电系统
21.2.1 直流电源与开关
21.2.2 稳压器件
21.2.3 整流二极管和滤波器件
21.2.4 下载线
21.3 输入设备
21.3.1 数据输入开关
21.3.2 状态控制开关
21.3.3 触发控制按钮
21.4 显示输出设备
21.4.1 发光二极管
21.4.2 数码管
21.4.3 液晶显示屏
21.5 PCB印制电路板
21.6 个人设计制作计算机所需的工作环境
第22章 PMC110计算机电路设计
22.1 计算机辅助设计软件PADS
22.1.1 元器件库
22.1.2 元器件图制作
22.2 基本型PMC电路的原理图设计
22.2.1 供电系统设计
22.2.2 FPGA的引脚
22.2.3 信号保障系统设计
22.2.4 程序下载系统设计
22.2.5 输入系统设计
22.2.6 输出系统设计
22.2.7 为PCB准备网表
22.3 PMC110计算机PCB设计
22.3.1 PCB的边界绘制
22.3.2 导入元器件
22.3.3 元器件布局
22.3.4 电路板的布线
22.3.5 电路板敷铜
22.4 器件PCB封装设计
22.4.1 使用自动导航设计
22.4.2 一般器件PCB设计
第23章 计算机组装与下载
23.1 PCB检测
23.2 器件焊接
23.2.1 器件焊接的顺序
23.2.2 焊接技巧
23.3 上电检测和断电修正
23.3.1 PC计算机设计下载
23.3.2 常驻内存程序测试
23.3.3 自编程序测试
附录
前言
  “能不能自己设计制作一台计算机?”
  现在,我可以肯定地回答你:“能!”
  计算机发展到今天,几乎已经是无处不用了。然而谈起中国人自己制造计算机的问题,未免还有些气短。特别是计算机的灵魂CPU,一色都是国外制造的,就是有人说某CPU是中国人制造的,你也未必相信,最好的回答恐怕也是“山寨”或者仿造。
  什么我们自己不能够制造CPU?这涉及到CPU的设计理论方法和超大规模集成电路制造技术。据最新的报导,我国已经掌握了22纳米的超大规模集成电路生产工艺,看来很快就会有真正国内生产的CPU芯片问世。
  说到CPU设计,关键要有理论和设计实践环境。长时间以来,我们既缺先进的设计理论,又缺实现CPU理论的设计环境。理论需要头脑思考,只要我们辛勤认真地学习和思考,理论问题就能够解决,关键的是实现CPU设计的环境与工艺技术。可以说CPU设计环境和工艺技术阻碍了我国微电子工业的发展。现在这个问题应该说已经解决了。十几年前发展起来的FPGA芯片,使这一切都变得简单了。FPGA的出现标志着一个全新的个人设计制作CPU芯片的时代到来了。
  从进入计算机领域的那一天开始,我就无时无刻不在梦想自己制造一台计算机。这一梦想在2006年终于成为了现实。我不但设计出了完全属于自己的CPU,还亲手制作了以自己的CPU为中心的通用单片机。一般的单片机不能随时运行用户程序,而我制作的单片机可以在运行过程中,随时输入用户程序执行。专用计算机和通用计算机的根本区别就在于能否执行用户程序。
  一晃8年的时间过去了。很高兴地看到想要自己设计制作CPU与计算机的人越来越多。这期间向我询问个人设计制作CPU技术的人也多了起来,所以我决定将自己的心得体会写出来,希望能够快速地营造一个自己设计制作CPU与计算机的氛围,希望我国的计算机高端理论和技术能够快速发展。
  本书是我三十几年从事计算机教学与科研的经验总结,其中包含多个自己设计的CPU实例。既有复杂指令系统的CPU,也有流水线一类精简指令系统的CPU,特别是还有我自己发明的动态CPU的设计。这些设计工程实例,既有复杂一些的,也有简单的。这样做的目的,是想让那些资深的计算机技术人员和那些资历尚浅的计算机CPU设计爱好者,都能够在本书中获得一些启迪,增加他们投身到计算机高端领域的兴趣。
  本书共分三大部分:
  上篇叫做CPU设计制作入门。其中主要介绍用硬件编程语言如何来设计制作CPU与单片机。这一部分主要以精简指令格式的CPU设计为主。由浅入深,有简单CPU设计、通用CPU与单片机设计制作、流水线CPU设计、通用流水线CPU与单片机设计制作、透明三级流水线CPU与单片机制作等。
  中篇叫做深入CPU设计。这一部分对计算机CPU设计的理论和方法作了深入地介绍和讨论,从源头上来解决CPU设计的基础理论和技术,重点介绍原理图方式设计CPU的技术和方法。这样做的目的是能对初学CPU设计的读者给予理论上的指导,同时力求对那些有创新CPU设计能力的读者有所帮助。这一部分主要包括:
  (1)计算机CPU设计原理和方法,重点给出了限位记数法和对称制,它们是机器计算的重要理论和设计的重要依据;
  (2)构成CPU的各种元器件设计方法与实际设计,特别给出了定点数加、减、乘、除和浮点数加减法运算器的设计,这些运算器都能够实现超长数的运算;
  (3)给出了PMC110计算机基础型和带液晶屏单片机设计的工程实例,重点介绍如何用原理图设计通用计算机的内外结构,液晶屏设备的使用及CPU与外设异步通信的基本方法;
  (4)给出了动态计算机PMC362的设计思想与设计方法等。
  下篇叫做自己制作单片机。这一部分主要介绍通用单片机如何制作。其中包括带有FPGA的计算机电路板设计、器件选择、设备安装、工程下载等一系列设计制作方法。通过这一部分内容论述,让读者能够成为一个可以独立运行的单片机的制造者。
  CPU设计制造之所以被称为“高科技”,在于它所涉及的知识和技术领域较广,所以使一些想涉猎这一领域的人望而却步。什么复杂的CPU设计、什么高深的操作系统设计,通过本书你会看到,原来这一切也不过是如此而已!
  书中令作者十分得意的有三点:
  第一是限位数与对称制理论,它在补码制的基础上,完善了机器精确计算的理论和方法;
  第二是动态CPU的设计理论和方法,这一发明是对以进程线程方法进行程序运行和调度,以系统软件管理内存的运行方式发出了挑战,进而发出了“减少软件消耗”的呼声;
  第三是让读者一下子就能够接触到操作系统内核,用简单的十几条指令,就能让读者体会到操作系统的本意。
  书中许多内容都是作者的独创,虽然这些内容有些距离市场应用还有相当的距离,但其中所揭示的理论和方法却是最直接的。发展一下,进入市场是指日可待的事情。就我个人几十年的设计体会来说,这方面的东西未必像一些人所描述的那样高深莫测,在FPGA器件和电子设计自动化软件EDA存在的条件下,有志趣的高中生都可以自己将CPU设计出来。
  但愿我所写的这本抛砖引玉的书,能够吸引我国更多的年轻人投入到CPU与计算机的设计领域中来!
  姜咏江
  2014年1月12日
精彩书摘
  计算机是人类智慧的最高结晶,CPU是这种智慧结晶的核心。我们只有掌握了 CPU的设计制作技术,才能说真正掌握了计算机。计算机电子电路设计最基本的方法是原理图,这种设计方法不仅要掌握计算机的理论和方法,而且要深刻理解电子电路的相关知识和技术。原理图设计方法对搞软件设计为主的人来说,有一定的难度。近些年发展起来的硬件编程语言,在很大程度上降低了设计者对硬件电路细节的设计要求,通过电子设计自动化 EDA(Electronic Design Automation)软件,就能够开发出一些硬件产品。这大大降低了电子电路的设计难度,非常受电子市场产品的设计制造者欢迎。EDA 软件的设计者将常用的基本电子电路,做成了可以直接用编程语言描述的元器件。EDA 软件使用者在不很了解元器件结构细节的情况下,就可以拿来组织自己的较为复杂的电路,从而简便了电子电路的设计。不太懂原理图设计的人开始接触CPU设计,当然最好是从编程的方法入手,待有了一定的基础之后,再深入研究原理图设计方法,深刻地去探求CPU设计的电子电路实现问题更好。
  本篇我们假定读者有C语言设计经验,在懂得计算机基础知识的基础上,以硬件设计语言Verilog HDL为主,通过编程的方法引领读者快速地进入计算机CPU设计的天地,引领读者学会用编程方法设计CPU和制作简单的计算机。如果需要首先了解原理图设计CPU的方法,请直接阅读中篇的相关内容。
  第1章 自己就能设计制造CPU
  几年前我曾劝别人与我一起搞 CPU设计,但那时得到的回答是:“搞 CPU设计?水太深了!”
  计算机是信息世界的佼佼者,计算机的 CPU使人感到奥妙高深,神秘莫测。如今的计算机CPU除了包含运算器、控制器之外,还包含有高速缓存cache存储器,是计算机智能的核心,所以又被称为核。我国把与计算机相关的信息产业叫高新技术产业,这无形当中更增加了人们对计算机CPU设计制作的神秘感。能够设计制作CPU,无疑是每一个学习计算机技术的人向往的事情。一个人自己可以设计制造 CPU吗?若干年前,这个问题的回答是否定的。如今则不同了,我以我设计制作计算机CPU的经历和经验,可以完全肯定地告诉你,这现在不仅能够做到,而且能够做得很好。
  由于超大规模集成电路技术的发展,近十几年出现了现场可编程阵列器件FPGA,这使电子电路的设计工作一下子从“刀耕火种”的时代摆脱出来,从众人一起从事 CPU设计制造的大协作时期,进入了个人设计制造复杂的 CPU的时代。你不信吗?被称为人类“高科技”的计算机CPU设计制造,被我三言两语轻松地说“自己能够制造”,这未免有些吹牛了吧?如果你有C程序设计的基础,又是一个确实想要探求计算机的核心部件CPU设计制造的人,就不妨通过本书与我一起去制造几个CPU试试吧。
  1.1 自己设计制作CPU有啥意义
  我国真正普遍应用计算机还是在20世纪80年代,那时多数人都缺乏对计算机的全面认识,认为计算机就如同汽车一样,买回来用就是了,因而从上到下都把主要精力放在了软件方面,再加上我国集成电路技术方面的落后,在计算机核心设计方面没有多大的发展。直到21世纪初,我们才有了自己设计制造计算机核心部件CPU的打算,但是多数都在仿造美国的设计,根本谈不上独立的创新设计。我国之所以到 21世纪初才进入了计算机核心设计,其关键的问题是缺乏进行计算机核心设计的硬件条件。
  1945年第一台电子计算机用的是电子管制作的,这台计算机的体积有一座楼房那么大。以后即使有了晶体管和印刷电路技术,计算机仍然不能普遍地应用,国外也只是在一些科研单位和重要部门使用。至于我国就更是谈不上应用计算机的普及问题了,加之又经历了“文化大革命”,计算机基础的薄弱就更凸现出来了。文革后期,由清华大学、北京无线电三厂、天津无线电技术研究所、江苏无线电厂、苏州无线电厂、中国科学院原子能研究所、上海师范大学、上海无线电十三厂和上海中兴无线电厂等单位联合,在1974年以NOVA1200小型机为蓝本作为仿制样机研发出DJS130小型计算机。DJS130小型计算机以德国造的打字机作为输入输出设备,没有显示器,主机箱就有写字台那么大,内存是磁芯结构,起初只有32K,关键零部件是不是自己设计的无从知晓。据有关人士透漏,总共生产了 1000余台供科研院所使用。但后来受到了国外计算机厂商的冲击,没有了继续发展的潜力。我国的 CPU设计直到本世纪初期才崭露头脚,以“龙芯”为代表的超大规模集成电路结构,山寨 MIPS 的CPU诞生了,严格地说,这不算自己设计的CPU。什么是自己设计的CPU呢?那应该是指令系统和整体结构都是自己设计的才算。据报道,“龙芯”与美国 MIPS 公司已经签约,承认了MIPS公司在“龙芯”芯片中的知识产权,龙芯公司负责人对外讲只是认可指令系统。CPU的指令系统包含了什么?是整个计算机的设计思想与方法!其实,仿制并不是一件羞耻的事情,相反,仿制是一种快速深入学习的极好方法,是深入领会他人先进技术和理论的极好形式,进而能够为自己的创新设计打下良好的基础。试问,哪一个搞科学研究的人不是从“仿制”先人或他人的思想方法开始的?
  还好,上个世纪后期传入我国的FPGA器件和相关技术,给了我们一个从源头设计制造计算机CPU的机会。FPGA技术让计算机设计从集团作战,进入了可以个人设计的阶段,于是我国才出现了一批真正致力于计算机CPU设计的科学家。
  计算机经历将近 70年的发展历程,可以说已经相当完善了。但是,我们为什么还要在这里提倡自己设计制作CPU呢?
精彩插图