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级视图:
用户437027 2015-11-25 15:40