HLS - intel HLS 指令使用指南

写在前面

本文主要介绍关于intel的HLS工具的相关指令的使用方法。

仿真设置

正常默认方式仿真,对模拟器函数调用是按照顺序的,前面的调用没有返回前,不会发生新的调用。

ihc_hls_enqueue(void retptr, void funcptr, /function arguments/)**

参数:
retptr:返回值。
funcptr:将要调用的HLS component。

将流水线组件(具有非 void 返回类型)调用排入队列。

ihc_hls_enqueue_noret (< function name >,< function arguments >)

将流水线组件(具有 void 返回类型)调用排入队列。

ihc_hls_component_run_all(function name)

以流水线并行方式在 HDL 模拟器中模拟所有排队的组件调用

int ihc_hls_sim_reset(void)

在仿真期间向组件发送一个复位信号,如果执行了复位则返回 1。 ihc_hls_set_component _wait_cycle (< function name >, < wait cycle >)

告诉仿真在一个完成信号后继续运行多个周期在检测到的函数完成后。

Local Memory

hls_register | hls_memory

将变量实现为寄存器 | RAM 块。

hls_singlepump | hls_doublepump

强制设置为单口/双口 RAM 块。

hls_numbanks(N)

强制内存系统有 N 个bank。

hls_bankwidth(N)

强制内存系统有 N 字节宽的bank。

hls_bankbits(b0, b1, … bn)

将内存系统分成 2n+1 个 bank,用 {b0, b1, …, bn} 形成 bank-select 位。

hls_numports_readonly_wri teonly(M, N)

强制内存有 M 个读端口和 N 写入端口。

hls_simple_dual_port_memory

相当于 hls_singlepump 和 hls_numports_readonly_writ eonly(1,1) 宏的便利属性。

hls_merge(“<mem_name>”, “depth”) | hls_merge(“<mem_name>”, “width”)

将两个或多个局部变量按深度合并到单个内存系统中 | 宽度方式。

hls_init_on_reset | hls_init_on_powerup

当组件复位信号置位时强制复位静态变量 | 在 FPGA 被编程时上电。

hls_memory_impl (“BLOCK_RAM|MLAB”)

将变量或数组实现为块 RAM 或 MLAB。

hls_max_concurrency(N)

允许同时循环迭代时指定内存的最大私有副本数。

Loop Pragmas

#pragma ii < N >

将循环启动间隔设置为 N。

#pragma ivdep safelen(< N >) array(array_name)

忽略最多 N 次迭代的迭代之间的本地内存依赖性。

#pragma loop_coalesce < N >

将 N 级嵌套循环转换为单循环。

#pragma unroll < N >

将循环展开为 N 个副本。

#pragma max_concurrency < N >

指定可以同时执行的循环的迭代次数。

#pragma speculated_iterations < N >

指定循环退出条件可以用来计算的时钟周期数。

组件调用接口

组件调用接口适用于整个组件。

hls_avalon_streaming_component(默认)

组件调用接口(start、busy、done、stall、return)作为通道实现。

hls_avalon_slave_component

组件调用接口(start、busy、done、stall、return)在控制/状态寄存器(CSR)中实现为带有 irq_done 信号的 Avalon-MM 从接口。

hls_always_run_component

移除组件调用接口。

hls_stall_free_return Stall

stall信号被移除

组件

hls_max_concurrency (< N >)

指定可以同时进入组件的线程数。

hls_component_ii (< N >)

强制组件具有指定的II。 会对 fMAX 产生不利影响。

hls_scheduler_target_fmax_mhz (< target fMAX >)

指定目标时钟频率(以 MHz 为单位)。

Parameter Interface

hls_conduit_argument(default)

参数与组件调用接口同步。

hls_avalon_slave_register _argument

参数在组件 CSR 中,可以通过 Avalon-MM 从接口写入。与组件调用接口同步。

hls_avalon_slave_memory_argument(N)

可以通过 Avalon-MM 从接口读取和写入的本地存储器。

hls_stable_argument

当组件中有实时数据时参数不会改变。

Streaming Interface

接口声明

ihc::stream_in<datatype, / template arguments />
组件的流输入接口。
ihc::stream_out<datatype, / template arguments />
来自组件的流输出接口。

参数说明

ihc::buffer :输入数据的 FIFO 容量。

ihc::readylatency : 就绪信号被置为无效和输入流无法再接受新输入之间的周期数。

ihc::bitsPerSymbol :如何将数据分解为符号。

ihc::usesPackets :添加 startofpacket 和 endofpacket 信号 。

ihc::usesValid :添加 有效信号 。

ihc::usesReady :添加 就绪信号。

流接口函数调用 API

T read() | void write(T data)

组件中使用的阻塞调用。

T read(bool& sop, bool& eop) | void write(T data, bool sop, bool eop)

在组件中使用带有sidehand的信号组件。

T tryRead(bool &success) | bool tryWrite(T data)

要在组件中使用的非阻塞调用。

T tryRead(bool& success, bool& sop, bool& eop) | bool tryWrite(T data, bool sop, bool eop)

带有要在组件中使用的边带信号的非阻塞调用。

Memory-Mapped Interface

接口声明

ihc::mm_master<datatype, / template arguments / >

来自组件的 Avalon-MM 主接口。

参数说明

ihc::dwidth :以位为单位的数据总线宽度。

ihc::awidth :以位为单位的地址总线宽度。

ihc::aspace :接口的地址空间。

ihc::latency :从读取命令退出组件到外部存储器返回有效读取时的保证延迟 数据。延迟值:将值设置为 0。

ihc::maxburst :单个事务中的最大传输次数 ihc::align 基指针地址的字节对齐

**ihc::readwrite_mode **:接口的端口方向 。

ihc::waitrequest : 当从机无法响应读或写请求时,公开等待请求信号。

Memory-Mapped Interface API

getInterfaceAtIndex(int index)

索引到 mm_master 接口对象的测试函数。

任务系统

ihc::launch

将函数标记为任务,并异步启动任务函数。

ihc::collect

同步组件中指定任务函数的完成。

ihc::stream

启用不同任务函数之间的流式通信。

ihc::stream 模板参数

ihc::buffer

输入数据的 FIFO 容量。

ihc::usesPackets

添加 startofpacket 和 endofpacket 信号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA and ICer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值