Download presentation
Presentation is loading. Please wait.
1
KeyStone I DSP[C665x 与 C6678] 视频教程
熊谷辉 广州创龙电子科技有限公司
2
演示环境 开发套件 TL665x-EasyEVM + SOM-TL665x[DSP C6655/57] TL6678-EasyEVM + SOM-TL6678[DSP C6678] 仿真器 TL-XDS560v2 开发环境 CCSv5[5.5] CCSv6[6.2] 相关产品 FPGA 板卡 TL-A7HSAD[Xilinx Artix 7] TL-K7FMC[Xilinx Kintex 7] DSP + FPGA 板卡 核心板 SOM-TL665xF[DSP C6655/57 + Xilinx Artix 7] 开发板 TL665xF-EasyEVM
3
C66x DSP 内存、内存保护与地址扩展(MPAX)、缓存与预取
4
内存 资料来源于 TI 文档
5
存储器类型 大小 TMS320C665x TMS320C6678 L1P程序存储器 32KB L1D数据存储器 L2存储器 1024KB
内存 存储器类型 大小 TMS320C665x TMS320C6678 L1P程序存储器 32KB L1D数据存储器 L2存储器 1024KB 512KB MSMC多核共享内存 1MB 4MB DDR存储器 最大8GB 资料来源于 TI 文档
6
C665x 内存映射 - C665x Core0 Core1 L1,L2 L1,L2 资料来源于 TI 文档 DSP 本地内存映射
SOC 全局内存映射 资料来源于 TI 文档
7
内存映射 - C6678 C6678 DSP 本地内存映射 SOC 全局内存映射 SOC 全局内存映射 资料来源于 TI 文档
8
复位后内存映射图 MPAX提供地址扩展/转换功能,将32位的逻辑地址映射到36位物理地址上。
资料来源于 TI 文档
9
MPAX应用案例 资料来源于 TI 文档
10
MPAX段寄存器 资料来源于 TI 文档
11
MPAX段寄存器 - PERM PERM域内容 资料来源于 TI 文档
12
MPAX段寄存器 - SEGSZ SEGSZ域内容 资料来源于 TI 文档
13
BADDR(20-bit):逻辑基地址,需要把32位的逻辑地址的高20位写到该域,低12位默认为0。
MPAX段寄存器 - BADDR、RADDR BADDR(20-bit):逻辑基地址,需要把32位的逻辑地址的高20位写到该域,低12位默认为0。 RADDR(24-bit):物理基地址(替换地址),需要把映射的36位物理地址的高24位写到该域,低12位默认为0。 资料来源于 TI 文档
14
BADDR=A0000h; RADDR=0C0000; Size=1MB
MPAX使用举例 1MB A A00FFFFF BADDR=A0000h; RADDR=0C0000; Size=1MB Segment2 0:0C000000 0:0C0FFFFF XMPAXH2[BADDR] = 0xA0000 XMPAXH2[SEGSZ] = 0x13 XMPAXL2[RADDR] = 0x0C0000 XMPAXL2[PERM] = 0x3F 资料来源于 TI 文档
15
C66x Cache Memory 架构 缓存 描述 替换策略 可缓存性 访问时间 大小 Cache Line L1 Program 程序 直接映射(Direct Mapped) 读分配(Read Allocate) 总是缓存 1 Cycle 4K / 8K / 16K / 32K 字节 32 字节 L1 Data 数据 2 路组相关(Set Associative) 回写(Write Back) 最近最少使用(Least Recently Used (LRU)) 可配置 64 字节 L2 程序及数据 4 路组相关(Set Associative) 读写分配(Read & Write Allocate) 32K / 64K / 128K / 256K / 512K / 1024K 字节 (C665x L2最大1024K,C6678 L2最大512K) 128字节 Allocation The process of finding a location in the cache to store newly cached data. This process can include evicting data that is presently in the cache to make room for the new data. Direct-mapped cache A direct-mapped cache maps each address in the lower-level memory to a single location in the cache. Multiple locations may map to the same location in the cache. This is in contrast to a multi-way set-associative cache, which selects a place for the data from a set of locations in the cache. A direct-mapped cache can be considered a single-way set-associative cache. Read allocate A read-allocate cache only allocates space in the cache on a read miss. A write miss does not cause an allocation to occur unless the cache is also a write-allocate cache. For caches that do not write allocate, the write data would be passed on to the next lower-level cache.
16
缓存初始化 缓存大小 L1 Program L1 Data L2 可缓存性 配置 MAR
17
CSL SYS/BIOS 缓存大小配置 #include “csl_cache.h”
CACHE_setL1PSize(CACHE_L1_32KCACHE); CACHE_setL1DSize(CACHE_L1_32KCACHE); CACHE_setL2Size(CACHE_512KCACHE); SYS/BIOS #include <ti/sysbios/family/c66/Cache.h> Cache_Size cacheSize; cacheSize.l1pSize = Cache_L1Size_32K; cacheSize.l1dSize = Cache_L1Size_32K; cacheSize.l2Size = Cache_L2Size_512K; Cache_setSize(&cacheSize); 缓存大小配置
18
CSL SYS/BIOS 内存可缓存性配置 #include "cslr_cgem.h" #include "cslr_device.h"
for(i = 128; i < 131; i++) { C66xCorePacRegs->MAR[i] = 1 | (1 << CSL_CGEM_MAR0_PFX_SHIFT); } SYS/BIOS #include <ti/sysbios/family/c66/Cache.h> Cache_setMar((Ptr *)0x , 0x , Cache_Mar_ENABLE; 内存可缓存性配置
19
内存可缓存性配置 MARn TMS320C66x DSP CorePac User Guide
20
CSL SYS/BIOS 软件维护缓存一致性 #include "dspcache.h"
CACHE_invAllL1d (CACHE_Wait wait); CACHE_wbAllL1d (CACHE_Wait wait); CACHE_wbInvAllL1d (CACHE_Wait wait); CACHE_invL1d (void* blockPtr, Uint32 byteCnt, CACHE_Wait wait); CACHE_wbL1d (void* blockPtr, Uint32 byteCnt, CACHE_Wait wait); CACHE_wbInvL1d (void* blockPtr, Uint32 byteCnt, CACHE_Wait wait); 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(); 软件维护缓存一致性 CACHE_invAllL1p (CACHE_Wait wait); CACHE_invL1p (void* blockPtr, Uint32 byteCnt, CACHE_Wait wait); CACHE_invAllL2 (CACHE_Wait wait); CACHE_wbAllL2 (CACHE_Wait wait); CACHE_wbInvAllL2 (CACHE_Wait wait); CACHE_invL2 (void* blockPtr, Uint32 byteCnt, CACHE_Wait wait); CACHE_wbL2 (void* blockPtr, Uint32 byteCnt, CACHE_Wait wait); CACHE_wbInvL2 (void* blockPtr, Uint32 byteCnt, CACHE_Wait wait);
21
预取缓冲可以减少缓存读缺失(miss),从而减少阻塞周期,提高存储器的读性能。
数据预取缓冲:8个槽(slot),每个槽包含128字节。还具有12个候选缓冲槽。 数据预取过程: 检测到有效的预取请求 根据L1D或者L2的数据请求,在流检测过滤器(候选缓冲)中进行比较 当检测到匹配条目时,过滤器为流在预取缓冲中分配一个新的槽,同时为这个槽进行数据预取 当检测不匹配时,将会放弃当前候选缓冲的槽,对下一个候选缓冲槽操作。 程序预取缓冲:4个槽(slot),每个槽包含32字节。程序预取缓冲是一个简单的预取引擎,可以直接对L1P和L2的程序读请求进行预取。 C66x ISA 比 C674x ISA 增强了复数操作指令和 SIMD 指令
22
DSP1从“ping”中读取1024字节,这将会触发预取。 DSP0写1024字节到“pong” DSP1从“pong”读取1024字节
预取一致性问题(例子) 与缓冲一致性问题类似,当DSP与另一个主设备同时操作可预取的内存空间时,就可能会导致一致性问题,例如在MSMC中的一个ping-pong缓冲,两个DSP同时操作的情况: DSP0 DSP1 DSP0写1024字节到“ping” DSP0中断DSP1 DSP1从“ping”中读取1024字节,这将会触发预取。 DSP0写1024字节到“pong” DSP1从“pong”读取1024字节 Cache Cache 预取 预取 ping pong MSMC 步骤6中DSP1读取的数据有可能会因为预取一致性问题而存在部分错误数据。 C66x ISA 比 C674x ISA 增强了复数操作指令和 SIMD 指令
23
将两个共享区域分开,例如前面将“ping”和“pong”两个共享区域分开放不同位置
预取一致性问题 - 解决办法 禁用预取,设置MARn的第3位 将两个共享区域分开,例如前面将“ping”和“pong”两个共享区域分开放不同位置 读取前使用XPFCMD.INV失效预取缓冲 MARn C66x ISA 比 C674x ISA 增强了复数操作指令和 SIMD 指令
24
O(∩_∩)O~ KeyStone I DSP [C665x 与 C6678] 视频教程 广州创龙电子科技有限公司
Similar presentations