第四章 处理器体系结构
处理器体系结构
ISA:指令集体系结构——一个处理器支持的指令和指令的字节级编码。
HCL:硬件控制语言——一种描述硬件系统控制部分的简单语言。
4.1 Y86指令集体系结构
一、程序员可见的状态:每条指令都会读取或修改处理器状态的某些部分
“程序员”:既可以是用汇编代码写程序的人,也可以是产生机器级代码的编译器。
二、Y86的处理器状态类似于IA32:
有8个程序寄存器,%eax,%ecx,%edx,%ebx,%esi,%edi,%esp,%ebp。处理器的每个程序寄存器存储一个字。寄存器%esp被入栈、出栈、调用和返回指令作为栈指针。在其他情况下,寄存器没有固定的含义或固定值。有三个一位的条件码:ZF,SF,OF,它们保存最近的算术或洛基指令所造成英雄的有关信息。程序计数器PC存放当前正在执行指令的地址。
三、存储器:Y86程序用虚拟地址来引用存储器位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址,指明数据实际保存在哪个地方。
四、状态码stat:它表明程序执行的总体状态,会指示是正常运行还是出现了某种异常。
五、Y86指令:Y86指令集基本上是IA32指令集的一个子集,只包括四字节整数操作,寻址方式比较少,操作也较少。
六、IA32的movl指令分成了4个不同的指令:
1、irmovl,rrmovl,mrmovl,rmmovl分别显示地指明源和目的的格式。源可以是立即数(i)、寄存器(r)、或存储器(m)。指令名字的第一个字母表明了源的类型,第二个字母指明了目的类型。目的操作数可以是:寄存器(r)、存储器(m)。
2、两个存储器传送指令中的存储器引用方式是简单的基址和偏移量形式。在地址计算中,不支持第二变址寄存器和任何寄存器值的伸缩。不允许从一个存储器地址直接传送到另一个存储器地址,也不允许将立即数传送到存储器。
七、4个整数操作指令:addl、subl 、andl 、xorl 。它们只对寄存器数据进行操作,而IA32还允许对存储器数据进行这些操作。这些指令会设置三个条件码:ZF、SF、OF。
7个跳转指令:jmp 、jle、jl 、je 、jne 、jge 、jg
6个条件传送指令:cmovle、cmovl、cmove、cmovne、cmovge、cmovg。这些指令的格式与寄存器-寄存器传送指令rrmovl一样,但是只有当条件码满足所需要的约束时,才会更新目的寄存器的值。
call指令将返回地址入栈,然后跳到目的地址,ret指令从这样的过程调用中返回。
pushl和popl指令实现了入栈和出栈。
halt指令停止指令的执行。IA32中有一个与之相当的指令hlt。执行halt指令会导致处理器停止,并将状态码设置为HLT。IA32的应用程序不允许使用这条指令,因为它会导致整个系统暂停运行。
八、每条指令需要1-6个字节不等,每条指令的第一个字节表明指令的类型。这个字节分为两个部分,每个部分4位:高4位是代码部分,代码值为0~0xB,低4位是功能部分,功能值只有在一组相关指令共用一个代码时才有用。
九、8个程序寄存器中每个都有相应的0~7的寄存器标识符,程序寄存器存在CPU中的一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器ID作为地址的随机访问存储器。当需要指明不应访问任何寄存器时,用ID值0xF表示。
十、附加的寄存器指示符字节
1、指定一个或两个寄存器,例如rA或者rB。
2、没有寄存器操作数的指令,例如分支指令和call指令,就没有寄存器指示符字节。
3、只需要一个寄存器操作数的指令(irmovl,pushl,popl)将另一个寄存器指示符设为0xF。
十一、附加的4字节常数字
1、这个字的用处:irmovl的立即数数据;rmmol和mrmovl的地址指示符的偏移量;分支指令和调用指令的目的地址
2、分支指令和调用指令的目的地址是一个绝对地址。
所有整数采用小端法编码
十二、指令集的一个重要性质:字节编码必须有唯一的解释
十三、Stat描述程序执行的总体状态
值 名字 含义
1 AOK 正常操作
2 HLT 处理器执行halt指令
3 ADR 遇到非法地址
4 INS 遇到非法指令
十四、Y86没有伸缩寻址模式。
YIS:指令集模拟器,目的是模拟Y86机器代码程序的执行。
4.2 逻辑设计和硬件控制语言HCL
一、数字系统三部分组成:组合逻辑、存储器元素、时钟信号。
HCL:硬件控制语言,描述不同处理器设计的控制逻辑。
二、逻辑门
1.逻辑门产生的输出,等于它们输入位值的某个布尔函数。
2.AND &&;OR ||;NOT !
3.逻辑门只对单个位的数进行操作,而不是整个字。
4.逻辑门总是活动的。
三、构建计算块(组合电路)时的限制
1、两个或多个逻辑门的输出不能连接在一起。
2、必须无环。
四、逻辑门只对0和1操作,c语言表达式中参数可以是任意整数,0是FALSE,不是0的都是TRUE。C的逻辑表达式可能被部分求值。
五、字级的组合电路和HCL整数表达式
1、所有字级的信号都声明为int,不指定字的大小
2、在HCL中,多路复用函数是用情况表达式来描述的,通用格式如下:
[
select_1 : expr_1
select_2 : expr_2
:
:
select_k : expr_k
]
3、允许不互斥的选择表达式使得HCL代码的可读性更好。
六、存储器和时钟
1、组合电路从本质上讲,不存储任何信息。
2、时序电路的两类存储器设备:
(1)时钟寄存器(简称寄存器):存储单个位或字。
(2)随机访问储存器(简称储存器):存储多个字,用地址选择该读/写哪个字。
3、寄存器分为“硬件寄存器”和“程序寄存器”。
七、Y86处理器会用时钟寄存器保存程序计数器(PC),条件代码(CC)和程序状态(Stat)。
八、寄存器文件有两个读端口(A和B),还有一个写端口(W)。寄存器文件不是组合电路。向寄存器文件写入字是由时钟信号控制的。
九、处理器有一个随机访问存储器来存储程序数据,还包括另外一个只读存储器,用来读指令。
4.3 Y86的顺序实现
一、SEQ处理器:开发SEQ的目标就是提供实现最终目标的第一步,我们的最终目标是实现一个高效的、流水线化的处理器。
二、将处理组织成阶段
六个基本阶段:
1、取指:取指阶段从存储器读取指令字节,地址为程序计数器(PC)的值。
2、译码:译码阶段从寄存器文件读入最多两个操作数,得到值valA和valB。
3、执行:在执行阶段,算数/逻辑单元(ALU)要么执行指令指明的操作(根据ifun的值),计算存储器引用的有效地址,要么增加或减少栈指针。
4、访存:访存阶段可以将数据写入存储器;或从存储器读出数据。
5、写回:写回阶段最多可以写两个结果到寄存器文件。
6、更新PC:将PC设置成下一条指令的地址。
三、SEQ的时序:SEQ的实现包括组合逻辑和两种存储器设备:
1、时钟寄存器(程序计数器和条件码寄存器)
2、随机访问存储器(寄存器文件、指令存储器和数据存储器)
四、nop指令:只是简单的经过各个阶段,除了要将PC加1,不进行任何处理。
halt指令:使处理器状态变为HLT,导致处理器停止运行。
1.取指阶段
取指阶段包括指令存储器硬件单元。
icode-指令代码
ifun-指令功能
2.译码和写回阶段
寄存器文件有四个端口。它支持同时进行两个读和两个写,每个端口都有一个地址连接和一个数据连接,地址连接是一个寄存器ID,而数据连接是一组32根线路。
3.执行阶段
执行阶段包括算术/逻辑单元ALU。
4.访存阶段
访存阶段的任务就是读或者写程序数据。
5.更新PC阶段
SEQ中最后一个阶段会产生程序计数器的新值。
实验
结果显示与书240页数据一致。
参考资料:课本,实验五。
总结:本章简要地介绍了处理器硬件的设计,研究一个硬件系统执行某种ISA指令的方式。使我们更好地理解计算机是如何工作的。HCL:硬件控制语言,描述不同处理器设计的控制逻辑。因为上学期学过EDA课程,所以,对于Verilog语言有过接触,比较熟悉。通过本次的熟读课本和实验楼的实验,对处理器体系结构有了更深一层的理解!今后将继续努力,做得更好!