热度 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 模块 状态切换图如下: