仅对英特尔可见 — GUID: eaq1478884423046
Ixiasoft
1. Intel® HLS Compiler Pro版参考手册
2. 编译器
3. C语言和库支持
4. 组件接口
5. 组件存储器(存储器属性)
6. 组件中的循环
7. 组件并发
8. 任意精度数学支持
9. 组件目标频率(Target Frequency)
10. 任务系统
11. 库
12. 高级硬件综合控制
13. Intel® High Level Synthesis Compiler Pro版参考总结
A. 高级数学源代码库
B. 支持的数学函数
C. Cyclone® V限制
D. Intel® HLS Compiler Pro版参考手册存档
E. Intel® HLS Compiler Pro版参考手册修订历史
13.1. Intel® HLS Compiler Pro版i++命令行参数
13.2. Intel® HLS Compiler Pro版头文件
13.3. Intel® HLS Compiler Pro版编译器定义的预处理器宏
13.4. Intel® HLS Compiler Pro版关键字
13.5. Intel® HLS Compiler Pro版模拟API(仅测试台)
13.6. Intel® HLS Compiler Pro版组件存储器属性
13.7. Intel® HLS Compiler Pro版循环预处理指令
13.8. Intel® HLS Compiler Pro版范围预处理指令
13.9. Intel® HLS Compiler Pro版组件属性
13.10. Intel® HLS Compiler Pro版组件默认值接口
13.11. Intel® HLS Compiler Pro版组件调用接口控制属性
13.12. Intel® HLS Compiler Pro版组件宏
13.13. Intel® HLS Compiler Pro版技术性任务系统API
13.14. Intel® HLS Compiler Pro版管道API
13.15. Intel® HLS Compiler Pro版流输入接口
13.16. Intel® HLS Compiler Pro版流输出接口
13.17. Intel® HLS Compiler Pro版存储器映射接口
13.18. Intel® HLS Compiler Pro版加载-存储单元控制
13.19. Intel® HLS Compiler Pro版任意精度数据类型
仅对英特尔可见 — GUID: eaq1478884423046
Ixiasoft
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; }