• Menu
  • Product
  • Email
  • PDF
  • Order now
  • C7000 主机仿真 v5.0.0.LTS 用户指南

    • ZHCUBL2L January   2018  – March 2025

       

  • CONTENTS
  • SEARCH
  • C7000 主机仿真 v5.0.0.LTS 用户指南
  1.   1
  2.   C7000 主机仿真
  3. 1 关于本文档
    1. 1.1 相关文档
    2. 1.2 免责声明
    3. 1.3 商标
  4. 2 主机仿真入门
    1. 2.1 系统要求
    2. 2.2 安装说明
    3. 2.3 主机仿真库版本
    4. 2.4 差异总结:主机仿真编码与原生 C7000 编码
  5. 3 一般编码要求
    1. 3.1 所需的头文件
    2. 3.2 包依赖项
    3. 3.3 示例程序
  6. 4 内在函数
    1. 4.1 类似 OpenCL 的内在函数
    2. 4.2 流地址生成器内在函数
    3. 4.3 C6000 传统内在函数
    4. 4.4 存储器系统内在函数
  7. 5 TI 向量类型
    1. 5.1 构造函数
    2. 5.2 访问器
    3. 5.3 向量运算符
    4. 5.4 打印调试函数
  8. 6 流引擎和流地址生成器
  9. 7 查询表和直方图接口
    1. 7.1 查询表和直方图数据
  10. 8 C6000 迁移
    1. 8.1 __float2_t 传统数据类型
  11. 9 矩阵乘法加速器 (MMA) 接口
  12. 10编译器错误和警告
    1. 10.1 编译器错误和警告中包含的关键术语
    2. 10.2 主机仿真特定语法
  13. 11修订历史记录
  14.   36
  15. 重要声明
search No matches found.
  • Full reading width
    • Full reading width
    • Comfortable reading width
    • Expanded reading width
  • Card for each section
  • Card with all content

 

User's Guide

C7000 主机仿真 v5.0.0.LTS 用户指南

下载最新的英语版本

摘要

C7000™ 主机仿真支持您在 PC 或 Linux® 主机系统上使用 C7000 编译器内在函数和 TI 向量类型。因此,在使用 C7000 编译器之前,您可以使用不同的调试工具和编程环境来为 C7000 硬件设计原型程序。主机仿真包不会尝试仿真 C7000 CPU。

1 关于本文档

本文档是使用 C7000 主机仿真编写 C7000 DSP 程序的用户指南。其中包含的示例概述了使用 C7000 编译器 (cl7x) 进行编程和在所需主机系统上使用主机仿真包进行编程之间的主要差异。本文档旨在提供 C7000 主机仿真包的主要特性和限制的参考。

1.1 相关文档

以下文档提供 C7000 的相关信息:

  • C7000 C/C++ 优化编译器用户指南 (SPRUIG8)
  • C7000 C/C++ 优化指南 (SPRUIV4)
  • C7000 嵌入式应用程序二进制接口 (EABI) 参考指南 (SPRUIG4)
  • C6000 至 C7000 迁移用户指南 (SPRUIG5)
  • VCOP Kernel-C 至 C7000 迁移工具用户指南 (SPRUIG3)
  • C7x 指令指南(SPRUIU4,可通过 TI Field 应用工程师获得)
  • C71x DSP CPU、指令集和矩阵乘法加速器(SPRUIP0,可通过 TI Field 应用工程师获得)
  • C71x DSP Corepac 技术参考手册(SPRUIQ3,可通过 TI Field 应用工程师获得)

1.2 免责声明

注意: C7000 主机仿真支持是一种实验性产品。建议用户阅读并理解本文档中披露的所有限制。可能存在其他未在本文档中披露的限制。

1.3 商标

C7000™ and C6000™are TMs ofTI corporate name.

OpenCL™is a TM ofApple Inc. used with permission by Khronos.

Linux®is a reg TM ofLinus Torvalds in the U.S. and other countries.

Windows® and Visual Studio®are reg TMs ofMicrosoft.

Other TMs

2 主机仿真入门

C7000 主机仿真包包含 C++ 源代码和头文件,用于驱动 C7000 编译器提供的功能。

在编译 C7000 程序之前可能需要在主机上构建源文件,具体取决于所需的主机。以下各节提供了有关如何在不同主机上构建源代码的详细说明。

为了充分理解本指南中的内容并成功使用主机仿真,需要熟悉 C7000 C/C++ 优化编译器用户指南 (SPRUIG8) 和 C7000 运行时支持库。

2.1 系统要求

通常,C7000 主机仿真的系统要求与安装 C7000 代码生成工具 (CGT) 所需的系统要求一致。

C7000 主机仿真包附带的预编译库需要安装以下编译器。建议您使用与构建和测试 C7000 主机仿真所用版本相匹配的编译器版本。

  • Linux(x86-64 位)
    • GNU g++ 编译器。C7000 主机仿真基于 9.5.0 版本构建。
  • Microsoft Windows®(x86-64 位)
    • Visual C++ 编译工具(单独提供或与相应的 Visual Studio® IDE 安装包一起提供)。C7000 主机仿真基于 C++ 工具集 v143、编辑器版本 14.37 构建。
    • GNU g++ 编译器。C7000 主机仿真基于 MSYS2 版本 9.2.0 构建。

使用主机仿真时无需 Boost C++ 库和头文件。

2.2 安装说明

C7000 主机仿真包将作为 C7000 CGT 的一部分进行分发。在所需的平台上安装 C7000 CGT 也会安装 C7000 主机仿真包。

不同平台和编译器的库可以在已安装工具的 host_emulation 目录下找到。与主机仿真相关的所有头文件都可以在已安装工具的 host_emulation/include 目录下找到。

对于 Visual C++,<target>-host-emulation.lib 库与静态运行时库的发布 版本兼容。<target>-host-emulationd.lib 库与静态运行时库的调试 版本兼容。

2.3 主机仿真库版本

安装的 host_emulation 目录中提供了多个主机仿真库和包含目录。其中每一个库都对应于可配合 C7000 编译器使用的 --silicon_version 和 --mma_version 命令行选项的不同组合。在使用 C7000 主机仿真时,使用对应于所需编译器选项的库和包含目录,如下所示:

表 2-1 主机仿真构建
--silicon_version 选项 --mma_version 选项 主机仿真库
7100 1 C7100
7120 2 C7120
7504 2_256 C7504
7524 2_256 C7524-MMA2_256
7524 2_256f C7524-MMA2_256F

2.4 差异总结:主机仿真编码与原生 C7000 编码

编写应用程序代码以使用 C7000 主机仿真运行时,应注意以下一般限制:

  • 所有源文件必须包含 c7x.h 文件。(请参阅节 3.1。)
  • 为了在日后实现可移植性,建议使用标准整数类型而非内置类型。(请参阅节 3.2。)
  • 由于底层实现严重依赖 C++14 构造和功能,因此代码必须使用 C++14。(请参阅节 3.2。)
  • 主机仿真不支持 C7000 pragma。(请参阅节 3.2。)
  • 内在函数存在某些限制和差异。(请参阅节 4。)例如,直接在存储器和 L1D 高速缓存上运行的内在函数不能用于 C7000 主机仿真。(请参阅节 4.4。)

有关特定编译器错误和警告的信息,以及 C7000 编译器和主机仿真编译器之间的语法解释差异,请参阅节 10。

3 一般编码要求

3.1 所需的头文件

无论选择何种主机,编写的每个程序都需要满足特定的先决条件,才能使用 C7000 主机仿真运行。

所有将 C7000 编译器功能与主机仿真配合使用的源文件都需要 c7x.h 或 c6x_migration.h 文件(如适用)。这些文件依次包括所有其他所需的头文件。针对主机仿真进行编译时,请勿 #include C7000 运行时支持库中提供的任何其他头文件。

针对主机仿真进行编译时,请勿 #include C7000 运行时支持库中的任何头文件。其中包括 c7x.h 和 c6x_migration.h 文件。而是应使用预处理器符号来控制包含哪些头文件。

表 3-1 主机仿真头文件
明确包含的文件说明
c7x.h主头文件。包括下面列出的所有其他文件(c6x_migration.h 除外)。
c6x_migration.h传统内在函数和数据类型。包括下面列出的所有其他文件。
自动包括的文件
c7x_cr.h全局控制寄存器定义
c7x_ecr.h全局扩展寄存器定义
c7x_iluthist.h内部查询表和柱状图控制接口
c7x_luthist.h 查询表和直方图控制接口
c7x_strm.h流引擎控制接口

ti_he_impl 文件夹包含用于实现的其他头文件;不应直接包含此类头文件。

3.2 包依赖项

由于底层实现高度依赖于 C++14 结构和功能,因此为 C7000 主机仿真编写的程序必须使用 C++14 语言。

根据编译器的不同,编译命令中可能需要一个用于启用 C++14 支持的特殊标志。

虽然并非强制要求,但强烈建议在使用 C7000 主机仿真进行编程时使用标准整数类型(例如 int32_t )。使用内置数据类型可以编译和运行,但不能保证这些结果在所有平台上都是正确的。使用标准整数类型代替相应的内置类型将实现正确的结果,并且不会影响将程序转换到 C7000 编译器的能力。

使用主机仿真时,使用 C7000 编译器属性和指令将产生未定义的警告。这种行为是预期行为,无法纠正。如果程序在目标芯片上运行需要这些属性和指令,则通常可以在主机仿真编译器上抑制警告。

C7000 主机仿真包不仿真 C7000 编译器 pragma。因此,与 C7000 主机仿真一同运行的代码中使用时,C7000 编译器 pragma 将不起作用。

表 3-2 中提供了使用主机仿真时自动定义的 C7000 编译器符号的列表。

表 3-2 C7000 预处理器符号
定义的预处理器符号 说明
__C7000__ 如果针对 C7000 目标或任何类型的 C7000 主机仿真进行编译,则为已定义。
__C7100__ 如果针对 C7100 主机仿真进行编译,则为已定义。
__C7120__ 如果针对 C7120 主机仿真进行编译,则为已定义。
__C7504__ 如果针对 C7504 主机仿真进行编译,则为已定义。
__C7524__ 如果针对 C7524 主机仿真进行编译,则为已定义。
__C7X_HOSTEM__ 如果针对主机仿真进行编译,则为已定义。在使用目标编译器 (cl7x) 时未定义此参数。
__C7X_MMA__ 默认情况下,已定义。
__C7X_MMA_1__ 如果针对支持 MMA 1 的主机仿真进行编译,则为已定义。
__C7X_MMA_2__ 如果针对支持 MMA 2 的主机仿真进行编译,则为已定义。
__C7X_MMA_2_256__ 如果针对支持 MMA 2_256 的主机仿真进行编译,则为已定义。
__C7X_MMA_2_256F__ 如果针对支持 MMA 2_256F 的主机仿真进行编译,则为已定义。
__C7X_NUM_SE__ 定义为可用流引擎数量。当前始终为 2。
__C7X_NUM_SA__ 定义为可用的流地址生成器数量。当前始终为 4。
__little_endian__ 默认情况下,已定义。

3.3 示例程序

以下是一个示例程序,可以交替使用主机仿真和 C7000 编译器进行编译,无需修改源代码。每种情况下都提供了示例编译器命令。

C7000 编译器 (cl7x) 命令行选项与主机仿真编译器不兼容。

/* Example Program test.cpp */
#include "c7x.h"
extern void test(int8 v);
int main()
{
    int8 vec1 = int8(1,2,3,4,5,6,7,8);
    int8 vec2 = (int8)5;
    test(vec1 + vec2);
}

C7100 主机仿真编译器命令 (Linux):

g++ -c --std=c++14 -fno-strict-aliasing -I<cgt_install_path>/host_emulation/include/C7100 
test.cpp -L<cgt_install_path>/host_emulation -lC7100-host-emulation

使用主机仿真时,-fno-strict-aliasing 命令行选项应始终与 g++ 一起使用。此选项可确保 g++ 编译器不会使用类型差异来做出别名决策。主机仿真实施方案使用不同类型来实现 TI 向量类型。因此,如果不使用此选项,g++ 可能会利用主机仿真功能错误地优化 TI 向量代码,这可能会导致意外的错误结果。

C7000 编译器命令:

cl7x test.cpp

4 内在函数

C7000 编译器提供的所有内在函数都可用于 C7000 主机仿真。以下各小节解决了在主机仿真中使用以下类型的内在函数时可能出现的问题:

  • 类似 OpenCL 的内在函数(请参阅节 4.1)
  • 用于为流引擎和流地址生成器编程的内在函数(请参阅节 4.2)
  • 用于迁移为 C6000™ 编译器 (cl6x) 编写的旧代码的内在函数(请参阅节 4.3)
  • 作用于存储器系统的内在函数(有关差异,请参阅节 4.4)

以下其他类型的内在函数对于 C7000 主机仿真和 C7000 编译器是相同的:用于向量和标量元素的特殊加载和存储的内在函数、低级别直接映射内在函数、作为寄存器接口向量谓词的一部分的内在函数,以及用于执行查询表和直方图运算的内在函数。

修改控制寄存器的内在函数在 C7000 主机仿真中执行此操作。C7000 主机仿真下可用的所有控制寄存器都可以随时作为无符号 64 位整数进行引用。

主机仿真并不能完全支持依赖于硬件信息的寄存器的读取和写入,例如执行模式和周期计数。虽然所有与这些寄存器关联的符号和内在函数都是为编译目的而定义,但在使用主机仿真时不能依赖它们的值以确保准确。

某些内在函数可能需要特殊处理才能正确使用。对于以下各小节中未提及的所有内在函数,其功能与 C7000 上的功能完全相同。可以在 c7x.h 文件和 C7000 运行时支持包中提供的其他头文件中找到可用于 C7000 编译器的内在函数完整列表。

指令执行可以尽可能接近地仿真硬件。

4.1 类似 OpenCL 的内在函数

C7000 编译器中可用的所有类似 OpenCL™ 的内部函数都可在 C7000 主机仿真中使用。内在函数接口保持不变;任何类似 OpenCL 的内在函数的合法使用在 C7000 主机仿真中也是合法的。

4.2 流地址生成器内在函数

C7000 编译器提供的所有流地址生成器内部函数也可在 C7000 主机仿真中使用。它们的接口与 C7000 编译器中的接口相同。

 

Texas Instruments

© Copyright 1995-2025 Texas Instruments Incorporated. All rights reserved.
Submit documentation feedback | IMPORTANT NOTICE | Trademarks | Privacy policy | Cookie policy | Terms of use | Terms of sale