WARNING这是《深入理解计算机系统》(CS
)的笔记,彼时还未上CO,OS等计算机系统基础课,存在理解不到位与错误之处.
处理器体系结构的内容都记录地非常简略…
需要根据需求的指令设计要用到什么硬件组件。
一、组合逻辑电路
实现一个逻辑表达式,不用多说。给一个输入,它给出一个结果,不存储任何东西。
《深入理解计算机系统》中定义了一种简单的 硬件控制语言HCL,它主要描述数字逻辑电路的控制部分,对应的就是各种组合逻辑电路。注意它不是接下来的计组课中将要用到的完整的硬件描述语言HDL。简单说明如下:
1)多个1bit的输入,1bit的输出,对应一个简单的bool表达式,表示如下:
bool expr = (A == B); //等价
bool out = (s && a) || (!s && b); //1位二路选择器
2)程序中输入输出往往是许多了bits,也就是一个“字”(word)。在Intel体系中,字是short类型16字节数据。在其它指令集中,字可以依便利规定,比如一个指令集只设计64bits数的各种运算(比如书中的Y86-64),那么将字定义为64bits数据更方便。
可以简单粗暴地定义一个64位输入输出完整的组合逻辑电路:
word Out = [
s : A; //如果选择位s==1,就输出A
1 : B; //default:输出B
] //64为二路选择器
再不济也可以把真值表搬上来(笑)
3)集合从属
提供了一种更方便的逻辑表达式写法:in ,类似python中的in,当输入为给定集合中的元素,就返回1.
比如4bits输入,输出为两个1bits的控制标记:
bool s1 = Input in {2,3,4};
bool s0 = Input in {2,3,4,5,11};
二、存储器
时钟负责在相应的时钟线路上交替产生高低电频(周期)。
一个简单的存储器操作是:当始终CLK到上升沿时,读入输入X,将其内存储的东西改为X,并且输出X。其它时刻将维持X不变。一般还会有相应的使能端口,使能端口为0,保持存储内容和输出不变,输入无法改变其状态。
寄存器文件:多个寄存器放在一起,通过寄存器ID读取和写入。同样在写端口(输入端口)中,只有在时钟上升沿才能激活。
配套的有写地址、读地址,写入/读出的时候先将对应地址设置好,再写/读。
注意读操作是不受时钟控制的,只要在相应的srcA srcB上设置了地址,就会把相应的A、B输出端口设置为相应寄存器所存储的值。
数据存储器(随机访问存储器),抽象为:有一个用于写的数据输入,一个读写通用的地址端口,时钟,输出端口,读、写模式设置(或使能)端口,error输出(设置stat),简单明了。
见书P263吧。。图片会倒过来。