130 likes | 509 Views
MIPS 体系结构介绍. 张福新. MIPS CPU 的发展. MIPS I 1987 MIPS R2000(16MHZ) 1990 MIPS R3000(33MHZ) 1990 IDT R3051(20MHZ) MIPS III 1991 MIPS R4000 (100MHZ) 1993 IDT/QED R4600(100MHZ) 1993 MIPS R4400(150MHZ) 1995 NEC/MIPS Vr4300(133MHZ) MIPS IV 1996 MIPS R10000 (200MHZ) 1996 SGI/QED R5000(200MHZ).
E N D
MIPS 体系结构介绍 张福新
MIPS CPU的发展 • MIPS I • 1987 MIPS R2000(16MHZ) • 1990 MIPS R3000(33MHZ) • 1990 IDT R3051(20MHZ) • MIPS III • 1991 MIPS R4000 (100MHZ) • 1993 IDT/QED R4600(100MHZ) • 1993 MIPS R4400(150MHZ) • 1995 NEC/MIPS Vr4300(133MHZ) • MIPS IV • 1996 MIPS R10000 (200MHZ) • 1996 SGI/QED R5000(200MHZ)
MIPS 体系结构特点(1) • 定长指令(32bit) • 32个通用寄存器(寄存器0恒为0) • 三操作指令格式(两个源一个目标) • 无条件码 • 只有load/store指令访存 • 单一寻址模式 • Load/store要求对齐 • 跳转指令范围限制: 绝对跳转256M,相对跳转128K • 乘除法专用hi,lo寄存器
MIPS 体系结构特点(2) • 没有字节或者半字运算指令 • 没有特殊的栈支持 • ABI • 最小化的过程调用支持 • 跳转并联接指令 jal,jalr • 最简化的中断和例外处理支持 • EPC,CAUSE寄存器,特定入口 • 软件处理上下文保存和mmu管理 • 和流水线实现相关的一些特点 • 延迟槽: delayed branch和load delay slot • 乘除法部件的独立性 • 一些控制指令的相关
MIPS 处理器控制 • Coprocessor 0 • 设置CPU配置 • 控制cache • 例外/中断处理 • 存储管理 • 其他:时钟,事件计数器等
Cache 管理 • 任务: • 初始化 • 检测cache大小,清除内容 • DMA • 从内存DMA数据到外部设备前要写回cache中的内容 • 从外部设备DMA数据到内存后,cache相应内容必须在使用这些数据前清空 • 写指令 • 处理cache alias • 手段 • Cache指令: writeback,invalidate,writeback_invalidate等
例外和中断 • MIPS CPU响应例外时的动作: • 当前的PC保存到epc控制寄存器 • 进入核心模式,禁止中断 • 例外的原因记录在cause寄存器中,对地址例外,badvaddr寄存器也记下产生例外的地址,对MMU管理的例外,另外有一些MMU寄存器会被设置 • CPU开始从例外入口地址取指;大多数例外的入口地址都一样,个别有特殊需要的例外有自己的入口
MIPS CPU中断 • 8个中断位,可分别屏蔽;两个软件中断,六个硬件中断引脚 • Cause控制寄存器8位指示哪个引脚发生中断,status控制寄存器有8位用于屏蔽相应中断,另外有EXL/ERL位用于全部屏蔽
内存管理和TLB • 地址空间 • TLB • 控制指令 • 控制寄存器 • 表项内容
MIPS CPU 地址空间 0xffffffff 0xc000 0000 0xa000 0000 0x8000 0000 0x0000 0000
MIPS指令集 • Nop • 寄存器移动:move • 取常数:立即数(li,lui)或者地址(la) • 算术逻辑指令:add/addi/addu/addiu,…,set if型指令slt,slti,sltiu,sltu等 • 整数乘除:mult,multu,div,divu,mfhi,mflo,mthi,mtlo • load/store: lb/lbu/lh/lhu/lw/lwu/ld/ldl/ldr/lwl/lwr/ll/lld,sb/sh/sw/sd/sdl/sdr/swl/swr/sc/scd • 跳转、函数调用和分支:相对跳转(bne,beql,blt,…)绝对跳转(j,jr),函数调用(…and link,如jal,jalr,bal等) • 断点和陷阱:break,syscall,teq,teqi,tge… • Cp0指令cfc0,ctc0;mfc0,mtc0,dmfc0,dmtc0;eret,cache,sync;tlbp,tlbr,tlbwi,tlbwr;wait,suspend; • 浮点指令 cfc1/ctc1;mfc1,mtc1,dmfc1,dmtc1;mov.s/mov.d;…
MIPS 汇编 • 寄存器命名和使用约定 • 宏指令 • 汇编程序员或者高级语言编译器使用,被汇编器翻译为一个指令序列,如li d,j在0<=j<65536时被翻译为addiu d,$zero,j;在j必须用32位表示时,翻译为lui d,hi16(j);ori d,d,lo16(j) • 汇编指示 • .set
MIPS C代码和可移植性 • 常见问题 • 需要显式的cache管理 • CPU速度变化引起的时序问题 • 数据对齐和数据在内存的分布 • 尾端(字节次序) • 指针的符号: kseg0/kseg1地址>2G • Signed/unsigned char • Int的大小 • 依赖于栈的程序:尽量使用stdargs/alloca等函数 • 参数传递和自动转换 • 库函数的不确定语义 • 头文件不兼容