ASIP Designer 的引擎盖下 - 工具自动化可实现特定于应用的处理器设计

Synopsys 工程高级总监 Gert Goossens

简介

向更智能互联系统的持续演变触发了对异构片上系统 (SoC) 架构的需求。微处理器内核辅以可执行高工作负载且功耗低的专用指令集处理器 (ASIP)。与传统的硬连线加速器不同,ASIP 仍然是软件可编程的,这为后期的功能更改提供了灵活性。在 ASIP 架构冻结之前,可以开始嵌入式软件开发。

高效的 ASIP 架构采用针对应用域的定制方式,利用指令级和数据并行性、指令流水线以及专业化的功能单元和存储元素。半导体和系统公司通常设计自己的差异化 ASIP,以满足各自的特定要求。这可以通过工具自动化来实现。

对于设计并编程 ASIP 而言,Synopsys 的 ASIP Designer 是最先进的软件工具套件。在本文中,我们探讨 ASIP Designer 的底层,并深入剖析了先进建模和工具自动化技术如何为架构探索、并行硬件和软件开发以及最佳功耗、性能和区域 (PPA) 优化提供独特的方法。

使用可重定向工具对 ASIP 架构进行建模和优化

ASIP Designer 自动支持用户以 nML 语言建模的任何处理器架构。nML 捕获指令集架构 (ISA) 和处理器的微架构。nML 可被视为硬件描述语言,通过专用结构进行增强,以简要描述处理器特征。该语言简化了处理器架构的建模,使快速迭代能够根据应用域调整架构。

图 1:ASIP Designer 工具流

ISA 设计与编译器循环

nML 模型用作 ASIP Designer 的可重定向软件开发工具包 (SDK) 的输入。该工具包将自动针对用户定义的处理器架构(图 1 中的步骤 1)。SDK 包括优化 C 和 C++ 编译器,其利用以 nML 定义的 ISA、一个周期精确指令集模拟器 (ISS)、一个图形调试器和分析器。

具有高效 C/C++ 编译器的 SDK 的瞬时可用性是 ASIP Designer 的编译器循环设计方法的基石。设计者将从自己定义的基准 nML 模型开始,或从工具随附的丰富示例模型集中进行选择。然后,他们编译代表目标应用程序域的,选定的 C 或 C++ 基准性能应用程序,并在 ISS 中运行编译的代码。ISS 生成分析信息,识别大多数周期使用的关键代码段以及处理器资源利用中的热点。从配置文件报告中,设计师可以识别调整 ISA 的机会。这些变化可在 nML 模型中予以快速应用(图 1 中的步骤 2),随后在下一个迭代周期中用可重定向 SDK 予以验证。可以进行多次设计迭代,逐渐扩展基准应用集。ISA 的显著调整可在数天内完成。

用循环合成实现 ISA 和微架构优化

在任何时候,ASIP Designer 的 RTL 生成器都可以用 Verilog 或 VHDL 语言将 nML 模型转换为可合成的 RTL 模型(图 1 中的步骤 3)。RTL 发生器可实现高级优化,以实现良好的时序性能和低功耗。RTL 模型的瞬时可用性是 ASIP Designer 合成循环方法的基石。通过对 RTL 模型进行合成,设计师可以快速准确地评估目标工艺技术设计的 PPA 和时钟频率。这可以展示优化 ASIP 的 ISA 或微架构的机会。例如,可以通过减少寄存器或寄存器端口的数量来实现面积减小,或者时序收敛可能需要向指令流水线增加额外阶段,以打破关键路径。每次更改后,SDK 及其编译器也会自动更新。因此,SDK 和 RTL 模型始终保持同步。nML 构成设计的黄金参考模型。

ASIP Designer 提供与 Synopsys 的 Design Compiler® (DC)、Fusion Compiler™ (FC) 和 RTL Architect™ 的完全互操作性。RTL Architect 在设计迭代过程中很受关注,因为它可以快速准确地预测 PPA,并且支持对 ASIP Designer 的 RTL 生成器的配置选项进行并行探索。Design Compiler 或 Fusion Compiler 用于实际物理实现 ASIP。

底层:处理器建模

图 2 显示了简单的 ASIP 架构,由其数据路径、程序控制单元 (PCU) 和外设接口组成。左侧的代码框显示 ASIP nML 模型的代码片段。

图 2:示例:处理器架构,带有其 nML 和 PDG 描述的代码片段

