文档目录

11.4.1.9. HLS库的RTL模块限制和局限性

当您想要将RTL模块包含在HLS库中时会受到一些限制和约束,以确保该库在不同的用户设计中能够一致地工作。

RTL模块限制

创建RTL模块时,请确保其在以下限制内运行:

  • RTL模块必须在任何通过时序分析的时钟频率下正常工作。
  • 数据输入和输出大小必须与RTL模块函数签名(.h)文件中声明的参数和返回值的大小相匹配。

    例如,如果您在RTL模块中使用 24位值,则将输入声明为32位,并声明函数签名以接受uint数据类型。在RTL模块中,接受32位输入但丢弃置顶的8个位。

  • RTL模块无法连接到外部I/O信号。所有输入和输出信号都必须来自使用该库的HLS组件。
  • RTL模块必须具有clock端口,resetn端口和握手端口,以支持数据输入和输出接口。握手信号必须被命名为ivalidovalidireadyoready
  • 对应于RTL模块实例的每个函数调用都完全独立于其他实例。不共享任何硬件。
  • RTL模块必须同时接收所有输入。单个ivalid输入表示所有输入都包含有效数据。

基于RTL的对象限制

在HLS库中使用RTL模块有以下限制:

  • 您只能在对象清单(.xml)文件中设置RTL模块参数。

    要将同一模块与具有多个参数的组合一起使用,则请为每个参数组合创建单独的FUNCTION标记。

  • 通过HLS组件代码,数据输入以值的形式传递给RTL模块。

    您不能将流、指针或引用作为输入传递给RTL模块。

    对于流数据,首先从组件中的流提取数据,然后将提取的标量数据传递给HLS库中的 RTL模块。

    将数据输入作为指针或引用传递给RTL模块会导致 Intel® HLS Compiler中出现致命错误。

  • RTL模块源文件的名称不能与其他库中的对象或 Intel® HLS Compiler IP文件名称相冲突。

    您在创建库时,请选择不会与其他库或编译器IP相冲突的 RTL模块名称。例如,将库名称作为您RTL模块名称的前缀。

    如果存在命名冲突,则HLS组件在经过Intel Quartus Prime编译时可能会失败或导致不能正确工作的FPGA图像。

  • RTL模块及其信号的名称不能与任何由支持的RTL语言定义的保留名称相冲突:Verilog、System Verilog和VHDL。
  • Intel® HLS Compiler不支持.qip 文件。您必须手动解析嵌套.qip文件以创建RTL文件的平面列表。