文档目录

4.4.2. 描述存储器接口的隐式和显式实例

通过指定显式mm_host对象优化描述存储器接口的组件代码。

隐式实例

以下代码实例将从两个指针解引用操作中来的加载和存储指令仲裁到组件顶层模块上的单个接口。此接口的数据总线宽度为64位,地址宽度为64位,固定延迟为1。

#include "HLS/hls.h"
component void dut(int *ptr1, int *ptr2) {
 *ptr1 += *ptr2;
 *ptr2 += ptr1[1];
}

int main(void) {
  int x[2] = {0, 1};
  int y = 2;

  dut(x, &y);

  return 0;
}

显式实例

此示例演示了如何使用显式mm_host类优化特定存储器接口之前的代码片段。mm_host类有一个定义的模板,并且有以下特征:

  • 每个接口都有一个给定的唯一ID,意味着两个独立的接口,并减少了组件内的仲裁量。
  • 数据总线宽度大于默认的64位宽度。
  • 地址总线宽度小于默认的64位宽度。
  • 接口的固定延迟为2。

通过定义这些特性,可声明您的系统正好在两个时钟周期后返回有效读数据,并且接口绝不会因读取和写入而停滞,但系统必须能够提供两个不同的存储器。唯一的物理 Avalon® MM主机端口(由aspace参数指定)应该与唯一的物理存储器相对应。如果您将多个 Avalon® MM Host接口与同一物理存储器的不同物理 Avalon® MM主机端口连接,则 Intel® HLS Compiler将无法确保任何存储器依赖项都正确发挥功能。

#include "HLS/hls.h"

typedef ihc::mm_host<int, ihc::dwidth<256>,
                          ihc::awidth<32>,
                          ihc::aspace<1>, 
                          ihc::latency<2> > Host1;
typedef ihc::mm_host<int, ihc::dwidth<256>,
                          ihc::awidth<32>,
                          ihc::aspace<4>,
                          ihc::latency<2> > Host2;

component void dut(Host1 &mm1,Host2 &mm2) {
  *mm1 += *mm2;
  *mm2 += mm1[1];
}
int main(void) {
  int x[2] = {0, 1};
  int y = 2;

  Host1 mm_x(x,2*sizeof(int),false);
  Host2 mm_y(&y,sizeof(int),false);

  dut(mm_x, mm_y);

  return 0;
}