nML 的描述有两个部分:

  • 资源定义。 资源类型包括存储器、寄存器、寄存器文件、流水线寄存器、过渡区(即连接其他资源的线)和功能单元。所有资源均命名。功能单元以外的资源具有用户可定义的数据类型,在大多数情况下具有维度。

  • 指令集语法。 此部分定义了指令集在指令类中的层级分解。在层级的每个级别,操作规则(具有关键字 opn)由较低级别的规则组成指令类。一种类型的成分由或规则(例如:图 2 中的my_core() )构成,指定指令仅属于较低级别类别之一。另一种类型的成分由和规则构成,其引入了并行指令集(例如:arith_inst())。“或规则”和“和规则”可以在整个指令集层级结构中混用。

代表指令集层级的最低类的规则最多可以有三个不同的属性:

  • 操作属性(关键词操作)定义该类中所有指令的并发寄存器转移行为。寄存器转移语句可调用原始函数其在函数单元中以组合逻辑实现(例如,在指令类 alu_inst 中,add(), and() 和 or() 全部在 alu 函数单元中实现)。寄存器传输操作被分到处理器指令流水的各个阶段(关键词阶段)。

  • 语法属性(关键词语法)定义了指令的汇编语言。

  • 图像属性(关键词图像)定义了指令的二进制编码。

每个原始函数的行为以比特精确的 C 代码来定义。使用支持 C99 固定宽度整数数据类型的 C 语言的子集,称为PDG语言。PDG 还用于描述 ASIP 程序控制单元及其外设接口的行为。

底层:可重定向编译

ASIP Designer 的 C/C++ 编译器为以 nML 语言定义的任何处理器架构提供充分且自动的可重定向性。

3 个专业功能单元,支持复杂的定点算术

  • VU0:蝶形运算
  • VU1:复杂的乘法运算
  • VU2:特殊 radix 计算

2 个存储器

专用异构寄存器和互连结构

数据级并行性:8 个通道的向量,每个通道代表一个复杂的数字

指令级并行性:超长指令字 (VLIW),带有 5 个并行发行槽

四阶段指令流水线

图 3:PrimeCore ASIP 架构

为专用 ASIP 架构优化代码生成

要了解编译器的效率,请考虑图 3 所示的所谓 PrimeCore ASIP。这是使用 ASIP Designer 工具作为 nML 代码提供的 ASIP 示例之一。PrimeCore 的架构经过优化,可在无线基带应用中高效执行 FFT 和 DFT 算法。

图 4:PrimeCore 上的编译器生成的机器代码

图 4 显示了机器代码片段实现(作为 DFT 算法的一部分),由 PrimeCore 上的 ASIP Designer 编译器生成。编译器能够几乎填充 5 个指令发射中的每一个,贯穿算法的整个内回路。

可重定向编译器结构

高效的编译器性能与充分的架构可重定向性,需要特殊的编译器技术。这就是 ASIP Designer 所提供的。可重定向编译器内部架构如图 5 所示。

图 5:ASIP Designer 可重定向编译器内部架构

编译器的应用程序语言前端支持编程语言 C、C++ 和 OpenCL C。它将源代码转换为控制和数据流图 (CDFG) 形式的中间表示,其中节点表示操作,边缘表示依赖关系。用户可以选择使用 ASIP Designer 的原始前端(具有针对数字信号处理应用的强大优化),也可选择来自开源编译器项目 LLVMClang 前端版本。LLVM 经过扩展,以支持 ASIP 架构的广泛架构范围。

编译器的 nML 前端将 nML 处理器描述转换为指令集图 (ISG) 形式的中间表示。ISG 中的节点表示与存储元件(例如存储器、寄存器)交替的原始函数,并且边缘表示连接性。ISG 比传统编译器的机器型号更接近硬件表示。它代表所有处理器资源、数据类型、连接性、指令编码、指令级并行性和指令流水线。请注意,ASIP Designer 的 RTL 生成器也使用 ISG 表示,其中 ISG 表示是生成处理器 RTL 净网表的基础。然而,在编译器的环境中,ISG 可被视为处理器上合法的所有数据流模式的叠加。

在称为编译阶段(在图 5 的右下方描绘为蓝色框)的多个步骤中,编译器将 CDFG 表示映射到 ISG 表示上。编译阶段由代码生成引擎触发。该引擎能够处理相位耦合,即:考虑相位之间的相互依赖关系以生成高效代码。

每个编译阶段都实施高级优化算法,该算法直接在源自 nML 模型的 ISG 表示上运行。与传统编译器不同,无需开发特定于架构的优化阶段。架构设计师和软件工程师可以仅通过修改 nML 模型,自主重定向编译器。

接下来介绍一些关键的优化算法。

异质存储和互连的寄存器分配

