国产DSP FT-M6678开发-Cache控制器

        FT-M6678与TI C6678一致,在DSP内部存在两级核内存储器,其中一级程序存储控制器(L1P),一级数据存储控制器 (L1D),二级存储控制器 (L2),其中 L2 为 512KB, L1 分为 L1P 和 L1D,容量均为 32KB。

L1P:

        L1P 主要作用是负责直接向 CPU 提供指令,根据取指单元计算出的 PC值取回相应的指令包。

        对于L1P来说,最大32KB,软件可配置SRAM和Cache的比例:

1. L1P支持 2 种 flush 操作:全局作废、块作废;L1P Cache 的一致性由软件维护;

2. 支持Freeze模式:可以保护 Cache 中已有的关键程序,在 Freeze 模式下 L1P 不会分配新的数据行,不发生替换。 Freeze 模式对正常的 flush 操作无影响;

3. 支持 IDMA/EMC 访问,可以从 L1P SRAM 快速导入和导出程序;

4. 支持内置带宽管理机制和存储保护机制;

L1D:

        L1D 是最靠近 CPU 的数据存储体,其工作频率与 CPU 保持一致。

1. L1D 可配置 SRAM/Cache 比例, 当程序修改 CFG 寄存器改变 L1D 配置模式时由硬件自动写回并作废 Cache 中已有的数据。利用 DMA 可以从 L1D SRAM 快速导入和导出数据;

2. 支持 6 种 Cache Flush 操作: 3 种块操作——块写回、块无效、块写回并无效; 3 种全局操作——L1D 全局写回、全无效、全写回并无效。 当程序进行 L2 flush 操作时, L1将进行镜像操作。

3. 支持 Freeze Mode。可以保护 Cache 中已有的重要数据,当读缺失发生时, L1D 既不会发生替换,也不会分配新数据行。 Freeze 模式对正常的 flush 操作无影响。

4. 支持 IDMA/EMC 访问,可以从 L1D SRAM 快速导入和导出数据。

L2:

        L2 Cache 作为 L1D 和 L1P 公用的下一级存储器, 既可以放程序也可以放数据, 总容量为 512KB。其中 L2 SRAM 内的数据可以在 L1D/L1P Cache 中存在副本,并且支持 EMC/IDMA 的访问。

1. L2 可配置 SRAM/Cache 比例, 当修改 CFG 寄存器 Mode 域改变 L2 配置模式时由硬件自动写回并作废 Cache 中已有的数据;

2. 支持 6 种 Cache Flush 操作: 3 种块操作——块写回、块无效、块写回并无效; 3 种全局操作——全局写回、全局作废、全局写回并作废。 当程序进

行 L2 flush 操作时, L1 将进行镜像操作;

3. 支持 Freeze Mode。可以保护 Cache 中已有的重要数据, L2 在 Freeze 模式下不会发生替换,也不会分配新数据行。 Freeze 模式对正常的 flush 操作无影响;

4. 可缓存性与可预取性控制;

5. 支持存储保护和带宽管理机制。

一致性维护

        下面就是编程时很重要的地方了,一致性维护问题:

        M66x 提供了两种方式维护一致性,一种是硬件自动维护(仅维护 L2SRAM 与 L1D Cache 之间的一致性),一种是软件干预的手动 flush, 即:

1. 硬件自动维护 CorePac 内 L2 SRAM 与 L1D Cache 之间的一致性;

2. 硬件不维护 CorePac 的 L2 SRAM 与 L1P Cache 之间的一致性;

3. 硬件不维护外存数据与 L1 或 L2 Cache 中的副本之间的一致性。

        由文档可以看出L2SRAM和L1D Cache之间的一致性是硬件维护的,也就是不需要执行FLUSH操作就可以实现数据一致性维护。

Flush 操作

L1 和 L2 支持多种 flush 操作,按操作的范围可以将其大致分为两类:

1. 块 flush 操作——简称块/局部操作,它针对一个特定地址范围内的数据进行的操作;

2. 全局 flush 操作——简称全局操作,它是对 Cache 中所有数据进行的操作。

        从操作的类型来看, L1 和 L2 支持以下 3 类操作:

1. 作废(Invalidate, I) ——直接将缓存块作废,数据直接丢弃;

2. 写回(Writeback, W) ——将脏数据写回,数据仍保留在 Cache 中;

3. 写回作废(Writeback-Invalidation, WI)——将脏数据写回,数据不保留在 Cache中。

        在进行 Cache flush 时,L1 会跟随 L2 做镜像操作,即如果 L2 进行了某种 flush操作, L1P 和 L1D 将自动进行相应的 flush 操作。举例: L2 进行全局 WI 操作,那么 L1P 和 L1D 将自动进行全局 WI 操作(由于 L1P 中不可能有脏数据,这里相当于 L1P 进行全局 I 操作)。

全局FLUSH

        程序通过向相应的全局 flush 控制寄存器(L1PI, L1DI, L1DW, L1DWI, L2I,L2W, L2WI)中写入 1 来启动对应的全局 flush,操作完成之后硬件自动清零,程序可以通过以下两种方式来确定 flush 操作是否完成:

1. 检测全局控制寄存器的值是否为 0;

2. 在写全局控制寄存器后加 MFENCE 指令。

        由于在进行 Cache flush 时, L1 会跟随 L2 做镜像操作,下表列出了 L2 支持的全局 flush 命令及其对 L1 的影响。

块FLUSH

        块 flush 操作与全局 flush 操作具有相似的功能,区别在于块操作的对象仅是针对一定范围内的数据块,数据块由基地址和字数这一对寄存器指定。

        块 flush 操作的应用过程如下:

1. 向 XXBAR 寄存器写入起始基地址;

2. 向 XXWC 寄存器写入计数值;

3. 通过以下两种方式来等待块操作的完成:

        a) 采用 MFENCE 指令(推荐);

        b) 循环检测 XXWC 寄存器的计数值,直至 XXWC 的值变为零。

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值