热度 22
2014-3-27 09:44
1651 次阅读|
1 个评论
OpenRisc 1200 设计分析 一: OpenRSIC1200 架构 OpenRisc1200 由核心部分与外围部分组成,包括核心部分 CPU/DSP ,外围部分指令和数据高速缓存( Icache , Dcache ),数据和指令 MMU ( MMU : virtual memory support , DMMU,IMMU ),电源管理单元( PowerM ),调试单元( Debug ),定时器( Tick timer ), PIC ( Programmable Interrupt Controller )中断控制器,及它们分别对应的接口。 指令单元( instruction unit ):指令单元应用基本指令流水线从内存子系统取指令,把指令分发到各可用的执行单元,并保存状态历史记录确保可实现精确的异常模型和指令按次序执行。它还执行条件分支和非条件跳转指令。如果合适的执行单元可用,序列发生器能在每个时钟上分发一个有序的指令。执行单元必须辨别源数据是否可用,并确保没有其它指令公用一个目的寄存器。指令单元仅处理 ORBIS32 指令类,当前 OR1200 不支持 ORFPX32/64 和 ORVDX64 指令类。 通用寄存器 (GPRs) : OR1200 使用了 32 个通用 32 位寄存器。 OR1000 架构提供了寄存器文件的映像拷贝,用来在工作上下文之间快速切换,但目前 OR1200 没有提供。 OR1200 把通用寄存器文件作为两个带有 32 个 32 位字能力同步双端口内存使用。 Load/Store 单元( LSU ): load/store 单元在 GPRs 和 cpu 内部总线之间传输所有的数据,它被应用为一个独立的执行单元,安装在内存子系统中。如果有数据依赖性时,仅影响主流水线。 下面是 LSU 的主要特点: 所有的存取指令都采用硬件实现(也包括原子指令) 地址入口缓存( address entry buffer ) 流水线操作 快速存储访问时采用对其访问方式 当存取指令发送时, LSU 会确定是否所有的操作都是可执行的,包括: 地址寄存操作( address register operand ) 源数据寄存操作( source data register operand for store instructions ) 目的数据寄存操作( destination data register operand for load instructions ) 整数执行流水线( Integer Execution Pipeline ) 核采用 32 位整数指令实现下面的指令: 算术指令 比较指令 逻辑指令 翻转和移位指令 大部分的整数指令可以在一个周期内执行完毕,更多详细的关于时序的内容请参考表 TBD 。 MAC 单元( MAC unit ) MAC 单元执行 DSP MAC 指令, MAC 操作是 32*32 with 48-bit 的累加器, MAC 单元全部采用流水线,在任意一个时钟都可以接受新的 MAC 操作。 系统单元( system unit ) 系统单元连接其它没有连接到指令和数据接口的 CPU/DSP 信号,它也实现了所有的系统目标寄存器(如管理员寄存器)。 异常( exception ) 在异常条件发生时会产生核异常,在 OR1200 核中的异常来源有以下: 外部中断请求 某些存储器访问情况 内部错误,如尝试执行不能执行的指令 系统调用 内部异常,如断点异常 异常操作对于软件用户而言是透明的,其它异常也采用同样的机制。当一个异常发生时,控制信号会发送到异常处理程序中,异常在管理模式中进行处理。 RTL 级视图: