第六周学习报告

第四章小结(处理器体系结构)

一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构(ISA)

一、Y86指令集体系结构

1、程序员可见的状态

Y86程序中的每条指令都会读取或者修改处理器状态的某些部分,这称为程序可见状态。Y86的处理器状态类似于IA32.有8个程序寄存器:%eax.%edx.%esp.%ebx.%esi.%edi.%ebp.

处理器的每个寄存器都寄存一个字。寄存器%esp被入栈、出栈、调用和返回指令作为栈指针。在其他情况中,寄存器没有固定的含义或者固定值,有3个一位的条件码:zf,sf,of.

Y86程序用虚拟地址来引用存储器位置。硬件和操作系统软件联合起来将虚拟地址翻译成实际或者物理地址,指明数据实际保存在存储器中的哪个地方。

2、Y86指令

Y86指令集,指令集就是我们处理器实现的目标。一条指令含有一个单字节的指令指示符,可能含有一个单字节的寄存器指示符,还可能含有一个四字节的常数字。字段fn指明是某个整数操作OPI,数据移动条件,或者是分支条件。

IA32的movl指令分成了4个不同的指令:irmovl,rrmovl,mrmovl,rmmovl.分别显示地指明源和目的格式。

有四个整数操作指令,它们是addl,subl,andl,和xorl,

有七个跳转指令,是jmp,jle,jl,je,jne,jg

call指令将返回地址入栈,然后跳到目的地址。

pushl和popl指令实现了入栈和出栈。

halt指令的停止指令的执行。

3、指令编码

每条指令需要1~6个字节不等,这取决于需要哪些字段。每部分4位,高4位代码部分,低4位是功能部分。

8个程序寄存器中每个都有相应的0~7的寄存器标识符。

程序寄存器存在cpu中的一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器ID作为地址的随机访问存储器。在指令编码中以及在我们的硬件设计中,当需要指明不应访问任何寄存器时,就用ID值0xf表示。

有些指令需要一个附加的4字节常数字。

4、Y86常值

处理器通常会调用一个异常处理程序,这个过程被指定用来处理遇到的某种类型的异常。

5、Y86程序

以“."开头的词是汇编器命令,它们告诉汇编器调整地址,以便在那儿产生代码或者插入数据。

整数操作里代码部分均为6,功能部分区分addlsublandlxorl

分支指令里代码部分均为7

传送指令里代码部分均为2

6、一些Y86的指令的详情

因为要入栈的寄存器会被同一条指令修改,通常有两种约定(1)压入%esp的原始值,2)压入减去4的%esp的值)

 

特指poplpushl,在压入/弹出栈指针%esp的时候,有两种不同的约定:

 

1.压入/弹出%esp的原始值2.压入/弹出%esp-/+4后的值

 

经过试验,发现默认压入弹出的都是原始值。

 

pushl在不同的x86模型之间有歧义,但是popl没有。

 

 

二、逻辑设计和硬件控制语言HCL

1、逻辑门

逻辑门是数字电路的基本计算元素,他们产生的输出,等于它们输入位置的某个布尔函数。

and用&&表示,or用||表示,not用!表示

2、组合电路和hcl布尔表达式

将逻辑块组合成一个网,就能构建计算块,称为组合电路。

C的逻辑表达式允许参数是任意参数,0表示false,其他任何值都表示true,而逻辑门只对位置0和1进行操作。

这里的函数func是不会被调用的,因为表达式a&&a!为0,而组合逻辑没有部分求值这条规则,逻辑门只是简单的响应输入的变化。

3、字级的组合电路和hcl整数表达式

将所有字级的信号声明都为int,不指定字的大小。每个字都可以声明为有特定的位数。

4、集合关系

在处理器设计中,很多时候需要将一个信号与很多可能匹配的信号做比较。在处理的某个指令代码是否属于某一类代码。

判断集合关系的通用格式是:

