tag 标签: openrisc-1200

相关博文
  • 热度 14
    2014-3-28 11:03
    1277 次阅读|
    1 个评论
    二: CPU/DSP 模块 CPU/DSP 核心由指令单元( instruction unit )、通用寄存器( GPRs )、异常单元( exceptions )、系统单元( system unit )、整数执行流水线( integer ex pipeline )、 MAC 单元( MAC unit )、 load/store unit ( lsu ),及它们对应的接口。     Cpu/dsp 单元代码包括如下单元: alu 模块接收来自 ctrl 的运算加减及逻辑运算,移位及比较指令,结果反馈到 result 线上,由 wbmux 模块选择输出到 rf 寄存器文件或者输出到 operandmuxes ,再由 lsu 模块装入存储器。 Cfgr 从 or1200 的 vr , upr 和配置寄存器读出配置值,由 spr_addr 地址总线上来的地址读出配置寄存器的值,这些值被传送到 sprs 模块中; Ctrl 模块完成指令解码的大部分工作,它将来自 if 模块的指令进行分析解码后,分解成 rf 模块的 rama 和 ramb 读地址和读使能信号。 Except 模块在一个异常发生后,设置异常类型,将 sr 寄存器数据拷贝到 esr 寄存器,将程序计数器地址拷贝到 epcr 寄存器,将指令出错地址拷贝到 eear 寄存器。各种异常信号、 pc 地址及 lsu 的地址等传入到 except 模块,该模块触发各种异常,刷流水线,并将异常的各种寄存器值传给 sprs 模块存储。 Freeze 产生暂停逻辑(停 cpu 流水线及指令支取等),它根据异常信息、模块停止信息及高速缓存出错信息等产生 genpc_freeze 、 if_freeze 、 id_freeze 、 ex_freeze 及 wb_freeze 暂停信号控制流水线中的各个模块。   Genpc 模块根据分支指令集异常寄存器信息等计算程序计数器 pc 的地址,并将地址传给指令高速缓存。 If 模块从指令高速缓存中输入指令数据及地址,并将指令分发给 ctrl 模块解码,将指令地址分发给 except 模块存储。输出停止信号到 freeze 和 except 模块,输出重支取信号到 genpc 模块,将引起的异常送到 cpu 内部总线上。 Lsu 模块是 load/store 单元,是 cpu 和 dc 之间的接口。 Mult_mac 模块是 32*32 位乘法累加器模块。 Operandmuxes 模块是个操作数多选 2 的选择器,它从 rf 模块的数据输出、 wbmux 模块的数据输出及 ctrl 模块的 simm 引脚输出中选择两个数据输出,数据输出 a 到 lsu 模块作为基地址,数据输出 b 作为其他模块的数据输入。 Rf 模块是 cpu 内部的寄存器文件 ram ,它实例化两个双端口 ram 或通用寄存器文件 ram ,将来自 wbmux 模块的输出的数据和 sprs 模块输出的数据写入通用寄存器,或将通用寄存器的数据输出到 operandmuxes 模块或 sprs 模块。 Sprs 模块提供了到 spr 特殊寄存器的即可,它解码 spr 地址并访问 spr 。 Spr 特殊寄存器的数据被输出到各个模块,对各个模块进行控制。   Wbmux 模块是 or1200 的回写复用器,它使用一个 4 选 1 的选择器,从 4 路输入中选择 1 路进行输出,在流水线回写暂停时,使用 rfwb_op 设置 muxreg_valid 输出,这个回写复用器是 cpu 的流水线的回写阶段。、