概述
C66X DSP是最新一代定点和浮点DSP,由4个乘法器组成,以实施单精度浮点运算。C66X DSP内核可同时运行多大8项浮点乘法运算,加之高达1.4GHz的时钟频率,使其具有很高的浮点处理性能。将多个C66x DSP内核与其他内核融合,即可创建出具有初中性能的多核片上系统器件。本文以TMS320C6678为例,介绍C66x内核。
TMS320C6678具有8个C66x内核,内核工作主频最高可达1.4GHz,理论上具有179.2(22.4x8)GFLOP和358.4(44.8x8)GMAC的处理性能。每个处理器内部有多级存储器:C66x内核中有L1P、L1D、L2SRAM;多核共享存储器为MSM SRAM。处理器具有多核导航器、网络协处理器、数据包加速器、信号量、PLL等多核共享的一些外部资源,同时提供如SRIO、PCIE、EMIF等多种外部接口。C6678的处理器架构如下图所示:
C66x处理器内核
C66x内核是C6678处理器的核心,用于完成高性能处理任务。
C66x内核由以下组件组成:C66xDSP、一级程序存储器控制器(L1P)、一级数据存储器控制器(L1D)、二级存储器控制(L2)、外部存储器控制器(EMC)、扩展存储器控制器(XMC)、带宽管理(BWM)、中断控制器和休眠控制器(PDC)组成。内核结构如下:
C66xDSP由8个功能单元,2个寄存器组和2条数据通路组成,结构如下图所示。两个寄存器组共有64个寄存器,分为A和B两组,每组由32个32-bit寄存器组成。通用寄存器可以用来存放数据,也可以当作地址指针。所支持的类型有8-bit打包数据,16-bit打包数据,32-bit数据,40-bit数据和64-bit数据,乘法支持128-bit数据。
8个功能存储单元(.L1 .S1 .M1 .D1 .L2 .S2 .D2 .S2),每个功能单元的每个时钟周期都能够执行一条指令。.S单元执行通常的移位、分支及比较程序,.L单元执行通常的算数及逻辑程序;所有乘法指令都在.M单元执行(一个.M单元包含16组16x16bit乘法器,1个周期内可执行一次单精度浮点乘法运算,4个周期可执行一次双精度浮点乘法运算)。.D单元主要完成从存储器加载(load)数据到寄存器堆(register file),并从寄存器堆保存(store)结果到存储器。
C66x流水线结构
计算机流水线(Pipeline)是Intel首次在486芯片中开始使用的。在CPU中把指令的执行分成若干个不同的功能单元来实现,由若干个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成若干步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提高CPU的运算速度。
C66x DSP的流水结构共分三个阶段:指令预取(Fetch)、指令解码(Decode)、指令执行(Execute)。各阶段的详细流水线结构如下:
阶段 | 流水名称 | 含义 |
---|---|---|
Fetch | PG | Program address generate:产生程序地址 |
PS | Program address send:发送程序地址 | |
PW | Program (memory) access ready wait:等待程序内存响应 | |
PR | Program fetch packet receive:接收从内存传回的指令包 | |
Decode | DP | Instruction dispatch:将指令分配到相应的功能单元 |
DC | Instruction decode:将指令在相应的功能单元进行译码 | |
Execute | E1 | 执行指令,不同指令拥有不同的执行流水操作 |
... | ||
E5 |
- Fetch阶段的流水操作图示:
- Decode 阶段的流水操作图示:
- Execute 阶段的流水操作图示: