20145317《信息安全系统设计基础》第六周学习总结(1)
20145317《信息安全系统设计基础》第六周学习总结(1)
第四章 处理器体系结构
指令体系结构:一个处理器支持的指令和指令的字节级编码
4.1Y86指令集体系结构
Y86:包括定义各种状态元素、指令集和它们的编码、一组编程规范和异常事件处理。
Y86程序中的每条指令都会读取或修改处理器状态的某些部分。
Y86具体包括:8个程序寄存器、3个条件码ZF\SF\OF、程序计数器(PC)
Y86用虚拟地址引用存储器位置。 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态。
注意:条件码只与整数操作指令有关
高4位是代码部分,低4位是功能部分
只需要一个寄存器操作数的指令将另一个寄存器指示符设为0xF。
指令集的一个重要性质:字节编码必须有唯一的解释。
Y86异常:a.状态码Stat,描述程序执行的总体状态。
b.代码值1,命名为AOK,表示程序执行正常;
c.代码值2,命名为HLT,表示处理处执行一条halt指令;
d.代码值3,命名为ADR,表示处理器试图从一个非法存储器地址读或者向一个非法存储器地址写,可能是当取指令的时候,也可能是当读或者写数据的时候。
e.异常处理程序、信号处理程序。
4.2逻辑设计和硬件控制语言HCL
4.2.1 逻辑门
逻辑门是数字电路的基本计算元素,也可以看做是物理结构与逻辑结构的映射,逻辑门接受信号的输入,并根据信号产生一定的输出,而输出则是输入的布尔函数,也就是说,输出只能是0或者1。下图是and门(’与’门)、or门(‘或’门)和not门(‘非’门)的标准符号,你可以看做它们代表了一组线路的组成方式
and: or: not:
4.2.2 组合电路和HCL布尔表达式
两个逻辑门的输出不能连接到一起,否则它们可能会使线上的信号矛盾,因此可能会得到一个不合法的电压或故障。比如1个0V和1个1V接到一起,会不会出来个0.5V,又或者类似于正负极相接,直接短路了呢。
组合的电路必须是无环的。也就是说输出不能再当做输入,否则会使这个函数产生歧义。
4.2.5 储存器和时钟
组合电路是一直持续输出的,因此它无法保持一个状态不变。但我们的计算机是需要存储数据的,因此就需要能保存状态的存储设备。存储设备则是由一个时钟控制,时钟就像一个开关一样,它控制着存储设备什么时候更新设备里的值。
时钟寄存器:存储单个位或者单个字。时钟信号来控制寄存器是否要加载输入的值。
随即访问存储器:存储多个字。用地址来选择该读、写哪个字。
寄存器文件一般有两个读端口和一个写端口。每个端口都附带一个地址来标识操作的是哪个寄存器,而对于写端口,还有一个输入数据,对于读端口,则还有一个输出数据。具体的图示如下。
可以看到在寄存器文件的写端口处,有一个时钟(clock)控制着写的操作。当时钟变化时,输入数据的值将会更新到对应的寄存器当中。而对于读数据,则类似于组合电路,根据输入的地址值(src),寄存器文件则会输出相应的数据。
4.3 Y86的顺序实现
SEQ处理器:每一个时钟周期上,SEQ执行处理一条完整指令所需的所有步骤。
将处理组织成阶段:
取址:valP:PC的值加上已取出指令的长度。
译码:读入指令rA和rB字段指明的寄存器。
执行:ALU执行指令指明的操作,计算存储器引用的有效地址,要么增加或者减少栈指针,得到的值为valE;对跳转指令来说,这个阶段会检验条件码和分支条件。
访存:可以将数据写入存储器,或者从存储器读出数据。置为valM。
写回:最多可以写两个结果到寄存器文件。
更新:将PC设置成下一条指令的地址。
执行一条指令需要的处理过程:执行指令所表明的操作、计算地址、更新栈指针、确定下一条指令的地址。
对于三种控制转移指令的处理:需要注意位信号Cnd。 在更新PC阶段,检查这个标志,如果这个标志为1,将PC设为valC(跳转目标),如果为0,就设为valP(下一条指令的地址)。
SEQ线路图的画图惯例:
浅灰色方框表示硬件单元
控制逻辑块是用灰色圆角矩形表示的
线路的名字在白色椭圆中说明
宽度为字长的数据连接用中等粗度的线表示
宽度为字节或者更窄的数据连接用细线表示
单个位的连接用虚线表示