1 / 38

MIPSI 指令集 32 位 CPU MiniCore 设计实例

MIPSI 指令集 32 位 CPU MiniCore 设计实例. 赵继业. 处理器特性介绍. 全 32 位操作, 32 个 32 位通用寄存器,所有指令和地址全为 32 位 静态流水线 ( 3 ~ 5 级) Forwarding 技术 片内 L1 Cache ,指令、数据各 4KByte ,硬件初始化 没有 TLB ,但 系统控制协处理器( CP0 )具有除页面映射外的全部功能. MIPSI 指令格式介绍. 1 、 R 类型指令(寄存器) OP rs rt rd shamt funct 2 、 I 类型指令(立即数) OP rs rt Imm

khuong
Download Presentation

MIPSI 指令集 32 位 CPU MiniCore 设计实例

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MIPSI指令集32位CPUMiniCore设计实例 赵继业

  2. 处理器特性介绍 • 全32位操作,32个32位通用寄存器,所有指令和地址全为32位 • 静态流水线(3~5级) • Forwarding技术 • 片内L1 Cache,指令、数据各4KByte,硬件初始化 • 没有TLB,但系统控制协处理器(CP0)具有除页面映射外的全部功能

  3. MIPSI指令格式介绍 1、R类型指令(寄存器) OP rs rt rd shamt funct 2、I类型指令(立即数) OP rs rt Imm 3、J类型指令(跳转) OP target

  4. MiniCore所支持的指令 • 算术逻辑类指令 • ADD、ADDI、SUB、AND、OR、NOR、SLL、SRL、SRA • 访存类指令 • LW、SW、MTC0、MFC0、CACHE(0、1) • 跳转类指令 • J、JR、BEQ • 其他指令 • ERET、TEQ

  5. MiniCore流水线结构 单条指令运行步骤 • Fetch & Decode(取指并译码) • Issue(发射) • Execute & Writeback(执行并写回)

  6. 存储系统体系和管理• 操作方式:用户态、核心态

  7. MiniCore功能模块结构

  8. 取指模块(Fetch) • PC-> 指令Cache -> 指令-> 译码 • PC的来源:PC+4(通常)、跳转指令(目标地址)、例外处理(例外处理向量入口地址、EPC内容) • 停止取指的情况(发射堵塞、特殊指令) • 跳转指令的Delay Slot(延迟槽) • 指令Cache的实现问题(同步与异步RAM)

  9. PC的来源

  10. 停止取指的情况 • 发射堵塞(Issue_stall) • 出现指令有相关情况 • 特殊指令(Special Instruction) • 有些情况需要停止取指,如Cache0、跳转指令(无转移预测)、出现取指地址错例外等等 • 如何处理 • 设置PC的有效位,一旦停止取指,有效位置无效

  11. 跳转指令的延迟槽(Delay Slot) • 延迟槽的意义 • MIPS指令系统的规定,由编译器自动处理 • 处理跳转指令的方法 • 遇见跳转指令就停止取指,直到获得目标地址(流水线的要求) • 采用分支预测 • J指令的处理,在ALU模块中计算转移地址 • 原则:必须保证处在延迟槽的指令被运行!

  12. 指令Cache对取指模块的影响 • RAM的同步、异步问题 • 同步写入,读出的同步、异步问题 • 指令Cache必须保证一拍结果返回 • 采用异步读RAM的处理方式(正常方式) • 解决方法 • 提前将PC的内容放入RAM中 • 相应的考虑 • 指令Cache的比较对象(必须一致) • 设置PC备份寄存器 • 设置pc_in_en,决定PC是否可以进入寄存器 • pc_valid的考虑(实际上提前一拍)

  13. 译码模块(Decode) • 由MIPS指令转化为CPU内部操作码 • 内部操作码的定义 • 应当分组(ALU、MEM、Branch) • 分组示例 • ALU:ADD -> 00001、SUB -> 00011 • MEM:LW -> 10000、 SW -> 10001 • Branch: J -> 11000、BEQ -> 11010

  14. 发射模块(Issue) • 静态流水线 • 遇到相关情况就停止发射,直到相关解决 • 相关情况分析 • ALU和跳转指令一拍完成,即使出现这些指令间的相关也没有问题 • MFC0、MTC0、CACHE0和CACHE1指令也是一拍完成 • 访存指令中的LW、SW指令执行时间不确定,其后指令有相关必须停止发射 • 停止发射也必须同时停止取指

  15. 发射模块中必须考虑的问题 • 两个功能部件(ALU和数据Cache) • 区别:执行指令的周期数不同 • 结果:指令的结束顺序被打乱(前面访存指令的结果尚未返回,后面与之不相关的ALU指令已经完成) • 必须考虑:一旦指令(包括ALU指令和访存指令)运行中出现例外,如何处理?

  16. 修改发射策略 • 访存等待 • 一旦遇到访存指令,必须等访存指令结果返回后,下一条指令才能发射出去 • 优点:顺序发射,顺序结束,例外处理比较简单方便 • 缺点:指令间没有相关也必须等待!

  17. 乱序执行时的精确例外处理 • 两种方式: • 乱序发射,顺序结束(龙芯-1采用的方式) • 指令执行完后,等待,直到允许写回才能写入到寄存器中 • 顺序发射,乱序结束(MiniCore采用的方式) • 分析乱序结束出现的情况 • 一条访存指令运行结束前,之后数条ALU指令已经执行完毕

  18. MiniCore的解决方式 • ALU指令出现例外 • 停止取指,停止发射,停止写回,直到访存结果返回之后,进入例外处理程序 • 访存指令出现例外 • 例外种类,地址错例外 • 处理方式,判断地址错例外的时机,一拍完成 • 优缺点 • 优点:不出现前后指令相关则无需等待 • 缺点:例外处理比较复杂

  19. Forwarding技术 • 什么是Forwarding? • 发射时必须判断寄存器内容是否可用 • 运算指令即便一拍完成,该指令结果也必须在下一拍对发射可用 • 实现对运算结果的侦听,一旦结果总线上结果可用就直接取值用于发射 • 效率较高,在“龙芯-1”中使用Forwarding技术前后性能差距超过10%

  20. Forwarding图解

  21. 算术及逻辑模块(ALU) • 是一个运算单元 • 根据发射来的指令码判断所应当做的操作 • 不同指令的结果存储寄存器不同(Rd或Rt) • 判断指令执行所导致的例外(溢出、自陷) • 主要目标:尽量节省硬件开销

  22. 控制寄存器模块(Control Register) • 主要进行例外处理 • 所能够处理的例外 • 复位、地址错(取指、访存读、访存写)、溢出、自陷、保留指令、中断 • 所实现的例外处理寄存器 • 计数(Count)、比较(Compare)、状态(Status)、原因(Cause)、例外地址(EPC)、版本标识(Prid)

  23. 需要考虑到的问题 • 两个操作:MTC0、MFC0 • 必须一拍完成并且返回结果 • EPC内容 • 当一条指令发生例外时,如果前一条指令不是跳转指令,则EPC内容为发生例外的指令PC值,否则是前一条指令的PC值,同时Cause寄存器中的BD位置1 • 原则:必须全面考虑所有例外情况

  24. 地址错例外的处理 • 三种地址错情况(取指、访存读、访存写) • 取指 • 例外作为取指的结果送回,并当作一条特殊指令对待,直到送入控制寄存器模块,发生例外 • 取指模块判断地址错后,停止取指 • 访存读、写 • 在ALU模块中直接判断是否发生访存地址错例外,如果发生,直接进入控制寄存器模块,而不进入Cache模块 • 同时清除在发射模块中标志访存操作的标志位

  25. 例外之前的指令结果尚未返回 • 停止之后指令的取指、发射、写回 • 将当前指令的内容和PC值放入控制寄存器模块中储存起来 • 待前面指令内容返回之后,发出例外信号,转入例外处理程序的入口地址 • 发出例外信号的同时,判断EPC中应存放的例外地址并置入

  26. Cache模块 • 指令Cache和数据Cache独立 • 直接映射 • 写回机制 • 虚地址低位查找(Index、Offset) • 物理地址高位比较 • 各4KByte大小 • Cache Line是32Byte(256bit)

  27. Cache的组织 • Cachestate:4种状态,单处理器只使用两种 • Invalid(00) ※ • Share(01) • Clean Exclusive(10) • Dirty Exclusive(11) ※

  28. 32bit物理地址的划分 • Tag(20位):比较是否命中 • Index(7位):查找哪一个Cacheline • Offset(5位):定位Cacheline中哪一个字节

  29. Cache的工作流程(读) • 目的:32bit物理地址->访存结果(32bit)

  30. Cache的工作流程(写) • 只有数据Cache才需要写内存 • 如果Tag比较命中,直接写入Cacheline中 • 如果没有命中,需要先把内存中的相同物理地址内容读入Cache中,再写入 • 如果Cacheline中原有状态位为Dirty,则还需要把原有内容按该物理地址写入到内存中去 • 理解Writeback与Writethrough的区别

  31. 块操作(Block) • 在CPU使用Cache时,所有的Cache访存操作都是块操作,一次一个Cacheline • 与单字操作相比,块操作提高了效率 • CPU直接访存,不使用Cache时,采用单字操作 • MiniCore中使用Cache硬件初始化,都是块操作,如果是操作系统软件初始化,就必须存在单字操作

  32. 接口模块 • 连接CPU与外部设备(北桥、内存、外设等) • 允许CPU访问Cache未命中所需的外部资源,同时也允许外设访问CPU内部资源 • 信号转换(Reset、Interrupt)和信息交换(访存请求、访存结果) • CPU内外频率配合(内频=外频×倍频)

  33. 接口模块设计要求 • 与北桥连接为双向三态总线(0、1、Z) • 能够提供内外频率转换 • 将Cache发出的块操作转化为八个地址请求,并连续发出 • 将北桥返回的访存结果拼成一个Cacheline(256bit),送至Cache模块 • 外部信号(Reset、Interrupt)锁存后,送往CPU内部

  34. 北桥接口信号说明 • Oe:CPU输出使能,1bit • Ie:北桥输入使能,1bit • Iee:CPU允许北桥输入使能,1bit • Sys_con:系统双向传递总线,65bit • Sys_con[64]:1->CPU写操作,2->CPU读操作 • Sys_con[63:32]:32bit地址信号 • Sys_con[31:0]:32bit数据信号

  35. 北桥接口信号 • Oe=1,表示CPU发出访存请求,此时iee=0,ie=0 • Oe=0,表示CPU所发的访存请求结束,此时iee=1,允许北桥传送数据 • Ie=0,表示北桥发送访存结果,此时oe=0,iee=0 • CPU、北桥均无请求,sys_con总线置高阻态

  36. 实验说明(1) • MiniCore所使用的北桥仅仅是一个初级的SRAM控制器,连接CPU和SRAM及ROM • SRAM大小为2MB,ROM大小为1MB • 实验提供北桥和SRAM及整个系统顶层的Verilog代码,实验者自行设计CPU内部所有模块

  37. 实验说明(2) • 设计CPU内部电路所使用的Verilog代码必须均为可综合方式 • 所有时序器件必须使用同步逻辑(时钟上跳沿触发),不能使用异步逻辑(电平触发) • 提供Cache模块中SRAM的仿真用Verilog文件,不能自行用寄存器搭建

  38. 实验说明(3) • 在完成CPU设计之后,将对其进行进一步的综合(Synthesis),生成网表(netlist)文件 • 对网表文件进行零延迟仿真和时序反标仿真(back annotation) • 观察综合及三次仿真(包括行为级仿真)结果,完成实验最终报告

More Related