寄存器分配是编译阶段,编译器在此阶段决定要将哪些存储位置(寄存器和存储器)用于应用程序中间变量。为了提高性能,许多 ASIP 具有异构架构,具有专用寄存器或寄存器文件,这些文件在本地连接到功能单元的输入或输出。ISA 设计还可以限制寄存器选择以减少指令所需的运算代码空间,例如,指令可能要求其目标寄存器始终等于其源寄存器之一。

ASIP Designer 的编译器使用基于图形的数据路由算法来解决此类异构架构的寄存器分配问题。该算法在处理器的 ISG 模型中应用路径搜索技术,以确定用于将中间变量从产生它们的功能单元路由到消耗它们的功能单元的替代方法。变量将分配给这些路径上的存储位置。这些路径搜索技术嵌入在分支定界搜索方法中,以选择高效的解决方案。

并行架构的积极调度

调度阶段,编译器决定将执行每个单独操作的时间步骤。如果处理器支持指令级并行性,则调度器预期会尽可能密集地填充指令发射(参见上面的图 4) 调度器必须尊重所有数据依赖关系(即变量只能在生成后使用)以及抗依赖关系(即变量在被使用之前无法覆盖)。

许多传统编译器不会将详细指令流水线暴露给调度器。这可能不会产生最紧凑的调度。ASIP Designer 支持积极的调度模式,其中指令流水线将完全暴露。调度器确切地知道每个变量的生成或消耗于哪个流水线阶段,从而可以更多地并行安排指令。

表 1 将从 PrimeCore ASIP 上不同尺寸的 FFT 算法的标准和激进调度获得的循环计数,与其 4 阶段指令流水线进行比较,显示平均循环计数增加 22%。从流水线较深的 ASIP 可以获得更高的收益。

表 1:在 PrimeCore ASIP 上对 FFT 算法进行标准和激进调度的循环技术比较

 

FFT 大小

循环计数标准

循环计数激进

增益

8

5

5

0%

16

16

14

12%

32

25

20

20%

64

42

29

31%

128

75

52

31%

256

248

180

27%

512

446

328

26%

1024

878

654

25%

2048

1700

1288

24%

4096

4412

3585

19%

平均:

22%

在积极执行调度的代码时,处理器不能接受中断。但是,设计者可以限制对应用程序源代码中选定部分应用积极的调度。ASIP Designer 将在执行此类操作期间自动屏蔽中断。

并行架构的软件流水线

软件流水线是调度阶段的一个代码转换,用于包含 for-loop 的应用程序。编译器将尝试将操作从一个循环迭代移动到后续的循环迭代,然后填充那些原本仍会处于未使用状态的发射指令。

图 6 显示了由 ASIP Designer 的编译器为所谓MMSE ASIP(以最小均方误差算法命名)生成的机器代码片段。MMSE 作为带有这些工具的示例模型,经过优化,可在无线通信中高效执行信道均衡功能。它提供具有四个事件发射的指令级并行性。所显示的函数有两个嵌套循环,如尖角形箭头所示。编译器已将软件流水线应用于内回路,从而产生每次回路迭代两个循环的紧凑调度。编译器在环路前后插入 prologadilog 代码,确保软件流水线正确地初始化和终止。

图 6:MMSE ASIP 上内环的软件流水线调度

许多编译器只将软件流水线应用于应用程序代码中每个循环嵌套位置的最内循环。ASIP Designer 还可以选择在更高级别的循环嵌套处应用软件流水线。这通常是有益的,因为如图 6 中的三角形所示,环路的 prolog 和 adilog 的指令发射利用率通常非常互补,因此将 epilog 代码移动到更高级环路的下一迭代的开始,将导致更高级环路主体中的更高指令发射利用率,从而进一步减少循环计数。这是以更冗长的代码为代价,因为编译器现在还必须为更高级别的环路插入广泛的 prolog 和 adilog 代码。

结语

ASIP 在智能应用的 SoC 设计中发挥着重要作用。它们用作加速器,以卸载微处理器内核。与传统的硬连线加速器不同,ASIP 是软件可编程的,可实现硅前和硅后的灵活性。

本文描述了工具自动化如何让芯片设计师轻松掌控 ASIP 的设计。Synopsys 的 ASIP Designer 工具套件基于其编译器循环和合成循环方法,解决了设计周期的所有方面。我们提供了对 ASIP Designer 底层一些先进技术的见解,因而可专注于处理器建模和可重定向的编译。依靠 Synopsys 在 ASIP 工具方面的专业知识,半导体和系统公司可以专注于设计自己的差异化 ASIP 产品,以满足其产品要求。

如需了解更多有关 ASIP Designer 的信息,请访问:www.synopsys.com/ASIP