iexpr in {iexpr1,iexpr2,...,iexprk}

iexpr等都是整数表达式。

5、存储器和时钟

时钟寄存器

随机访问存储器

 

1.时序电路的两类存储器设备:

 

1)时钟寄存器(简称寄存器):储存单个位或字。

 

2)随机访问储存器(简称储存器):储存多个字,用地址选择该读/写哪个字。

 

寄存器分为硬件寄存器程序寄存器

 

2.Y86处理器

 

它会用时钟寄存器保存程序计数器PC,条件代码CC和程序状态Stat

 

这一节学习的时候对比EDA课程中学习的Verilog语言的规则,大同小异,但是要注意迁移——把指令对应到位的操作上。

 

三、Y86的顺序实现

1、将处理组织成阶段

取指:取指阶段从存储器读取指令字节,地址为程序计数器PC的值。

译码:译码阶段从寄存器文件读入最多两个操作数,读入ra/tb指明的寄存器,不过有些指令是读寄存器%esp的

执行:算术/逻辑单元要么执行指令指明的操作,计算存储器引用的有效地址,要么增加,或者减少栈指针。也可能设置条件码。

访存:访存阶段可以将数据写入存储器,或者存储器读出数据。

写回:写回阶段最多可以写两个结果到寄存器文件

更新PC:将PC设置成下一条指令的地址。

跟踪subl指令的执行,跟着rmmovl指令的执行,跟踪pushl指令的执行,跟着je指令的执行,跟着ret指令的执行,详细可看书。

2、seq硬件结构

 

画法:

 

  • 程序计数器放在寄存器中,位于左下角PC
  • 信息随着线流动,方向是先向上再向右
  • 反馈先祖在右边向下
  • 所有硬件单元的处理都在一个时钟周期内完成。
  • 浅灰色方块表示硬件单元
  • 控制逻辑块是用灰色圆角矩形表示的
  • 线路的名字在白色椭圆中说明
  • 宽度为字长或更窄的数据连接用细线
  • 单个位的连接用虚线

 

3、seq的时序

现在还剩下四个硬件单元需要对它们的时序进行明确的控制——程序计数器、条件码寄存器、数据存储器、和寄存器文件。

要控制处理器中活动的时序,只需要寄存器和存储器的时钟控制。

跟踪seq两个执行周期,每个周期开始时,状态元素根据前一条指令设置。信号传播通过组合逻辑,创建出新的状态元素的值。在下一个周期开始时,这些值会被加载到状态元素中。

 

条件码寄存器——只在执行整数运算指令时装载数据存储器——只在执行rmmovlpushlcall时写入寄存器文件——两个写端口允许每个时钟周期更新两个程序寄存器。特殊寄存器?0xF表示此端口不应执行写操作。

 

4、seq阶段的实现

 

取值:以PC为第一个字节,读6个字节。

 

两个逻辑块(从第一个字节中分出,各四位)

 

icode-指令代码ifun-指令功能

译码和写回阶段

 

执行阶段:包括算术/逻辑单元ALU,输出的是valEALU常被用作加法器。包括条件码寄存器

 

零,符号,溢出,产生信号set_cc

访存阶段:

 

两个数据块产生存储器地址和存储器输入证据的值,两个产生控制信号表明应该是读还是写。

根据icode,imem_error,instr_valid,dmem_error,从指令执行的结果计算状态码Stat

更新PC阶段。

 

实验楼实践:

 

 

 

 

感想:自己基础不好,前面一段时间没有抓紧时间找成绩好的同学请教,所以上一次和这一次的自学略懂皮毛,很惭愧。没有尽力的学。参考资料这次有像博客写的好的闫佳欣同学借鉴,看了她往日的博客发现总结的十分详细。下来我需要结合她的笔记再学一遍第三章,还要向学得好的同学请教,得努力了。嗯

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2015-10-18 12:20  20135325  阅读(209)  评论(0编辑  收藏  举报

导航