缓存

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

内存可缓存性配置
StarterWare
#include "dspcache.h" CacheEnableMAR((unsigned int)0xC0000000, (unsigned int)0x08000000);
SYS/BIOS
#include <ti/sysbios/family/c64p/Cache.h> Cache_setMar((Ptr *)0x80000000, 0x10000000, Cache_Mar_ENABLE;
读写分配(Read & Write Allocate)
最近最少使用 (Least Recently Used (LRU))
可配置
回写(Write Back)
32K / 64K / 128K / 256K 字 节
L1 Program Cache Memory 架构
L1 Data Cache Memory 架构
C674x Cache Memory 架构
C674x Cache Memory 架构
缓存
描述
L1 Program
程序 直接映射(Direct Mapped) 读分配(Read Allocate)
替换策略
可缓存性 访问时间
大小
总是缓存 1 Cycle
4K / 8K / 16K / 32K 字节
Cache Line 32 字节
缓存
缓存 Cache 1、缓存概述 2、缓存使用 3、缓存一致性问题
内存架构
减少内存平均访问时间
缓存原理
y[0] = h[0] × x[0] + h[1] × x[1] + ... + h[5] × x[5] y[1] = h[0] × x[1] + h[1] × x[2] + ... + h[5] × x[6]
L2 数据被其它主外设更新时 L2 控制器会根据地址检测数据是否存在于 L1 Data 如果在硬件就从 L2 复制到 L1 Data CPU 读取数据时 如果在 L1 Data 就读取 如果不在就直接从 L2 读取
软件维护缓存一致性
缓存一致性维护操作
Cache 数据失效 Cache 数据回写 Cache 数据失效并回写
软件维护缓存一致性 - 数据 缓存一致性维护操作
Cache 数据失效 Cache 数据回写 Cache 数据失效并回写
CPU 对 DDR 写操作
CPU 核心对代码的修改怎么办? CPU 对 DDR 读操作
软件维护缓存一致性
StarterWare
#include "dspcache.h"
CacheInvL1pAll(); CacheInv(unsigned int baseAddr, unsigned int byteSize); CacheWBAll(); CacheWB(unsigned int baseAddr, unsigned int byteSize); CacheWBInvAll(); CacheWBInv(unsigned int baseAddr, unsigned int byteSize);
内存可缓存性配置
内存可缓存性配置
TMS320C674x DSP Megamodule Reference Guide
缓存架构
缓存访问流程
缓存一致性问题
读取数据 / 写入数据
缓存
CPU 核心
内存
其它 主外设
在任何时刻,CPU 或者其它 Master 访问存储器中数据时,由于CACHE 的存在造成不 能够得到最近更新过的数据,就会出现CACHE 一致性问题。
使用缓存
缓存大小
L1 Program L1 Data L2
可缓存性
配置 MAR
缓存大小配置
StarterWare
#include "dspcache.h" CacheEnable(L1DCFG_L1DMODE_32K | L1PCFG_L1PMODE_32K | L2CFG_L2MODE_256K);
SYS/BIOS
#include <ti/sysbios/family/c64p/Cache.h>
Cache_inv(Ptr blockPtr, SizeT byteCnt, Bits16 type, Bool wait); Cache_invL1pAll(); Cache_wb(Ptr blockPtr, SizeT byteCnt, Bits16ห้องสมุดไป่ตู้type, Bool wait); Cache_wbAll(); Cache_wbInv(Ptr blockPtr, SizeT byteCnt, Bits16 type, Bool wait); Cache_wbInvAll();
缓存一致性问题
类型
L1 Program
L1 Data
程序
不需要缓存 不存在一致性问题
N/A
L2
存在一致性问题 1、程序被 CPU 修改 2、程序被主外设修改 软件维护一致性
DDR
数据
N/A
不需要缓存 不存在一致性问题
存在一致性问题 硬件维护一致性
存在一致性问题 软件维护一致性
硬件维护缓存一致性
L2 数据被 CPU 更新时 其它主外设读取数据时 L2 控制器会根据地址检测数据是否存在于 L1 Data 如果在硬件就直接从 L1 Data 读 取 如果不在就从 L2 读取
SYS/BIOS
#include <ti/sysbios/family/c64p/Cache.h> Cache_Size cacheSize; cacheSize.l1pSize = Cache_L1Size_32K; cacheSize.l1dSize = Cache_L1Size_32K; cacheSize.l2Size = Cache_L2Size_256K; Cache_setSize(&cacheSize);
L1 Data
数据
2 路组相关(Set Associative) 读分配(Read Allocate)
最近最少使用 (Least Recently Used (LRU))
回写(Write Back)
可配置
1 Cycle
4K / 8K / 16K / 32K 字节
64 字节
程序及数据
L2
4 路组相关(Set Associative)
操作 全局失效 全局回写 全局失效并回写 部分失效 部分回写 部分失效并回写
L1 Program L1PINV N/A N/A L1PIBAR / L1PIWC N/A N/A
L1 Data L1DINV L1DWB L1DWBINV L1DIBAR / L1DIWC L1DWBAR / L1DWWC L1DWIBAR / L1DWIWC
L2 L1INV L2WB L2WBINV L2IBAR / L2IWC L2WBAR / L2WWC L2WIBAR / L2WIWC
软件维护缓存一致性 - 程序 缓存一致性维护操作
Cache 数据失效 Cache 数据回写 Cache 数据失效并回写
其它主外设对 DDR 中代码修改
CPU 核心对代码的修改怎么办? 其它主外设对 L2 中代码修改
相关文档
最新文档