Intel®高层次综合编译器专业版: 入门指南

ID 683680
日期 6/22/2020
Public

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

表 2.  HLS设计实例
着重面 名称 说明
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文件,该文件为您提供有关教程内容的详细信息以及如何运行教程的说明。

表 3.  任意精度数据类型设计教程
名称 说明
可在您 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_WARNINGDEBUG_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类型的编译型常数。
表 4.  组件存储器设计教程
名称 说明
可在您 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个或多个存储器属性优化组件面积使用或/和吞吐量:
  • hls_max_replicates
  • hls_singlepump
  • hls_doublepump
  • hls_simple_dual_port_memory
  • non_power_of_two_memory
  • non_trivial_initialization
memory_geometry 演示如何将存储器拆分为bank,并使用以下1个或多个存储器属性控制每个存储器bank加载/储存端口的数量:
  • hls_bankwidth
  • hls_numbanks
  • hls_bankbits
memory_implementation 演示如何使用以下存储器属性实现寄存器,MLAB或RAM中的变量或阵列:
  • hls_register
  • hls_memory
  • hls_memory_impl
memory_merging 演示如何通过hls_merge存储器属性将两个逻辑存储器从深度和广度上合并成单个物理存储器,从而提高资源利用率。
non_power_of_two_memory 演示如何使用force_pow2_depth存储器属性来控制非二次幂深度的存储器填充,以及其如何影响FPGA存储器资源的使用。
non_trivial_initialization 演示如何使用C++关键字constexpr实现只读变量的有效初始化。
static_var_init 演示如何控制使用hls_init_on_resethls_init_on_powerup存储器属性的组件中静态变量的初始化行为。
表 5.  接口设计教程
名称 说明
可在您 Intel® Quartus® Prime系统中如下位置找到这些教程:
<quartus_installdir>/hls/examples/tutorials/interfaces
overview 演示选择不同组件接口后,即使保持相同组件算法,其对quality-of-results(QoR)的作用。
explicit_streams_buffer

演示如何使用组件和测试台中的显式stream_instream_out接口。

explicit_streams_packets_ empty 演示如何使用usesPacketsusesEmpty,和firstSymbolInHighOrderBits流模板参数。
explicit_streams_packets_ ready_valid 演示如何使用usesPacketsusesValidusesReady流模板参数。
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属性以提高资源利用率。
表 6.  最佳实践设计教程
名称 说明
可在您 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 演示使用组件中sinpicospi功能替代sincos功能的效果。
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 演示描述具有依存性的三角循环码型的方法。
表 7.  易用性设计教程
名称 说明
可在 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)设计。
表 8.  任务的系统设计教程
名称 说明
可在您 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 演示如何调用同一任务功能的多个副本。
表 9.  HLS库设计教程
名称 说明
可在 Intel® Quartus® Prime系统中的如下位置找到这些教程:
<quartus_installdir>/hls/examples/tutorials/libraries
basic_rtl_library_flow

演示开发RTL库并将其用于HLS组件的过程。

rtl_struct_mapping 演示如何获得从C++ struct字段到RTL模块接口信号位片(bit-slice)的映射。
表 10.  HLS循环控制教程
名称 说明
可在 Intel® Quartus® Prime系统中的如下位置找到这些教程:
<quartus_installdir>/hls/examples/tutorials/loop_controls
max_interleaving
演示可将满足如下条件的循环中面积利用率降低的方法:
  • 循环有II > 1
  • 循环包含于pipelined循环中
  • 流水循环调用中的循环执行被串化。