摘要
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 内部总线交流网络。
图1 展现了TMS320C6678 的存储器体系。总线上的数字代表它的宽度。大部分模块运转速度是DSP 核时钟的1/n,DDR 的典型速度是1333MTS(Million Transfer per Second)。
图1 TMS320C6678 存储器体系
本文为规划人员供给存储器拜访功能评价的基本信息;供给各种操作条件下的功能测验数据;还探讨了影响存储器拜访功能的一些要素。
本文对剖析以下常见问题会有所协助:
1. 应该用DSP 核仍是DMA 来复制数据?
2. 一个频频拜访存储器的函数会耗费多少时钟周期?
3. 当多个主模块同享存储器时,对某个模块的功能会有多大的影响?
本文中的大部分数据是在C6678 EVM (EValuation Module)板上测验得到的,它上面有64-bit 1333MTS 的DDR 存储器。
2. DSP 核,EDMA3,IDMA 复制数据的功能比较
数据复制的带宽由下面三个要素中最差的一个决议:
1. 总线带宽
2. 源端吞吐量
3. 意图端吞吐量
表1 总结了C6678 上C66x 核,IDMA 和EDMA 的理论带宽。
表1 1GHz C6678 上C66x 核,IDMA 和EDMA 的理论带宽
表2 总结了C6678 EVM(64-bit 1333MTS DDR)上各种存储器端口的理论带宽。
表2 1GHz C6678 上各种存储器端口的理论带宽
表3 列出了在1GHz C6678 EVM( 64-bit 1333MTS DDR)上,在不同状况下用EDMA,IDMA 和DSP 核做大块接连数据复制测得的吞吐量。
在这些测验中,L1 上的测验数据块的巨细是8KB;IDMA LL2->LL2 复制的数据块的巨细是32KB;其它DSP 核复制测验的数据块的巨细是64KB,其它EDMA 复制测验的数据块巨细是128KB。
吞吐量由复制的数据量除以耗费的时刻得到。
表3 DSP 核,EDMA 和IDMA 数据复制的吞吐量比较
总的来说,DSP 核能够高效地拜访内部存储器,而用DSP 核拜访外部存储器则不是有用运用资源的方法;IDMA 十分适用于DSP 核本地存储器 (L1D,L1P,LL2) 内接连数据块的传输,但它不能拜访同享存储器 (SL2, DDR) ;而外部存储器的拜访则应尽量运用EDMA。
Cache 装备显著地影响DSP 核的拜访功能,Prefetch buffer 也能进步读拜访的功率,但它们不影响EDMA 和IDMA。这儿一切DSP 核的测验都是依据cold cache(cache 和Prefetch buffer 在测验前被清空)。
对DSP 核,SL2 能够经过从0x0C000000 开端的缺省地址空间被拜访,一般这个地址空间被设置为cacheable 而且prefetchable。SL2 能够经过XMC (eXtended Memory Controller) 被重映射到其它存储器空间,一般重映射空间被用作non-cacheable, nonprefetchable 拜访(当然它也能够被设置为cacheable 而且prefetchable)。经过缺省地址空间拜访比经过重映射空间拜访略微快一点。
前面列出的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 的时延
图2 是在1GHz C6678 EVM 上测得的DSP 核拜访LL2 的时延。DSP 核履行512 个接连的LDDW (LoaD Double Word) 或STDW (STore Double Word) 指令所花的时刻被丈量,均匀下来每个操作所花的时刻被画在图中。这个测验运用了32KB L1D cache。
图2 DSP 核拜访LL2
对LDB/STB 和LDW/STW 的测验标明,它们的时延与LDDW/STDW 相同。
由于L1D cache 只要在读操作时才会被分配,DSP 核读LL2 总是经过L1D cache。所以,DSP核拜访LL2 的功能高度依靠cache。多个拜访之间的地址偏移(stride)显著地影响拜访功率,地址接连的拜访能够充分地运用cache;大于或等于64 字节的地址偏移导致每次拜访都miss L1 cache 由于L1D cache 行巨细是64 bytes。
由于L1D cache 不会在写操作时被分配,而且这儿的测验之前cache 都被清空了,所以任何对LL2 的写操作都经过L1D write buffer (4x16bytes)。对多个写操作,假如地址偏移小于16 bytes,这些操作或许在write buffer 中被兼并成一个对LL2 的写操作,然后取得挨近均匀每个写操效果1 个时钟周期的功率。
当多个写操作之间的偏移是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 C66x 和C64x+核在LL2 上Load/Store 的时延比较
3.2 DSP 核拜访SL2 的时延
图4 是在1GHz C6678 EVM 上测得的DSP 核拜访SL2 的时延。DSP 核履行512 个接连的LDDW (LoaD Double Word) 或STDW (STore Double Word) 指令所花的时刻被丈量,均匀下来每个操作所花的时刻被画在图中。测验中,L1D 被装备成32KB cache。
图4 DSP 核拜访SL2
对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 对写操作没有任何效果。
SL2 能够经过从0x0C000000 开端的缺省的地址空间拜访,这个空间总是cacheable,一般它也被装备为prefetchable。SL2 能够经过XMC 的装备被重映射到其它地址空间,一般重映射空间被用作non-cacheable, nonprefetchable 拜访(当然它也能够被设置为cacheable 而且prefetchable)。经过缺省地址空间拜访比经过重映射空间拜访略微快一点,由于地址重映射需求一个额定的时钟周期。
由于L1D cache 不会在写操作时被分配,而且这儿的测验之前cache 都被清空了,所以任何对SL2 的写操作都经过L1D write buffer (4x16bytes)。对多个写操作,假如地址偏移小于16 bytes,这些操作或许在write buffer 中被兼并成一个对SL2 的写操作,然后取得比较高的功率。XMC也有相似的写兼并buffer,它能够兼并两个在32 bytes 内的写操作,所以,对偏移小于32 bytes 的写操作,XMC 的写buffer 改进了写操作的功能。
当写偏移是N*256 bytes 时,每个写操作总是拜访SL2 相同的bank (SL2 存储器安排结构是4 bank x 2 sub-bank x 32 bytes),对相同bank 的接连拜访距离是4 个时钟周期。对其它的拜访偏移量,接连的写操作会拜访SL2 不同的bank,这样的多个拜访的在流水线上能够被堆叠起来,然后使均匀的拜访时延比较小。
图5 比较了DSP 核拜访SL2 和LL2 的拜访时延。对地址偏移小于16 bytes 的接连拜访,拜访SL2 的功能和LL2 简直相同。而对地址偏移比较大的接连拜访,拜访SL2 的功能比LL2 差。因而,SL2 最适合于寄存代码。
图5 DSP 核拜访SL2 和LL2 的功能比较
3.3 DSP 核拜访外部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 来装备。
多个拜访之间的地址偏移(stride)显著地影响拜访功率,地址接连的拜访能够充分地运用cache 和prefetch buffer;大于或等于64 字节的地址偏移导致每次拜访都miss L1 cache 由于L1D cache行巨细是64 bytes;大于或等于128 字节的地址偏移导致每次拜访都miss L2 cache 由于L2 cache 行巨细是128 bytes。
假如产生cache miss,DSP 需求等候外部数据传输完结。等候的时刻是恳求宣布时刻,数据传输时刻或数据回来时刻的总和。
图6 是在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 相同。
留意,下面第二和第三个图实际上是第一个图左面的扩大。
图6 DSP 核对DDR Load/Store 的时延
对地址偏移小于128 bytes 的拜访,功能首要受cache 的影响。
L2 cache 会在写操作时被分配,对任何写操作,cache 控制器总是先把被拜访的数据地点的cache 行(128 bytes)读进L2 cache,然后在cache 中改写数据。被改写是数据会在产生cache抵触或手艺cache 回写操作时被终究写到外部存储里。当写操作的地址偏移是1024 bytes 的整数倍时,多个拜访在L2 cache 中产生抵触的概率很大,所以L2 cacheable 写操作的时延会显著地添加。最坏的状况下,每个写操作都会导致一个cache 行的回写 (之前的数据由于抵触而被替换/回写)和一个cache 行的读入(新的数据被分配到cache 中)。
当地址偏移大于512 bytes 时,DDR 页(行)切换开支成为功能下降的首要要素。C6678 EVM上的DDR 页(行)巨细或bank 宽度是8KB,而DDR3 存储器包括8 个banks。最坏的状况是,当拜访地址偏移量是64KB 时,每个读或写操作都会拜访相同bank 中一个新的行,而这种行切换会添加大约40 个时钟周期的时延。请留意,不同的DDR 存储器的时延或许会不相同。