Intel® High Level Synthesis Compiler Pro Edition: 用户指南

ID 683456
日期 12/04/2023
Public
文档目录

A.2.1.2.1. 查看组件接口

System Viewer的Function View显示了组件中接口的可视化表示。

组件中的某些参数可以标记为stable。如果一个参数的自变量(argument)在组件执行期间没有改变,但该自变量可能会在组件执行之间发生变化,那么该参数可标记为stable。在Function View中,一个稳定的自变量没有任何边沿连接。

默认(管道)接口

管道(conduit)接口是针对自变量是按值传递的任何函数参数进行实现的。System Viewer报告的Function View将管道接口连接到对应的流读取(RD)节点。此读取与组件调用接口上的start/busy信号进行同步。
#include "HLS/hls.h"

struct coordinate_t {
	int x;
	int y;
};

component int default_comp(int b, coordinate_t p) {
	return b + p.x;
}


对于每个默认接口自变量(argument)节点,当您将鼠标悬停在一个节点上时,可以在Details窗格中查看关于该节点的详细信息:

Avalon® MM主机接口

pointer自变量、pass-by-reference自变量、ihc::mm_host<> argument和全局变量都对应于您组件外部的存储器地址。它们会在您的组件中产生至少一个 Avalon® MM Host接口。

一个组件的每个ihc::mm_host<>自变量都会产生基地址的一个输入管道(conduit),此输入管道与系统查看器中的一个Read节点连接。除了这个输入管道,还会为每个地址空间创建一个唯一的Avalon MM Host接口。此接口与系统查看器中的一个或多个Load或者Store节点连接。
#include "HLS/hls.h"

component int
host_comp(int *pointer_d,
            ihc::mm_host<int, ihc::aspace<3>, ihc::awidth<4>, ihc::dwidth<32>,
                           ihc::latency<1>, ihc::align<4>> &host_i,
            int &result) {
  result = pointer_d[0] + host_i[0];
  return result;
}

System Viewer的Function View显示了这些接口自变量的详细信息:
Stable
描述了接口自变量是否稳定。也就是说,是否应用了hls_stable_argument属性。
Data width
存储器映射的数据总线的宽度(比特)。
Address width
存储器映射的地址总线的宽度(比特)。
Latency
从读取命令退出组件到外部存储器返回有效读取数据的保证延迟。延迟以时钟周期为单位。
Maximum burst
与一个读或写传输相关联的最大数量的数据传输。对于固定延迟接口,此值设为1。
Alignment
基指针地址的字节对齐。 Intel® HLS Compiler使用此信息来确定对该指针进行加载和存储时可能进行的对齐量。

System Viewer的Function View显示了 Avalon® MM Host接口的详细信息:
Memory address space number
Avalon® MM Host接口的存储器地址空间数。
Number of banks
存储器中包含的存储器组(memory bank)的数量。
Argument Name:
访问 Avalon® MM Host接口的自变量的名称。

Avalon® MM代理寄存器接口

当您将一个函数参数标记为 Avalon® MM代理寄存器(hls_avalon_agent_register_argument)时,接口自变量会在控制和状态寄存器(CSR)代理接口中实现。System Viewer的Function View将代理寄存器自变量放置在一个CSR容器内。
#include "HLS/hls.h"

component int agentreg_comp(
  int hls_avalon_agent_register_argument agent_scalar_f,
  int* hls_avalon_agent_register_argument agent_pointer_g
  ) {
  return agent_scalar_f + *agent_pointer_g;
}

在自动生成的头文件 <component_name>_csr.h中描述了生成的存储器映射。该头文件位于源代码窗格的菜单中。单击System Viewer的Function View中的CSR容器节点也可以打开头文件:

如果您使用hls_avalon_agent_component macro,那么来自组件调用接口的callreturn信号会在控制和状态寄存器(CSR)接口中实现:
#include "HLS/hls.h"

hls_avalon_agent_component
component int agentreg_comp(
  int hls_avalon_agent_register_argument agent_scalar_f,
  int* hls_avalon_agent_register_argument agent_pointer_g
  ) {
  return agent_scalar_f + *agent_pointer_g;
}

Avalon® MM代理存储器接口

当您将一个指针自变量声明为代理存储器时,System Viewer的Function View会显示带一个 <agent memory name> LD/ST节点(连接到组件中的Local Memory节点)的代理存储器接口。
#include "HLS/hls.h"

hls_avalon_agent_component
component int agentmem_comp(
  hls_avalon_agent_memory_argument(4096) int* agent_mem_h,
  int hls_stable_argument index,
  int hls_avalon_agent_register_argument agent_scalar_f
  ) {
  return agent_mem_h[index] * agent_scalar_f;
}

Avalon® 流传输接口

一个流传输接口在System Viewer的Function View中显示为一个 <stream name> 节点,此节点连接到对应的RD节点(for stream_in<>)或者WR节点(for stream_out<>)。
#include "HLS/hls.h"

component int stream_comp(
  ihc::stream_in<int> &stream_in_c,
  ihc::stream_out<int> &stream_out_e,
  int scalar_b
  ) {

  stream_out_e.write(scalar_b + 1);
  return  stream_in_c.read() + scalar_b * 2;
} 

System Viewer的Function View显示了流传输接口自变量的以下详情:
Width
数据信号的宽度(比特)。
Depth
流深度(字)。

流的字大小是流数据类型的大小。

Bits per symbol
描述数据是如何分解成数据总线上的符号的。
Uses Packets
指示接口是否显露了流接口上的startofpacketendofpacket边带信号。这些信号可以通过基于数据包的读写操作进行访问。
Uses Valid
(stream_in)指示在流接口上是否有valid信号。Yes时,上游源(upstream source)必须在ready置位的每个周期上提供出现效数据。
Uses Ready
(stream_out)只是在流接口上是出现ready信号。Yes时,下游接收端(downstream sink)必须在valid置位的每个周期上能够接收数据。