Blackfin 处理器包括一个具有 10 级 RISC MCU/DSP 流水线的高性能 16/32 位嵌入式处理器内核、用于实现最佳代码密度的可变长度 ISA 以及具有面向加速视频和多媒体处理的指令的全 SIMD 支持。Blackfin 内核的说明如下:
通用寄存器文件
数据寄存器文件
数据类型包括 8 位、16 位或 32 位带符号或无符号整数以及 16 位或 32 位带符号分数
32 位读出和两个 32 位写入操作
地址寄存器文件
栈指针
帧指针
数据运算器
两个 16 位 MAC
两个 40 位 ALU
四个 8 位视频 ALU
单个桶形移位器
地址运算器
存储器取指令
索引、长度、基数和修改寄存器
循环缓冲
程序定序器单元
条件转移和子程序调用
嵌套式零开销循环
代码密度
通用寄存器文件
Blackfin 处理器内核包括一个用于通用运算单元的 8 路×32 位数据寄存器文件。支持的数据类型包括8 位、16 位或 32 位带符号或无符号整数以及 16 位或 32 位带符号分数。在每个时钟周期中,这种多端口寄存器文件均支持两个 32 位读出和两个 32 位写入操作。还可将其作为一个 16 路×16 位数据寄存器文件来进行存取。
除了支持循环缓冲和栈保持以外,地址寄存器文件还提供了一种通用型寻址机制。该寄存器文件由 8 个表目组成,并包括一个帧指针和一个栈指针。帧指针可用于子例程参数传输,而栈指针则可用于存储子程序调用的返回地址。
数据运算器
数据运算器所包含的系统资源大约是 Analog Devices 公司以往 16 位架构的两倍。它包括:
两个 16 位 MAC
两个 40 位 ALU
四个 8 位视频 ALU
单个桶形移位器
所有的计算资源均能够处理来自数据寄存器文件(R0~R7)的 8 位、16 位或 32 位操作数。可将每个寄存器作为一个 32 位寄存器或一个 16 位寄存器的高位部分或低位部分来进行存取。
在单个时钟周期中,SIMD 架构能够对多达两个 32 位值进行读出和写入操作。然而,由于能够对 R0~R7 寄存器的高位部分和低位部分进行独立寻址(Rx、Rx.H 或Rx.L),因此每个计算部件都能够从两个 32 位输入值和四个 16 位输入值当中进行选择,而并未对输入数据加以限制。计算的结果可以作为一个 32 位实体或寄存器的高 16 位部分或低 16 位部分而被重新写入寄存器文件。此外,累积的方法有可能因为数据通路的不同而存在差异。例如,A0 可能是一个恒定加法,而 A1 则可能是一个恒定减法。这种能力被称为 “灵活的 SIMD”。
两个累加器的长度均为 40 位,从而提供了 8 位扩展精度。与通用型寄存器相似,两个累加器均能够以 16 位、32 位或 40 位的增量进行存取。Blackfin 架构还支持一种可生成两个 16 位、32 位或 40 位结果或 4 个 16 位结果的组合型加法/减法指令。在希望获得 4 个 16 位结果的场合,高位和低位部分的结果可以互换。这是一项非常强大的功能,比方说,它能够显著地改善 FFT 基准程序结果。
地址运算器
两个数据地址发生器(DAG)提供了用于实现存储器的同时双重操作数取出的地址。这两个 DAG 共用一个包含了 4 组 32 位索引(I)、长度(L)、基数(B)和修改(M)寄存器的寄存器文件。另外还有 8 个附加 32 位地址寄存器(即 P0~P5、帧指针和栈指针),它们可被用作针对变量和栈位置的通用标引的指针。
4 组 I、L、B 和 M 寄存器可用于实现循环缓冲。当一道使用时,每组索引、长度和基数寄存器都能够在内部或外部存储器中实现一种独特的循环缓冲器。Blackfin 架构还支持各种寻址模式,包括间接型、自动增量和减量型、索引型和位反转型。最后,所有的地址寄存器的长度均为 32 位,从而可支持 Blackfin 处理器架构的全 4Gbyte 地址范围。
程序定序器单元
程序定序器负责控制指令执行的流程,并支持条件转移和子例程调用以及嵌套式零开销循环。一个多级全互锁型流水线可确保代码按照预期的方式来执行,并将所有的数据故障与编程装置隔离开来。此类流水线通过在必要时停转的方法确保了结果的准确度,以获得正确结果。这极大地简化了编程任务,因为软件工程师无须彻底了解流水线延迟问题。片上互锁硬件可确保操作数数据在一个特殊指令的执行过程中处于有效状态。
除了有限的多种 64 位指令程序包之外,Blackfin 架构还支持 16 位和 32 位指令长度。这通过把最常用的控制指令编码为紧致 16 位字、并将更加棘手的数学运算编码为 32 位双字的方法确保了最大的代码密度。
审核编辑:汤梓红