处理器是一个数字系统, 所以设计一个简易的处理器有必要了解数字电路.本文就是介绍数字电路的基本概念,以及描述CPU中的一些主要的逻辑元件.通过使用HCL(HardSoft Control Language)描述这些逻辑元件的控制逻辑,使得可以抽象地了解它们的功能,而不必知道它们的内部构造.
数字电路的基本概念
————
数字电路可以分为两种:组合电路和时序电路.
1.组合电路
没有存储,所以没有电路的状态,可以看成一种信号,通过导线传输.
没有时钟信号.
输出可以及时响应输入(当然有很小的延时,忽略之).这样输出可以看成输入的boolean函数.
2.时序电路
时序电路 =组合电路+存储器+时钟
存储着一种状态.输出受输入和时钟的影响.
使用时钟对电路进行控制.
存储和时钟详解
组合电路无法存储信息,它们只是简单地响应输入信号,产生输出(f(输入)).
时序电路使用存储设备和时钟信号.存储设备由同一个时钟(周期性信号)控制,用于存储设备加载新值.
存储器设备可以分为两种:
1.时钟寄存器(寄存器).产生时钟信号,用来控制寄存器加载输入值.
2.随机访问存储器(存储器).包括虚拟存储器(通过地址访问)和寄存器文件(寄存器标示符编码).
寄存器操作:寄存器输出会一直保持在当前寄存器状态,直到时钟信号上升.当时钟上升时,寄存器输入上的值会变成新的寄存器状态.
注:寄存器在硬件上就是一个电路(称为硬件寄存器);机器级编程中,将寄存器看作一个可以寻址的字(称为程序寄存器).
最基本的逻辑元件(逻辑门)
————
逻辑门总是active.在短时间内(忽略延迟),输出响应输入的变化.输出是输入的boolean函数.
下图是三个最基本的与们,或门和非门.

常见组合电路
————
将许多的逻辑门组合成一个网,形成一个构建计算块,称为组合电路.下面介绍几种常用的组合电路,并且使用HCL进行描述.
1.位级相等测试电路
[HCL描述] bool eq = (a&&b) || (!a&& !b);
2.字级相等测试电路

[HCL描述 ] bool Eq = (A == B);
3.位级多路复用器

[HCL描述] int out = (s && a) || (!s&& b)
4.字级多路复用器

[HCL描述]
int out =[
s : A;
1 : B;
];
注: HCL的Case语句:对选择表达式顺序求值,选中第一个值为1的Case.
5.四路复用器

[HCL描述]
int out4= [
!s1 && !s0 : A; # 00
!s1: B; # 01
!s0: C; # 10
1: D; # 11
];
6. ALU(CPU的重要组件)

ALU是一个组合电路,输出持续响应输入.上图中(0, 1, 2, 3)是控制信号,对应于Y86的四种算术/逻辑功能.当然以后你会看到ALU也会为响应不同的条件码,计算不同的值(后话).
常见数字电路
————
1.状态机(非常经典)

这幅图可以看出,一个数字电路,是由组合电路,存储器和时钟构成的.
2.Random-Access Memory
常见的RAM有寄存器文件和存储器.下面以寄存器文件为例.

几点说明:
(1).明确一点,寄存器文件是一个数字电路(有内部存储),可以存储多个字,并且需要指定读写地址.
(2).这是一个典型的多端口随机访问存储器,有两个读端口和一个写端口.
(3).这个随机访问存储器,可以看成两部分.
读的部分:可以"看成"一个组合电路, val(值)随着src(地址)的改变而改变(有点延迟).
写的部分:受时钟信号控制(具体方式见前面:存储和时钟详解).
(4).为什么这个随机访问存储器没有读写控制电路?
一是因为读写可以同步进行.二是因为在我们的Y86处理器中,使用ID=F表示不会读写任何寄存器.
3.数据存储器(也是一种随机访问存储器)

可以看出这里有一个读写控制逻辑,用来控制是读还是写. dmem_err指示是否超出地址范围.
处理器的硬件部件(先睹为快,在SEQ处理中详细讲解)
————
先睹为快,看看处理器中到底有哪些重要的硬件部件.主要有: ALU,寄存器文件,数据寄存器,指令寄存器, PC增加,条件码(见下图的彩色部分).

注*:本篇中的图片均来自本书的官网,我进行了改造(注释和添加),详见http://csapp.cs.cmu.edu/public/figures.html
(Copyright© 2011, Randal E. Bryant and David R. O'Hallaron )
reference:
(版权所有,转载时请注明作者和出处-dennis_fan-http://blog.csdn.net/dennis_fan )