MIPS CPU 体系结构概述
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• Nesting Exceptions
容许中断嵌套的首要问题是, EPC,SR将会 被新的中断覆盖, k0,k1也需要保存起来. 由 于一般内核堆栈都不能容纳足够数量的 exception frame, 一般的做法是只容许高优 先级的中断抢占当前中断处理,这样最大的 exception frame数量和优先级数量一样多. 中断可以单独的禁止(IM7-0 ),或者通过 IE,EXL一次性全部禁止;异常是不能禁止的.
--- 仅有一种寻址模式. 这唯一的寻址方式就是16bit的有符号 displacement加上一个 base reg. 并且一旦装入寄存器, cpu按照整个 寄存器模式来操作数据, 不考虑内部是装了一个byte还是word. ---- load store 必须自然对齐: 这个规则也有例外, MIPS还是提供了特 殊指令来加载非对齐的数据. --- 跳转 所有指令都是4byte对齐的, 指令留下了26bit, 所以有 2^28=256M 的跳转可寻址空间. 并且不是相对于PC的地址,而是在一 个256M段内的绝对地址. --- 条件跳转 条件跳转更少, 16bit, 但是是相对于PC的跳转, 前后 128K.
Branch delay slot
branch到执行阶段的时候,下一条指令已经 开始运行了, 与其丢掉其结果不如继续执行 完成.即,无论最后是否执行跳转, 其后的 delay slot内的指令总会被执行.
load delay slot
当load 指令执行到MEM阶段,即从从 cache/ram读取数据的时候, 下一条指令的 ALU也同时进行, 所以紧邻load指令的指令 是不能使用load的数据的. 之后的第二个才 可以.
---- 没有条件码寄存器: MIPS的比较指令把结果存储到一个通用寄存器, 条件跳转则测 试这个通用寄存器. 这能带来的一个好处是: 两个连续的比较操作可以没有依赖关系,因 为它们可以使用不同的通用寄存器来来存储比较结果.
寄存器约定
寻址方式和内存操作
--- 内存访问只有load /store 两个指令: ALU不容许访问内存, 这样可 以保持pipe line的简单(从而更有效率).
TLB
• TLB的操作通过EntryHi, EntryLo0-1, PageMask来实现,以及其他一些辅助寄存 器. --- EntryLo0-1: CP number 2-3 --- PageMask: CP number 5 --- EntryHI: CP number 10
• TLB Key: ASID + Virtual Address
指令上的限制
--所有指令都是32bit 长度: 这样就能保证IF stage每次都花费相同时间. 64bit下,指令也 是32bit. 这个限制的附带结果是: 跳转/跳转到子函数 target 地址只有26bit, 更远的跳 转需要通过寄存器. 其余的指令,指令编码占有16bit, 只有16bit留给常数, 这样加载一个 32bit的立即数需要2条指令, 条件跳转最远64k. ---- 指令必须依照pipe line的限制制定: 比如必须在一个cycle内完成, WB阶段只能存储 一个寄存器所以所有的指令仅仅能修改一个目标寄存器. 乘除法的特殊性让MIPS采用 了不同的pipe line来完成这个操作. ---- 三个操作数的指令设计: ALU不能操作内存单元, 因为MEM阶段在ALU之后. 这样我 们有足够的指令bit 来指定3个操作数,它们都是寄存器. 3操作数的设计给编译器的设计 也带来很大的方便. (gcc 内部描述都是3操作数的指令) ----32个寄存器: 5bit一方面对于指令的编码有利,另一个方面32个寄存器对于多数应用 已经足够. ---- 零号寄存器 $0 总是返回0 ( 或许能给clear 寄存器带来方便)
参考资料
• See mips run • Mips chip manual
核心态和用户态
• 核心态:可以存取2G以下地址,但就和在用户 态一样,此时需要TLB来做地址转换. • 用户态:访问 2G以上的程序地址是非法的, 会导致陷入异常.
• 有些简单的系统,包括许多实时操作系统,全 部代码都是运行在核心态下的.
协处理器CP0
• CP0 包含的控制包括:
--- cpu配置: 比如大小端设置等 --- 高速缓存控制 --- 异常/中断控制 --- MMU 控制 --- 其它:定时器,错误检测,奇偶校验..
Exception发生时, 软件的一般处理
--- bootstrapping MIPS不会像x86那样为你保存许多关于被中断的软件的状态信息, 能用的寄存器就 k0,k1两个,你需要用着两个寄存器保存任何需要保存的信息. --- Dispatching 通过Cause(ExcCode)来调用相应中断/异常的处理函数.MIPS许多异常共享一个入口地 址. ---Constructing the exception processing environment 比如为C建立一个堆栈. 比较而言, x86可以自动为异常处理切换到一个指定的堆栈. ---Processing the exception
异常和中断
• MIPS把通常意义上的exception,interrupt,trap, system call 这些事件统称为exception,并采用统一的机制进行处理.从 性质上来看,这些事件可以分成几个种类. --- 外部事件 就是中断以及不可屏蔽的中断 --- 内存地址转换异常 就是TLB相关的. --- Other unusual program conditions for the kernel to fix: 这个分类比较模糊,典型的如浮点指令模拟. --- Program or hardware-detected errors :比如执行不存 在的指令,执行特权指令等. --- Data integrity problems: 奇偶校验或者ECC校验错误 --- System calls and traps: 系统调用,断点指令
Risc技术发展方向
• • • • • • • 32位 64位 单处理->多处理 普通流水线->超级流水线 VLIW指令级并行技术 指令和数据cache,二级cache cmos工艺 处理速度
五级流水线
• IF: 从指令高速缓存I-cache获取下一条指令 • RD: 读取该指令的源寄存器域指定的cpu寄 存器的内容 • ALU:在一个时钟周期内完成算术或者逻辑 操作(浮点运算和整数乘除例外) • MEM:读写数据高速缓存D-cache中的内存 变量 • WB:将操作结果值写到寄存器堆中.
• MIPS的原则是 all exception are created equal, 但是 并不是所有情况下都相等的
硬件中断
• Interrupt Resources in MIPS CPUs 在Cause寄存器有8个bit来描述中断,其中6个来自外部,2个是软件控制的.CPU内部的 counter/timer会连接到其中一个,一般情况下不会和外部中断共享. 中断服务控制: --- SR(IE) 如果是0,不响应任何中断 --- SR(EXL) , SR(ERL) 在任何exception发生后,其中一个bit置位,中断被禁止,CPU进入 内核模式. --- SR(IM0-7) 单独控制一个中断. 注:cause中有两个bit,被置1后如果对应IM没有禁止就会触发一个中断. 确定那个设备发出中断信号的步骤: --- 查询Cause(IP) 与上 SR(IM) 获得被使能的active interrupt请求. 有可能是多个. --- 选择一个进行处理.(按照软件定义好的优先级) --- 保存SR(IM) (或者整个SR) --- 改变SR(IM),屏蔽当前和所有低优先级的中断 --- 保存当前状态(比如各种寄存器) --- 使能SR(IE), 将SR(KSU)设置为kernel mode(如果容许嵌套,需要clear SR(EXL)这样 就需要正确的SR(KSU)) --- 调用相应中断处理函数 --- 在返回时,需要重新禁止中断, 恢复SR. 如果恢复整个SR还好,否则需要恢复SR(EXL) 让eret来做原子性的EXL恢复和返回user space.
Exception发生时, MIPS CPU的行为 1. 把EPC设置成restart地址(这里要注意delay slot 等情况) 2. 设置SR(EXL): 即强制进入kernel mode,并禁止 中断 3. 设置相关寄存器以提供足够信息:Cause寄存 器,BadVAddr,MMU相关寄存器(具体的可以看相 应中断的描述) 4. 开始从异常入口地址预取指令, 交给软件处理.
---Preparing to return 恢复保存的运行环境,如寄存器,CPU状态.
---Returning from an exception 如前面曾经讨论过的那样,返回victim和恢复CPU状态到user level(一般就是user level了) 必须同时完成, MIPS提供eret来返回到EPC记录的地址.早期的MIPS比较负责需要更多 的设置,并利用branch的delay slot执行一个rfe指令来做这个事情.
MIPS CPU 体系结构概述
Xiang xin 2010-09-19
பைடு நூலகம்
MIPS 微处理器系列产品
• • • • • R2000, MIPS I 指令集 R3000, MIPS I 指令集 R4000, MIPS III 64位指令集 R6000, MIPS II指令集 R10000, MIPS IV指令集
存储空间划分
• unmapped/mapped是指这些空间是否需要MMU才能访问. 对于mapped的地址空间, 必须有MMU的介入. • kuseg 从0x0000 0000 到0x8000 0000, 是user mode应用 所处的地址空间. kseg0/kseg1 都映射到物理地址0-512M, 不同在于一个是 通过cache访问(意味着必须先设置好cache才行), 一个是 uncache的.CPU对于kseg0,kseg1的地址处理比较简单,对 kseg0, CPU简单的把最高位bit忽略就是其物理地址, 对于 kseg1,忽略最高的3个bit即可. • Kseg1是唯一的在系统重启时能正常工作的地址空间.复位 时的入口点0xbfc00000就在这个区域.其对应的物理地址是 0x1fc00000,硬件设计必须使用这个区域去存取初始的程序 rom.该区同时可用作I/O寄存器空间.
Precise Exceptions
• Precise Exceptions是指在任何异常中我们 都指出一条指 令(victim),在这条指令前的任 何指令(sequential model of execution)都已 经执行完成,在这条指令之后的指令,你可以 当他们没有执行过(换句话说,就像没有执行 过一样). 在实现了:Precise Exceptions的 CPU上,你可以放心的忽略这个CPU的时序 问题(pipeline).