2026/5/21 8:16:02
网站建设
项目流程
智慧政务网站怎么做,网页设计模板网站,手机网页开发者模式,软文代写价格一、数组
1.数组综合后#xff0c;通常作为内存来实现
内存包括RAM,ROM或者FIFO2.顶层函数接口上的数组综合为内存接口#xff0c;用于访问外部的内存接口3.数组的大小决定了vivado hls工具将数组作为SRL综合#xff0c;也可能将
数组作为block RAM#xff0c;或者LUTRAM或…一、数组1.数组综合后通常作为内存来实现内存包括RAM,ROM或者FIFO2.顶层函数接口上的数组综合为内存接口用于访问外部的内存接口3.数组的大小决定了vivado hls工具将数组作为SRL综合也可能将数组作为block RAM或者LUTRAM或者UltraRAM来设计4.数组作为内存访问可能会存在性能瓶颈。因为内存端口的数量会限制对数据的访问5.数组初始化如未谨慎执行则可能导致 RTL 中不必要的长时间复位和初始化二、数组的访问和性能以下代码示例显示了访问数组导致最终 RTL 设计性能受限的案例。在此示例中对 mem[N] 数组执行了 3 次访问以创建求和结果。#include array_mem_bottleneck.hdout_t array_mem_bottleneck(din_t mem[N]) {dout_t sum0;int i;SUM_LOOP:for(i2;iN;i)sum mem[i] mem[i-1] mem[i-2];return sum;}在综合期间该数组作为 RAM 来实现。如果将此 RAM 指定为单端口 RAM那么将无法通过对 SUM_LOOP 循环进行流水线化来实现在每个时钟周期内处理新的循环迭代的目标。三、数组在接口上优化情况要配置 Vivado HLS 创建这些端口的方式请执行以下操作• 使用 INTERFACE 指令将接口指定为 RAM 或 FIFO 接口。• 使用 RESOURCE 指令将 RAM 指定为单端口或双端口 RAM。• 使用 RESOURCE 指令指定 RAM 时延。• 使用数组最优化指令Array_Partition、Array_Map 或 Array_Reshape来重新配置数组结构从而重新配置 I/O 端口数量。四、vivado hls中array数组初始化问题说明1.xilinx官方是建议设计者将数组使用static来声明的但是并不强制2.使用static修饰数组可以确保vivado hls以rtl中内存的方式来实现数组并且初始化数组不会有时钟开销。3.如果在函数内部有一个局部数组没有使用static修饰那么这个局部数组的初始化在每次函数调用的时候都会进行初始化综合后每次执行设计模块的时候都会要对RAM写一次初始值。那么对于单口RAM下面的代码初始化需要8个clock;int coeff[8] {-2, 8, -4, 10, 14, 10, -4, 8, -2};如果coeff的数组大小为1024那么初始化需要1024个时钟周期那么这会造成一个问题就是在对coeff初始化期间无法执行任何依赖于coeff的任何运算。4.如果使用static来修饰coeffstatic int coeff[8] {-2, 8, -4, 10, 14, 10, -4, 8, -2};这个初始化和rtl是一样的就是vivado hls会对rtl设计和FPGA的比特流中的变量进行初始化。这个在程序从flash加载到FPGA的过程中完成的而不是在程序跑起来需要经历多个时钟周期来初始化内存这个设计可以确保大型内存初始化不会产生任何运算开销。5.RTL配置命令可以指定应用复位后静态变量是否返回其初始化状态。如果执行复位操作后内存将返回初始化状态就会导致运算开销这个需要经历多个周期才能完成值的复位。每个值必须写入每个内存地址。