2. 高层次综合(HLS)设计实例与教程
Intel® High Level Synthesis (HLS) Compiler Pro Edition中包含的设计实例和教程对组件建模或写码提供实例组件,以获得针对您设计的最佳 Intel® HLS Compiler结果。
高层次综合设计实例
高层次综合(HLS)设计实例提供一种快捷的方法了解如何有效实现各种算法以获得 Intel® HLS Compiler最佳结果。
可在以下位置找到HLS设计实例:
<quartus_installdir>/hls/examples/<design_example_name>
其中,<quartus_installdir>是已安装的 Intel® Quartus® Prime Design Suite的目录。例如,/home/<username>/intelFPGA_pro/20.2 or C:\intelFPGA_pro\20.2 。
有关运行实例的说明,请参阅如下部分:
着重面 | 名称 | 说明 |
---|---|---|
Linear algebra(线性代数) | QRD | 使用Modified Gram-Schmidt算法进行矩阵的QR分解。 |
Signal processing(信号处理) | interp_decim_filter | 实现简单有效的插值/抽选滤波器。 |
Simple design | counter | 实现一个简单有效的32-bit计数器组件。 |
Video processing(视频处理) | YUV2RGB | 实现从YUV422到RGB888的基础色空间转换。 |
Video processing(视频处理) | image_downsample | 实现视频的减少采样(downsampling)算法,将图像缩小为使用双线性插值的较小尺寸。 |
HLS设计教程
HLS设计教程向您展示重要的HLS特定编程概念,并演示良好的编码实践。
每个教程都有一个README文件,该文件为您提供有关教程内容的详细信息以及如何运行教程的说明。
名称 | 说明 |
---|---|
可在您 Intel® Quartus® Prime系统的如下位置找到这些教程:<quartus_installdir>/hls/examples/tutorials/ac_datatypes |
|
ac_fixed_constructor | 演示ac_fixed构造函数(constructor)的使用,以通过编码风格的最小改动获得更好的QoR。 |
ac_fixed_math_library | 演示使用 Intel® HLS Compiler ac_fixed_math顶点数学库函数。 |
ac_int_basic_ops | 演示可用于ac_int级的操作符。 |
ac_int_overflow | 演示DEBUG_AC_INT_WARNING和DEBUG_AC_INT_ERROR关键字的用途,以助于检测仿真运行期间的上溢。 |
可在您 Intel® Quartus® Prime系统的如下位置找到这些教程:<quartus_installdir>/hls/examples/tutorials/hls_float |
|
1_reduced_double | 演示您的应用程序如何从hls_float获益,具体为将通过将基础类型double更改为hls_float<11, 44>(减少一倍)。 |
2_explicit_arithmetic | 演示如何使用显式版hls_float二进制操作符执行基于您需要的浮点算法操作。 |
3_conversions | 演示当具有hls_float类型的设计中出现转化时,如何使用不同转换模式生成使用各种hls_float类型的编译型常数。 |
名称 | 说明 |
---|---|
可在您 Intel® Quartus® Prime系统的如下位置找到这些教程:<quartus_installdir>/hls/examples/tutorials/component_memories |
|
attributes_on_mm_slave_arg | 演示如何将存储器属性应用到 Avalon® Memory Mapped(MM)从属自变量。 |
exceptions | 演示如何在常量和struct成员中使用存储器属性。 |
memory_bank_configuration | 演示如何控制每个存储器bank的加载/储存端口的数量,以及通过使用以下1个或多个存储器属性优化组件面积使用或/和吞吐量:
|
memory_geometry | 演示如何将存储器拆分为bank,并使用以下1个或多个存储器属性控制每个存储器bank加载/储存端口的数量:
|
memory_implementation | 演示如何使用以下存储器属性实现寄存器,MLAB或RAM中的变量或阵列:
|
memory_merging | 演示如何通过hls_merge存储器属性将两个逻辑存储器从深度和广度上合并成单个物理存储器,从而提高资源利用率。 |
non_power_of_two_memory | 演示如何使用force_pow2_depth存储器属性来控制非二次幂深度的存储器填充,以及其如何影响FPGA存储器资源的使用。 |
non_trivial_initialization | 演示如何使用C++关键字constexpr实现只读变量的有效初始化。 |
static_var_init | 演示如何控制使用hls_init_on_reset或hls_init_on_powerup存储器属性的组件中静态变量的初始化行为。 |
名称 | 说明 |
---|---|
可在您 Intel® Quartus® Prime系统中如下位置找到这些教程:<quartus_installdir>/hls/examples/tutorials/interfaces |
|
overview | 演示选择不同组件接口后,即使保持相同组件算法,其对quality-of-results(QoR)的作用。 |
explicit_streams_buffer | 演示如何使用组件和测试台中的显式stream_in和stream_out接口。 |
explicit_streams_packets_ empty | 演示如何使用usesPackets,usesEmpty,和firstSymbolInHighOrderBits流模板参数。 |
explicit_streams_packets_ ready_valid | 演示如何使用usesPackets,usesValid和usesReady流模板参数。 |
mm_master_testbench_operators | 演示如何在Avalon Memory Mapped (MM) Master (mm_master级)接口各个标记处调用组件。 |
mm_slaves | 演示如何创建Avalon-MM Slave接口(从寄存器和从存储器)。 |
mm_slaves_double_buffering | 演示使用hls_readwrite_mode宏控制存储器主器件如何访问从存储器的作用。 |
mm_slaves_csr_volatile | 演示使用volatile关键字允许在组件运行的同时对从存储器访问的作用。 |
multiple_stream_call_sites | 演示使用多个流调用站点的好处。 |
pointer_mm_master | 演示如何创建Avalon-MM Master接口并控制器参数。 |
stable_arguments | 演示如何对未改变的自变量使用stable属性以提高资源利用率。 |
名称 | 说明 |
---|---|
可在您 Intel® Quartus® Prime系统中如下位置找到这些教程:<quartus_installdir>/hls/examples/tutorials/best_practices |
|
ac_datatypes | 演示使用ac_int数据类型替代int数据类型的作用。 |
const_global | 演示使用const合格全局变量时的性能和资源利用率提升。 |
divergent_loops | 演示对带有发散回路的设计的源代码级优化。 |
floating_point_contract | 演示如何使用fp_contract选项提高针对双精度浮点操作的设计性能。 |
floating_point_ops | 演示i++的--fpc和--fp-relaxed标记在浮点操作中使用针对吞吐量进行优化后的32抽头有限冲击响应(FIR)滤波器设计的影响。 |
fpga_reg | 演示如何使用fpga_reg宏精确调整设计中的pipelining。 |
hyper_optimized_handshaking | 演示如何使用Intel HLS Compiler i++命令的--hyper-optimized-handshaking选项。 |
loop_coalesce | 演示嵌套回路上使用loop_coalesce编译指令(pragma)的性能和资源利用率的提高。 虽然Standard和Pro版都有#pragma loop_coalesce,但仅Pro edition提供设计教程。 |
loop_fusion | 演示回路融合的延迟资源利用率提高。 |
loop_memory_dependency | 演示中断循环(breaking loop)中载有使用ivdep编译指令的从属内容。 |
lsu_control | 演示对可变延迟 Avalon® MM Master接口LSU例化类型进行控制的作用。 |
parallelize_array_operation | 演示如何通过更正回路中阵列上执行操作时出现的瓶颈来改善fMAX。 |
optimize_ii_using_hls_register | 演示如何使用hls_register属性减少循环 II, 以及如何使用hls_max_concurrency提供组件吞吐量。 |
parameter_aliasing | 演示组件自变量中__restrict关键字的使用。 |
random_number_generator | 演示如何使用随机数生成器(random number generator)库。 |
reduce_exit_fifo_width | 演示如何通过减小无停机(stall-free)集群“出口节点”的FIFO宽度来改善fMAX。 |
relax_reduction_dependency | 演示一种方法,可减少包含浮点累加器的循环中的II,或减少其他无法在单个时钟周期内高速计算的减法操作。 |
remove_loop_carried_dependency | 演示如何通过删除嵌套循环中对同一变量的访问来提高循环性能。 |
resource_sharing_filter | 演示32抽头有限冲击响应 (FIR) 滤波器设计按面积优化的实例 |
set_component_target_fmax | 演示如何使用 hls_scheduler_target_fmax_mhz组件属性,以及其如何与ii循环编译指令交互。 |
shift_register | 演示用于实现移位寄存器的建议编码样式。 |
sincos_func | 演示使用组件中sinpi或cospi功能替代sin或cos功能的效果。 |
single_vs_double_ precision_math | 演示使用单精度文字和函数替代双精度文字和函数的作用。 |
stall_enable | 演示如何用已启用关停的集群替换无停机集群以提高一些小型设计中的延迟。 |
struct_interface | 演示如何使用ac_int实现无填充位的接口。 |
submnormal_and_rounding | 演示 effects of use the --daz and --rounding i++ command options. |
swap_vs_copy | 演示使用寄存器深度复制对组件设计的性能和资源使用率的影响。 |
triangular_loop | 演示描述具有依存性的三角循环码型的方法。 |
名称 | 说明 |
---|---|
可在 Intel® Quartus® Prime系统中如下位置找到这些教程:<quartus_installdir>/hls/examples/tutorials/usability |
|
compiler_interoperability | (仅Linux)演示如何使用GCC编译的testbench代码与i++命令编译的代码。 |
enqueue_call | 演示如何异步运行组件并在test bench中使用enqueue(入列)功能性应用组件的pipeline性能。 |
platform_designer_2xclock |
演示针对带有clock2x输入的组件而建议的时钟和复位生成。 |
platform_designer_stitching |
演示如何将多个组件合并成单个内聚(cohesive)设计。 |
名称 | 说明 |
---|---|
可在您 Intel® Quartus® Prime系统中如下位置找到这些教程:<quartus_installdir>/hls/examples/tutorials/system_of_tasks |
|
balancing_loop_delay | 演示如何通过缓冲流提高使用任务系统的组件吞吐量。 |
balancing_pipeline_latency | 演示如何通过缓冲流提高使用任务系统的组件吞吐量。 |
interfaces_sot | 演示如何使用 Avalon® 流和 Avalon® 存储器映射接口在信息传入和传出人之间进行传递。 |
internal_stream | 演示如何通过ihc::stream对象使用HLS任务中的“internal streams”(内部流)。 |
parallel_loop | 演示如何通过组件中的HLS任务系统,以pipelined方式运行顺序循环。 |
resource_sharing | 演示如何共享组件中昂贵的计算块以节省面积的使用。 |
task_reuse | 演示如何调用同一任务功能的多个副本。 |
名称 | 说明 |
---|---|
可在 Intel® Quartus® Prime系统中的如下位置找到这些教程:<quartus_installdir>/hls/examples/tutorials/libraries |
|
basic_rtl_library_flow | 演示开发RTL库并将其用于HLS组件的过程。 |
rtl_struct_mapping | 演示如何获得从C++ struct字段到RTL模块接口信号位片(bit-slice)的映射。 |
名称 | 说明 |
---|---|
可在 Intel® Quartus® Prime系统中的如下位置找到这些教程:<quartus_installdir>/hls/examples/tutorials/loop_controls |
|
max_interleaving |
演示可将满足如下条件的循环中面积利用率降低的方法:
|