码迷,mamicode.com
首页 > 其他好文 > 详细

系统设计基础第六周学习总结

时间:2015-10-18 21:24:30      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

第四章 处理器体系结构

第一节 Y86指令集体系结构

一、程序员可见的状态

存储器

Y86程序用虚拟地址来引用存储器位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址

状态码stat

它表明程序执行的总体状态,会指示是正常运行还是出现了某种异常。

二、Y86指令

Movl类指令

irmovl,rrmovl,mrmovl,rmmovl

前面的两个字母是在显式的指定源操作数和目的操作数的格式,第一位是源操作数,第二位是目的操作数。

四个整数操作指令

addl 加subl andl xorl 异或

并且它们只对寄存器数据进行操作,会设置三个条件码ZF\SF\OF

七个跳转指令——分支控制

jmp 直接跳转jle(SF^OF|ZF 有符号数jl SF^OF 有符号<je ZF 相等/jne ~ZF 不相等/非零jge ~(SF^OF) 有符号jg ~(SF^OF)&~ZF 有符号>

六个条件传送指令

Cmovle  、cmovl  、cmove   、cmovne    、cmovge    、cmovg

halt指令

halt指令停止指令的执行,执行此指令会导致处理器停止,并将状态码设置为HLT

三、指令的字节级编码

字节编码必须有唯一的解释

每条指令需要1-6个字节不等,每条指令的第一个字节表明指令的类型。

第一个字节

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

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

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

当需要指明不应访问任何寄存器时,用ID0xF表示

额外需要的字节

1)附加的寄存器指示符字节

指定一个或两个寄存器,例如rA或者rB

  • 没有寄存器操作数的指令,例如分支指令和call指令,就没有寄存器指示符字节。
  • 只需要一个寄存器操作数的指令(irmovlpushlpopl)将另一个寄存器指示符设为0xF
2)附加的4字节常数可包括:

1.irmovl的立即数数据2.rmmolmrmovl的地址指示符的偏移量3.分支指令和调用指令的目的地址

四、Y86异常

状态码Stat的可能取值

Stat描述程序执行的总体状态

1. AOK 正常操作2. HLT 处理器执行halt指令3. ADR 遇到非法地址4. INS 遇到非法指令

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

一、逻辑门

1.符号表示:AND &&OR ||NOT !

2.逻辑门只对单个位的数进行操作,而不是整个字。

二、组合电路

限制:

  • 两个或多个逻辑门的输出不能连接在一起
  • 必须无环

三、集合关系

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

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

iexpr等都是整数表达式。

四、存储器和时钟

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

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

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

2.Y86处理器

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

第三节 Y86的顺序实现

一、将处理组织成阶段

具体框架分为四类:

1.针对OPl(整数和逻辑运算),rrmovl(寄存器-寄存器传送)和irmovl(立即数-寄存器传送)

 

2.针对rmmovlmrmovl

 

3.针对pushlpopl

 

4.针对跳转,callret

 

二、SEQ硬件结构

SEQ抽象视图的画法:

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

三、SEQ的时序

SEQ的实现包括组合逻辑和两种存储器设备:

1.时钟寄存器——程序计数器和条件码寄存器2.随机访问存储器——寄存器文件、指令存储器和数据存储器

对于上面提到的五个硬件单元,可以分成两类:

1.组合逻辑——指令存储器2.时序

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

四、SEQ阶段的实现

1.取指阶段

PC为第一个字节,读6个字节。

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

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

三个一位的信号(根据icode值计算)

instr_valid-发现不合法的指令need_regids-包含寄存器指示符字节吗need_valC-包括常数字吗

后五个字节是寄存器指示符字节和常数字的组合编码。

2.译码和写回阶段

3.执行阶段

1)包括算术/逻辑单元ALU,输出的是valE

ALU常被用作加法器

2)包括条件码寄存器

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

4.访存阶段

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

5.更新PC阶段

 参考资料:

http://www.cnblogs.com/20135202yjx/p/4888820.html

 

实验五:

Y86编写得程序文件

 技术分享

技术分享

技术分享

系统设计基础第六周学习总结

标签:

原文地址:http://www.cnblogs.com/20135302wei/p/4890165.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!