TI的TMS320C6000是基于超长指令字(VLIW)结构的通用DSP系列。该结构包括定点的C62x、浮点的C67x和新的C64x。
C64x和C62x代码兼容,但结构有显著的加强,其初期的工作频率可达750MHz。C67x在C62x八个功能块中的六个上增加了浮点功能,因此其指令集是不同的。
C6000没有专门的MAC单元,而是使用分开的乘法和加法指令来实现MAC操作。尽管该操作需要两个指令周期,但其流水的效果仍然是单周期执行。这种结构包含两个数据通道,以便和各有四个功能单元的两组相匹配。
C62x和C64x包含两个乘法单元(M)、六个32-bit的算术单元、40-bit的ALU和40-bit的桶型移位器。C64x的M单元每个时钟周期执行两个16316-bit的乘法,而C62x则只能执行一个乘法。此外,C64x的每个M单元可以在每个周期内作四个838-bit的乘法。M单元的位计数和旋转硬件,可以支持bit水平的算法。
C64x的其他单元各有其强大的功能。例如,逻辑单元(L)可以作byte移位和四个8-bit的绝对值减法。该绝对值差指令对于运动估计算法是很有好处的。M单元和S单元都具有双向可变bit的移位功能。C64x除S单元和L单元外,D单元也可以执行32-bit的逻辑指令。L单元和D单元可以装入5-bit的常数,而S单元可以装入16-bit的常数。C64x的每个功能单元组都各有其32个32-bit的寄存器组,而在C62x中,每个功能单元组都各只有16个32-bit的寄存器组。每个程序可以将通用寄存器用于数据、数据地址指针,或条件代码。
在所有的C6000器件中,用户可以将寄存器A4-A7及B4-B7用于循环寻址。程序可以使用任何寄存器作为循环计数器,从而将标准的条件寄存器释放作他用。在C64x中,两个功能单元组中的任何一个都可以使用另一个的寄存器组。而在C62x中,功能单元组是通过一组数据总线来执行该过程的。
在C62x中,除两个D单元外的所有功能单元都有访问另一个功能单元组的数据交叉通道。在C64x中,允许每个功能单元组中的多个单元通过数据交叉通道,同时读同一个交叉通道信源。也就是说,一个功能单元组中的一个、多个、乃至全部单元,可以在一个VLIW执行包中使用交叉通道的操作数。而在C62x中,每个数据通道、每个执行指令包,只有一个功能单元可以访问对方寄存器组的操作数。
C62x的寄存器组打包16-至40-bit的定点数和64-bit的浮点数。用户可以将多于32-bit的值存储在寄存器对中。C64x的寄存器支持C62x的所有数据类型,以及打包的8-bit类型和64-bit定点数。打包的数据类型存储四个8-bit或两个16-bit的值于一个32-bit寄存器中,将四个16-bit的值存于一个64-bit的寄存器对中。
C64x的每个乘法器可能返回多达64-bit的结果,因此,从乘法器到寄存器组多了一个写口。
C6000系列支持没有分开的X-和Y-存储器空间。它们提供的实际上是单一的64-或32-bit数据通道的数据存储器,用于从存储器到寄存器组装入数据。另外的两个32-bit通道(C64x则是64-bit),则用于将数据从寄存器存储到存储器。一组32-bit的地址总线支持这些数据通道。
C64x可以使用非排队的存取方式,访问按byte边界的字或双字。但C62x则要求按32-或64-bit边界排队。一组32-bit的地址总线对程序存储器寻址,但一个数据通道则是256-bit宽。这个宽度允许C62x在每个周期提取,但不一定是执行,八个32-bit的指令。TI称这种方式为取包。C62x的结构不允许跨过取包边界去取包,其结果是编译产生NOP指令来铺垫取包。
C64x的结构则在指令分配单元里解决了这个问题,取消了执行包边界的限制,从而也就取消了填充的NOP指令。CPU可以在每个周期内执行1-8条指令,但数据的独立性、指令的反应时间、以及资源的冲突对性能的发挥有所限制。多包的执行允许充分的并行、串行和并/串行的组合。因此,要求八个串行指令和八个并行指令具有同样的长度。从而使编译器和汇编器的优化起着重要的作用。
编程工具用指令的最低位将指令包中的指令连接起来。如果该位置位,则指令并行执行。汇编优化器作指令的独立性检查和实施并行。从而保证代码按照编程的要求,在独立的功能块中运行,不再需要硬件来作独立性检查。
C6211和C6711是业界首先具有片内cache存储器L1和L2的DSP。C6211有两层cache,一层是4Kbyte的程序和数据cache,第二层cache是统一的64Kbyte的数据和指令RAM。C6211还具备16个通道的DMA控制器,各自进行独立的传输。
C6202、C6203和C6204具有32-bit的扩展总线,作为外部存储器的接口(EMIF),取代16-bit的主机接口。第二组用于I/O的总线降低了EMIF的负担,提高了数据的通过率。EMIF和扩展总线是相互独立的,允许CPU并发地访问各口。
所有的C6000处理器条件执行所有的指令,从而减少转移和保持流水。
C64x的MPYU4指令执行四个838-bit的无符号数乘法。ADD4执行四个8-bit的加法。所有的功能单元都可以执行双16-bit的加法/减法、比较、移位、最大值/最小值、以及绝对值运算。两个M单元及其他六个功能单元中的四个,都支持四个8-bit加法/减法、比较、平均、最大值/最小值、以及bit扩展运算。还增加了直接对打包的8-bit和16-bit数据作运算的指令。M单元里的bit计数和旋转硬件,扩展了对bit层算法的支持,例如二进制语法、图象矩阵计算、以及加密算法等。
C64x的转移-地址递减(BDEC)和检测为正转移(BPOS)指令将转移指令和地址递减及目标寄存器检测指令分别组合起来。另外一条指令可以减少设置函数调用返回地址所需的指令数量。双16-bit算术指令和八个功能单元中的六个以及位倒序指令组合起来,将FFT所需的周期数减少一半。Galois乘法指令(GMPY4)使用Chien搜索法为C62x提供Reed Solomon编码。特殊的平均指令可以将运动补偿的性能提高七倍。
C64x提供数据打包和解包,在四个8-bit或两个16-bit硬件扩展时保证很高的性能。解包指令为并行的16-bit运算准备8-bit数据。打包指令则保证并行的结果的输出精度。