tag 标签: openrisc-1200设计分析

相关博文
  • 热度 21
    2014-4-4 21:29
    1222 次阅读|
    0 个评论
    四: 调试单元 处理器的调试功能帮助软件开发者进行软件调试,通过调试接口,用户可以让处理器在执行到特定的程序时暂停,可以通过 JTAG 接口将 CPU 的内部状态读出到软件集成开发环境中。在流水线中,诸如程序计数器 PC 、存储 / 装载有效地址( store/load EA )、装载数据、存储数据和当前指令这样的临界信息能够通过调试接口别异步读取到软件集成开发环境中供软件调试。 OR1200 与调试相关的模块包括 OR1200 本身的调试单元( debug unit )及外置 JTAG 调试接口模块。关系可以示意如下: 调试接口 OR1200_du 提供外置 JTAG 调试接口模块到 CPU 模块的接口,外部的接口模块通过寄存器控制 OR1200_du 从而产生控制 CPU 模块工作的各种信号完成调试目的。 外置 JTAG 调试接口模块被用来连接 OR1200 到 IEEE1149.1 协议的标准调试器, JTAG 调试接口模块的框图可如下: RTL 模块框图可以如下: 调试单元是 OR1200 的一部分,该模块通过监视 CPU 的取指有效地址 EA ,加载并存储有效地址和数据信号来控制处理器的运行,从而配合集成开发环境及 JTAG 接口完成处理器的调试功能。 调试单元在 OpenRisc 体系结构中是可选择的,专用寄存器 UPR ( unit present register )的 DUP(DUP=6) 位若为 1 ,则表示调试单元存在。 调试单元的 OR1200-du 的调试停止寄存器定义了哪些情况发生时暂停处理器的执行,它能被调试软件通过 JTAG 调试接口模块编程。处理器暂停后,调试单元的调试原因寄存器定义了哪几个事件引起核心停止程序流的执行并接管开发接口的控制。 调试单元的结构可以如下所示: OR1200 调试单元的基本特点如下: 1)   定义了 8 对调试值寄存器( debug value register )和调试控制器寄存器( debug control register ) 2)   允许匹配取指有效地址 EA 、加载、存储有效地址和数据,数据可以是有符号和无符号的数据 3)   允许将匹配条件联合起来实现更加复杂的观察点( watchpoint ) 4)   观察点可以产生断点( breakpoint ),进而生成自陷异常( trap exception ) 5)   观察点的发生次数可以计数后再生成自陷异常 需指出的是,观察点和断点是被匹配编程在调试寄存器中条件的程序或者数据流触发事件。断点与观察点不同,它还挂起当前程序流的执行,并开始断点例外处理。   JTAG 开发接口模块 外置 JTAG 调试接口模块别用来连接 OR1200 到使用 IEEE1149.1(JTAG) 协议标准的调试器, JTAG 控制器的电路如下: 该控制器主要包括 3 个部分组成,即 TAP ( Test Access Port ,测试端口)控制器,指令寄存器(包括指令译码器)和数据寄存器。
  • 热度 19
    2014-4-2 16:30
    1203 次阅读|
    0 个评论
    三:数据和指令高速缓存( Icache , Dcache ) OR1200 数据高速缓存与指令缓存的机制是一样的,仅一数据缓存为例。 OR1200 数据高速缓存的默认配置是 8KB 的一条通道直接映射的数据高速缓存,它允许 CPU 核心快速访问数据。数据高速缓存也可以配置为 1 、 2 、 4 、 8KB 的形式,其特征如下: 数据缓存独立于指令缓存(哈弗结构) 数据缓存采用 a least-recently used (LRU) 替代算法实现 缓存目录采用物理寻址方式,物理地址的 tag 存储在缓存的目录中 支持连续写操作 靠写特殊的目的寄存器可实现无效和非使能 缓存采用 16bytes 突发长度进行组织,突发组织被描述为关键字先操作,关键字同时写入 cache 中,然后是请求单元( requesting 单元),因而由于 cache fill 延时的原因会使 stalls 最小化。 Cache 为 cache tags 和 cache line 替换功能提供存储单元。      数据 cache 和外部接口是紧密耦合的,能够允许有效的访问系统存储控制器。 数据 cache 利用 32bits 的且连接至 LSU 单元的接口为 GPRs 单元提供数据, LSU 单元同所有的逻辑用于计算有效地址,控制数据输入输出数据 cache 时的边界对齐,维持存取操作的秩序。数据缓存的写操作可以是整字节的,半字的或全字的。 数据缓存按照 512 sets of one line 进行组织的,每行包括 16 字节,状态位及地址标记。每行包含 4 个来自存储器的连续字节,这些字节在存储器中是边界对齐的。这样 cache line 也与页边界对齐。 RTL 级代码分析:( data cache 和 instruction cache )   从 RTL 层级也可以看出 data cache 和 instruction cache 的机制是一样的,包括缓存状态机模块( or1200_dc_fsm ),缓存数据存储模块 (or1200_dc_ram) ,缓存标签存储器( or1200_dc_tag ),它们与其它模块的连接关系可以由下图示意出: 模块图: OR1200 数据缓冲存储器由两部分构成,即 OR1200_dc_tag 模块和 OR1200_dc_ram 模块。 Dcache 的默认大小为 8KB , dcache 共 512 行,每行由 16 个字节, 1 个标志地址标签有效的状态位和 19 位的地址标签组成。因此缓存行内的偏移为 4 ,可由虚拟地址的低 4 位得到。 OR1200_dc_ram 的默认大小为 2048*32 位, OR1200_dc_tag 的默认大小为 512*20 位,他们都是同步 ram 。 Dache 采用直接映射方式,因此虚拟地址的【 12:4 】位为缓存的行地址,可访问 512 行,虚拟地址的【 31:13 】共 19 位,可作为地址标签。 这两个模块其实就是 ram ,模型可以如下: OR1200_dc_fsm 模块 状态切换图如下: