主要内容

编写 MATLAB 代码以生成高效 HDL 和 HLS 代码的规范

用于 HDL 和 HLS 代码生成的 MATLAB 设计要求

当您从 MATLAB® 设计生成 HDL 或高级综合 (HLS) 代码时,您需要将算法转换为必须满足硬件面积和速度要求的架构。

您的 MATLAB 设计具有以下要求:

  • 设计中的 MATLAB 代码必须受 HDL 或 HLS 代码生成支持。

  • 输入和输出不能是矩阵或结构体。

如果您在命令行中生成代码,请使用以下命令验证您的代码是否准备好进行代码生成:

coder.screener('design_function_name')
如果您使用 HDL 工作流顾问生成代码,此检查会自动运行。

有关 MATLAB 语言支持参考,包括来自 Fixed-Point Designer™ 的受支持函数,请参阅 Functions Supported for HDL and HLS Code Generation

编写 MATLAB 代码的规范

为了更高效、更快速地生成 HDL 和 HLS 代码,请使用以下最佳做法来设计您的 MATLAB 代码:

  • 串行化您的输入和输出数据。并行数据处理结构需要更多硬件资源和更高的引脚数。

  • 使用加减算法,而不是使用函数(如正弦、除法和取模)的算法。加减运算使用的硬件资源更少。

  • 避免使用大型数组和矩阵。大型数组和矩阵需要更多寄存器和更多 RAM 来存储。每当您需要使用会占用大量内存的大型数组时,请考虑使用 RAM 映射优化将这些内存映射到 RAM。

  • 将您的代码从浮点转换为定点。浮点数据类型对于硬件实现效率低下。HDL Coder™ 提供用于浮点到定点转换的自动化工作流。

  • 展开循环以提高速度,但代价是增加面积。对于 HDL 代码生成,展开较少的循环并启用循环流式处理优化以节省面积,但代价是降低吞吐量。

  • 通过减少用于表示变量的位数(即 MATLAB 代码内操作数的位宽)来优化生成的代码。

  • 使用硬件友好的舍入和溢出方法。这可以通过在您的 MATLAB 代码中使用 hdlfimath 函数来实现。

    function out = add(a,b)​
       out = fi(a+b,1,12,4,hdlfimath);​
    end

高效 HLS 代码生成的其他规范:

  • 尽可能将设计模块化为子函数。这样做可以提高代码的可读性,并更容易在代码的特定区域指定约束,例如 coder.hdl.constrainlatency

  • 使用从 0 开始的索引方案,然后通过加 1 进行数组访问,因为 MATLAB 使用基于 1 的索引:例如,使用 arrayVar(index+1) 而不是 arrayVar(index)。代码生成器不需要插入额外的索引逻辑,从而可减少总面积。

另请参阅

App

对象

函数

主题