TMS320C6678的地址映射范围及性能比较
TMS320C6678 有8 个C66x 核,典型速度是1GHz,每个核有 32KB L1D SRAM,32KB L1P SRAM 和 512KB LL2 SRAM;所有 DSP 核共享 4MB SL2 SRAM。一个 64-bit 1333MTS DDR3 SDRAM 接口可以支持8GB 外部扩展存储器。 存储器访问性能对 DSP 上运行的软件是非常关键的。在 C6678 DSP 上,所有的主模块,包括多个DSP 核和多个DMA 都可以访问所有的存储器。
每个DSP 核每个时钟周期都可以执行最多128 bits 的load 或store 操作。在1GHz 的时钟频率下,DSP 核访问L1D SRAM 的带宽可以达到16GB/S。
DSP 的内部总线交换网络,TeraNet,提供了 C66x 核(包括其本地存储器),外部存储器, EDMA 控制器,和片上外设之间的互连总共有 10 个 EDMA 传输控制器可以被配置起来同时执行任意存储器之间的数据传输。
1.存储器系统简介
TMS320C6678 有8 个C66x 核,每个核有:
32KB L1D (Level 1 Data) SRAM,它和DSP 核运行在相同的速度上,可以被用作普通的数据存储器或数据cache。
32KB L1P (Level 1 Program) SRAM,它和DSP 核运行在相同的速度上,可以被用作普通的程序存储器或程序cache。
512KB LL2 (Local Level 2) SRAM,它的运行速度是DSP 核的一半,可以被用作普通存储器或cache,既可以存放数据也可以存放程序。
所有DSP 核共享4MB SL2 (Shared Level 2) SRAM,它的运行速度是DSP 核的一半,既可以存放数据也可以存放程序。
TMS320C6678 集成一个64-bit 1333MTS DDR3 SDRAM 接口,可以支持8GB 外部扩展存储器,既可以存放数据也可以存放程序。它的总线宽度也可以被配置成32 bits 或16 bits。
存储器访问性能对 DSP 上软件运行的效率是非常关键的。在 C6678 DSP 上,所有的主模块,包括多个DSP 核和多个DMA 都可以访问所有的存储器。
每个DSP 核每个时钟周期都可以执行最多128 bits 的load 或store 操作。在1GHz 的时钟频率下,DSP 核访问 L1D SRAM 的带宽可以达到 16GB/S。当访问二级(L2)存储器或外部存储器时,访问性能主要取决于访问的方式和cache。
每个 DSP 核有一个内部 DMA (IDMA),在 1GHz 的时钟频率下,它能支持高达 8GB/秒的传输。但IDMA 只能访问L1 和LL2 以及配置寄存器,它不能访问外部存储器。
DSP 的内部总线交换网络,TeraNet,提供了 C66x 核 (包括其本地存储器) ,外部存储器, EDMA 控制器,和片上外设之间的互联。总共有 10 个 EDMA 传输控制器可以被配置起来同时执行任意存储器之间的数据传输。芯片内部有两个主要的 TeraNet 模块,一个用 128 bit 总线连接每个端点,速度是DSP 核频率的1/3,理论上,在1GHz 的器件上每个端口支持 5.333GB/秒的带宽;另一个 TeraNet 内部总线交换网络用 256 bit 总线连接每个端点,速度是DSP 核频率的1/2,理论上,在1GHz 的器件上每个端口支持16GB/秒的带宽。
总共有10 个EDMA 传输控制器可以被配置起来同时执行任意存储器之间的数据传输。它们中的两个连接到256-bit, 1/2 DSP 核速度的 TeraNet 内部总线交换网络;另外8 个连接到128-bit, 1/3 DSP 核速度的 TeraNet 内部总线交换网络。
2.DSP 核,EDMA3,IDMA 拷贝数据的性能比较
数据拷贝的带宽由下面三个因素中最差的一个决定:
表1 总结了C6678 上C66x 核,IDMA 和EDMA 的理论带宽。
表2 总结了C6678 EVM(64-bit 1333MTS DDR)上各种存储器端口的理论带宽。
表3 列出了在1GHz C6678 EVM( 64-bit 1333MTS DDR)上,在不同情况下用EDMA,IDMA 和DSP 核做大块连续数据拷贝测得的吞吐量。
吞吐量由拷贝的数据量除以消耗的时间得到。
总的来说,DSP 核可以高效地访问内部存储器,而用DSP 核访问外部存储器则不是有效利用资源的方式;IDMA 非常适用于DSP 核本地存储器 (L1D,L1P,LL2) 内连续数据块的传输,但它不能访问共享存储器 (SL2, DDR) ;而外部存储器的访问则应尽量使用EDMA。
Cache 配置显著地影响DSP 核的访问性能,Prefetch buffer 也能提高读访问的效率,但它们不影响EDMA 和IDMA。这里所有DSP 核的测试都是基于cold cache(cache 和Prefetch buffer 在测试前被清空)。
前面列出的EDMA 吞吐量数据是在EDMA CC0 (Channel Controller 0) TC0 (Transfer Controller 0)上测得的,EDMA CC1 和EDMA CC2 的吞吐量比EDMA CC0 低一些,后面有专门的章节来比较10 个EDMA 传输控制器的差别。
3.DSP 核访问存储器的时延
L1 和 DSP 核的速度相同,所以DSP 核每个时钟周期可以访问L1 存储器一次。对一些特殊应用,需要非常快的访问小块数据,可以把L1 的一部分配置成普通RAM(而不是cache)来存放数据。
通常,L1 被全部配置成cache,如果cache 访问命中(hit),DSP 核可在一个周期完成访问;如果cache 访问没有命中(miss),DSP 核需要等待数据从下一级存储器中被读到cache 中。
本节讨论DSP 核访问内部存储器和外部DDR 存储器的时延。下面是时延测试的伪代码:
3.1 DSP 核访问LL2 的时延
下图是在1GHz C6678 EVM 上测得的DSP 核访问LL2 的时延。DSP 核执行512 个连续的LDDW (LoaD Double Word) 或STDW (STore Double Word) 指令所花的时间被测量,平均下来每个操作所花的时间被画在图中。这个测试使用了32KB L1D cache。
对LDB/STB 和LDW/STW 的测试表明,它们的时延与LDDW/STDW 相同。
当多个写操作之间的偏移是128 bytes 整数倍时,每个写操作都访问LL2 的相同sub-bank (LL2包含两个banks,每个bank 包含4 个总线宽度为16-byte 的sub-bank),对相同sub-bank 的连续访问的时延是4 个时钟周期。对其它的访问偏移量,连续的写操作会访问LL2 不同的bank,这样的多个访问的在流水线上可以被重叠起来,从而使平均的访问时延比较小。
C66x 核在C64x+核的基础上有很多改进,C66x 核的L2 存储器控制器和DSP 核速度相同,而 C64x+的L2 存储器控制器的运行速度是DSP 核速度的1/2。图3 比较了C66x 和C64x+ Load/Store LL2 存储器的性能。
3.2 DSP 核访问SL2 的时延
下图是在1GHz C6678 EVM 上测得的DSP 核访问SL2 的时延。DSP 核执行512 个连续的LDDW (LoaD Double Word) 或STDW (STore Double Word) 指令所花的时间被测量,平均下来每个操作所花的时间被画在图中。测试中,L1D 被配置成32KB cache。
对LDB/STB 和LDW/STW 的测试表明,它们的时延与LDDW/STDW 相同。
DSP 核读SL2 通常会通过L1D cache,所以,和访问LL2 一样,DSP 核访问SL2 的性能高度依赖cache。
XMC 中还有一个prefetch buffer (8x128bytes) ,它可以被看作是一个额外的只对读操作可用的cache。DSP 核之外的每16-MB 存储器块都可以通过MAR (Memory Attribute Register) 的PFX (PreFetchable eXternally) bit 被配置为是否通过prefetch buffer 读,使能它会对多个主模块共享存储器的效率有很大帮助;它也能显著地改善对SL2 连续读的性能。不过,prefetch buffer 对写操作没有任何作用。
当写偏移是N*256 bytes 时,每个写操作总是访问SL2 相同的bank (SL2 存储器组织结构是4 bank x 2 sub-bank x 32 bytes),对相同bank 的连续访问间隔是4 个时钟周期。对其它的访问偏移量,连续的写操作会访问SL2 不同的bank,这样的多个访问的在流水线上可以被重叠起来,从而使平均的访问时延比较小。
3.3DSP 核访问外部DDR 存储器的时延
DSP 核访问外部DDR 存储器高度依赖cache。当DSP 核访问外部存储器时,一个传输请求会被发给XMC。根据cacheable 和prefetchable 的设置,传输请求可能是下列情况中的一种:
一个数据单元 – 如果存储器空间是non-cacheable,nonprefetchable
一个L1 cache line - 如果存储器空间是cacheable 而没有L2 cache,
一个L2 cache line - 如果存储器空间是cacheable 并且设置了L2 cache。
如果要访问的数据在L1/L2 cache 或prefetch buffer 中,则不会有传输请求发出。
如果被访问的空间是prefetchable 的,可能还会产生额外的prefetch 请求。
外部存储器的内容可以被缓存在L1 cache 或/和L2 cache,或者都不用。DSP 核之外的每16-MB存储器块都可以通过MAR (Memory Attribute Register)的PC (Permit Copy) bit 被配置为是否通过cache 访问。如果PC 比特为0,这段空间就不是cacheable 的。如果PC 比特是1 而L2 cache 大小为0 (所有LL2 都被用作普通SRAM),那外部存储器的内容只会被L1 cache 缓存。如果PC比特是1 并且L2 cache 大于0,则外部存储器的内容可以被L1 和L2 cache 同时缓存。
像访问SL2 一样,对外部存储器的读操作也可以利用XMC 里的prefetch buffer。它可以通过MAR (Memory Attribute Register)的PFX (PreFetchable eXternally) bit 来配置。
如果发生cache miss,DSP 需要等待外部数据传输完成。等待的时间是请求发出时间,数据传输时间或数据返回时间的总和。
下图是在1GHz C6678 EVM(64-bit 1333MTS DDR)上测得的DSP 核访问DDR 的时延。DSP核执行512 个连续的LDDW (LoaD Double Word) 或STDW (STore Double Word) 指令所花的时间被测量,平均下来每个操作所花的时间被画在图中。测试中,L1D 被配置成32KB cache,LL2的256KB 被设置为cache。
对LDB/STB 和LDW/STW 的测试表明,它们的时延与LDDW/STDW 相同。
注意,下面第二和第三个图实际上是第一个图左边的放大。
因篇幅问题不能全部显示,请点此查看更多更全内容