ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

axilite对array数组之优化-vivado hls设计应用

axilite对array数组之优化-vivado hls设计应用

 一、数组array和axilite配合使用

可以看到input array,output array,inout array都可以使用axilite接口进行设计和指定。

二、不能将数组指定为bram,又指定为axilte

1.当使用array数组,指定为axilite的时候,array是寄存器,不能够指定为bram,这个需要注意

三、接口的数组指定为axilite,应该使用array_partion和axilite配合使用来优化时序

1.使用

2.使用complete:默认操作是将数组按其独立元素进行拆分。这对应于将内存解析为寄存器

3.指令优化

#pragma HLS ARRAY_RESHAPE variable=coefficients complete dim=1

4.案例

#include <ap_int.h>

// 顶部函数:使用AXI-Lite接口接收系数,并计算点积
int dot_product_configurable(
    int values[8],         // 输入数据向量
    int coefficients[8],   // 可配置的系数数组,通过AXI-Lite接口传入
    ap_uint<1> load_coeff  // 控制信号:为1时,从总线加载新系数
) {
    // 1. 定义顶层接口
    // 将所有参数和函数返回端口绑定到同一个AXI-Lite从接口(slave)上
    #pragma HLS INTERFACE s_axilite port=values bundle=CTRL_BUS
    #pragma HLS INTERFACE s_axilite port=coefficients bundle=CTRL_BUS
    #pragma HLS INTERFACE s_axilite port=load_coeff bundle=CTRL_BUS
    #pragma HLS INTERFACE s_axilite port=return bundle=CTRL_BUS

    // 2. 关键:指定coefficients数组在硬件内部的存储方式
    // 将一维数组完全重塑为一个“宽寄存器”,允许在单个周期内访问所有元素
    #pragma HLS ARRAY_RESHAPE variable=coefficients complete dim=1

    // 3. 声明一个静态(static)的内部数组,用于保存系数
    // static确保系数在多次函数调用间保持,直到被新配置覆盖
    static int internal_coeffs[8];
    #pragma HLS ARRAY_PARTITION variable=internal_coeffs complete dim=1

    // 4. 配置逻辑:当load_coeff为真时,将总线数据载入内部寄存器
    if (load_coeff) {
        config_loop: for (int i = 0; i < 8; ++i) {
            // 注意:即使总线是顺序写入,重塑后的硬件结构也能在一个周期内完成所有并行加载
            internal_coeffs[i] = coefficient

返回列表