一些CPU设计实例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北桥接口信号说明
• • • • 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数据信号
PC的来源
停止取指的情况
• 发射堵塞(Issue_stall)
– 出现指令有相关情况
• 特殊指令(Special Instruction)
– 有些情况需要停止取指,如Cache0、跳转指令 (无转移预测)、出现取指地址错例外等等
• 如何处理
– 设置PC的有效位,一旦停止取指,有效位置无效
跳转指令的延迟槽(Delay Slot)
– 顺序发射,乱序结束(本实例采用的方式)
• 分析乱序结束出现的情况
–一条访存指令运行结束前,之后数条ALU指令 已经执行完毕
解决方式
• ALU指令出现例外
–停止取指,停止发射,停止写回,直到访存结 果返回之后,进入例外处理程序
• 访存指令出现例外
–例外种类,地址错例外 –处理方式,判断地址错例外的时机,一拍完成
Cache的组织
Cachestate:4种状态,单处理器只使用两种 • • • • Invalid(00) Share(01) Clean Exclusive(10) Dirty Exclusive(11) ※ ※
32bit物理地址的划分
• Tag(20位):比较是否命中 • Index(7位):查找哪一个Cacheline • Offset(5位):定位Cacheline中哪一个字节
Cache的工作流程(读)
• 目的:32bit物理地址->访存结果(32bit)
Cache的工作流程(写)
• 只有数据Cache才需要写内存 • 如果Tag比较命中,直接写入Cacheline中 • 如果没有命中,需要先把内存中的相同物 理地址内容读入Cache中,再写入 • 如果Cacheline中原有状态位为Dirty,则还 需要把原有内容按该物理地址写入到内存 中去 • 理解Writeback与Writethrough的区别
例外之前的指令结果尚未返回
• 停止之后指令的取指、发射、写回 • 将当前指令的内容和PC值放入控制寄存器 模块中储存起来 • 待前面指令内容返回之后,发出例外信号, 转入例外处理程序的入口地址 • 发出例外信号的同时,判断EPC中应存放 的例外地址并置入
Cache模块
• • • • • • • 指令Cache和数据Cache独立 直接映射 写回机制 虚地址低位查找(Index、Offset) 物理地址高位比较 各4KByte大小 Cache Line是32Byte(256bit)
取指&译码 发射 执行&写回
取指&译码
发射
访存
写回
MIPS存储系统体系和管理 • 操作方式:用户态、核心态
功能模块结构
取指模块(Fetch)
• PC-> 指令Cache -> 指令-> 译码 • PC的来源:PC+4(通常)、跳转指令(目标地址)、
例外处理(例外处理向量入口地址、EPC内容)
• 停止取指的情况(发射堵塞、特殊指令) • 跳转指令的Delay Slot(延迟槽) • 指令Cache的实现问题(同步与异步RAM)
控制寄存器模块(Control Register)
• 主要进行例外处理 • 所能够处理的例外
– 复位、地址错(取指、访存读、访存写)、溢 出、自陷、保留指令、中断
• 所实现的例外处理寄存器
– 计数(Count)、比较(Compare)、状态 (Status)、原因(Cause)、例外地址 (EPC)、版本标识(Prid)
发射模块(Issue)
• 静态流水线
– 遇到相关情况就停止发射,直到相关解决
• 相关情况分析
– ALU和跳转指令一拍完成,即使出现这些指令 间的相关也没有问题 – MFC0、MTC0、CACHE0和CACHE1指令也 可以是一拍完成 – 访存指令中的LW、SW指令执行时间不确定, 其后指令有相关必须停止发射
• 三种地址错情况(取指、访存读、访存写) • 取指
– 例外作为取指的结果送回,并当作一条特殊指令 对待,直到送入控制寄存器模块,发生例外 – 取指模块判断地址错后,停止取指
• 访存读、写
– 在ALU模块中直接判断是否发生访存地址错例外, 如果发生,直接进入控制寄存器模块,而不进入 Cache模块 – 同时清除在发射模块中标志访存操作的标志位
• 延迟槽的意义
– MIPS指令系统的规定,由编译器自动处理
• 处理跳转指令的方法
– 遇见跳转指令就停止取指,直到获得目标地址 (流水线的要求) – 采用分支预测 – J指令的处理,在ALU模块中计算转移地址
• 原则:必须保证处在延迟槽的指令被运行!
指令Cache对取指模块的影响
• RAM的同步、异步问题
译码模块(Decode)
• 由MIPS指令转化为CPU内部操作码 • 内部操作码的定义
– 应当分组(ALU、MEM、Branch)
• 分组示例
– ALU:ADD -> 00001、SUB -> 00011 – MEM:LW -> 10000、 SW -> 10001 – Branch: J -> 11000、BEQ -> 11010
北桥接口信号
• oe=1,表示CPU发出访存请求,此时iee =0,ie=0 • oe=0,表示CPU所发的访存请求结束,此 时iee=1,允许北桥传送数据 • ie=0,表示北桥发送访存结果,此时oe= 0,iee=0 • CPU、北桥均无请求,sys_con总线置高阻 态
实验说明(1)
• 本实例所使用的北桥仅仅是一个初级的 SRAM控制器,连接CPU和SRAM及ROM • SRAM大小为2MB,ROM大小为1MB • 实验提供接口、北桥和SRAM及整个系统顶 层的Verilog代码,实验者自行设计CPU内 部其余所有模块
MIPSI指令集32位CPU 设计实例
赵继业
处理器特性介绍
• 全32位操作,32个32位通用寄存器,所有 指令和地址全为32位 • 静态流水线(3~5级) • Forwarding技术 • 片内L1 Cache,指令、数据各4KByte,硬 件初始化 • 没有TLB,但系统控制协处理器(CP0)具 有除页面映射外的基本功能
– 同步写入,读出的同步、异步问题
• 指令Cache必须保证一拍结果返回
– 采用异步读RAM的处理方式(正常方式)
• 解决方法
– 提前将PC的内容放入RAM中 – 相应的考虑
• 指令Cache的比较对象(必须一致) • 设置PC备份寄存器 • 设置pc_in_en,决定PC是否可以进入寄存器 • pc_valid的考虑(实际上提前一拍)
– LW、SW、MTC0、MFC0、CACHE(0、1)
• 跳转类指令
– J、JR、BEQ、BGTZ、GLEZ
• 其他指令
– ERET、TEQ
流水线结构
单条指令运行步骤 • Fetch & Decode(取指并译码) • Issue(发射) • Execute & Writeback(执行并写回)
实验说明(2)
• 设计CPU内部电路所使用的Verilog代码必 须均为可综合方式 • 所有时序器件必须使用同步逻辑(时钟上 跳沿触发),不能使用异步逻辑(电平触 发) • 提供Cache模块中SRAM的仿真用Verilog文 件,不能自行用寄存器搭建
实验说明(3)
• 在完成CPU设计之后,将对其进行进一步 的综合(Synthesis),生成网表(netlist) 文件 • 对网表文件进行零延迟仿真和时序反标仿 真(back annotation) • 观察综合及三次仿真(包括行为级仿真) 结果,完成实验最终报告
• 停止发射也必须同时停止取指
发射模块中必须考虑的问题
• 两个功能部件(ALU和数据Cache) • 区别:执行指令的周期数不同 • 结果:指令的结束顺序被打乱(前面访存 指令的结果尚未返回,后面与之不相关的 ALU指令已经完成) • 必须考虑:一旦指令(包括ALU指令和访存 指令)运行中出现例外,如何处理?
修改发射策略
• 访存等待
– 一旦遇到访存指令,必须等访存指令结果返回 后,下一条指令才能发射出去
• 优点:顺序发射,顺序结束,例外处理比 较简单方便 • 缺点:指令间没有相关也必须等待!
乱序执行时的精确例外处理
• 两种方式:
– 乱序发射,顺序结束(龙芯-1采用的方式)
• 指令执行完后,等待,直到允许写回才能写入到寄 存器中
• 效率较高,在“龙芯-1”中使用Forwarding 技术前后性能差距超过10%
Forwarding图解
ADD R3,R5,R2 SUB R4,R1,R3
发射判断 执行&写回
R3 可用 R4 可用
发射判断 执行&写回
发射判断 执行&写回
算术及逻辑模块(ALU)
• • • • • 是一个运算单元 根据发射来的指令码判断所应当做的操作 不同指令的结果存储寄存器不同(Rd或Rt) 判断指令执行所导致的例外(溢出、自陷) 主要目标:尽量节省硬件开销
• 优缺点
–优点:不出现前后指令相关则无需等待 –缺点:例外处理比较复杂
Forwarding技术
• 什么是Forwarding?
– 发射时必须判断寄存器内容是否可用 – 运算指令即便一拍完成,该指令结果也必须在 下一拍对发射可用 – 实现对运算结果的侦听,一旦结果总线上结果 可用就直接取值用于发射
MIPS指令格式介绍
1、R类型指令(寄存器) OP rs rt rd shamt funct 2、I类型指令(立即数) OP rs rt Imm 3、J类型指令(跳转) OP target
所支持的指令
• 算术逻辑类指令
– ADD、ADDI、SUB、AND、OR、NOR、SLL、 SRL、SRA
• 访存类指令
接口模块
• 连接CPU与外部设备(北桥、内存、外设 等) • 允许CPU访问Cache未命中所需的外部资 源,同时也允许外设访问CPU内部资源 • 信号转换(Reset、Interrupt)和信息交换 (访存请求、访存结果) • CPU内外频率配合(内频=外频×倍频)
接口模块设计要求
• 与北桥连接为双向三态总线(0、1、Z) • 能够提供内外频率转换 • 将Cache发出的块操作转化为八个地址请求, 并连续发出 • 将北桥返回的访存结果拼成一个Cacheline (256bit),送至Cache模块 • 外部信号(Reset、Interrupt)锁存后,送 往CPU内部
块操作(Block)
•ቤተ መጻሕፍቲ ባይዱ在CPU使用Cache时,所有的Cache访存操 作都是块操作,一次一个Cacheline • 与单字操作相比,块操作提高了效率 • CPU直接访存,不使用Cache时,采用单 字操作 • 本实例中使用Cache硬件初始化,都是块操 作,如果是操作系统软件初始化,就必须 存在单字操作
需要考虑到的问题
• 两个操作:MTC0、MFC0
– 必须一拍完成并且返回结果
• EPC内容
– 当一条指令发生例外时,如果前一条指令不是 跳转指令,则EPC内容为发生例外的指令PC值, 否则是前一条指令的PC值,同时Cause寄存器 中的BD位置1
• 原则:必须全面考虑所有例外情况
地址错例外的处理