You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HLS实现AXI4-Stream接口时如何拆分输出各独立信号

AXI4-Stream独立端口生成修正方案

问题根源

你的实现存在3个核心错误导致信号被打包进TDATA:

  • 自定义的ap_axis_str结构体没有遵循HLS的AXI-Stream接口定义规范,工具无法识别keep/user/last为副通道信号,默认将所有结构体字段作为TDATA的payload打包
  • 你将握手信号valid/ready放进了数据结构体中,这两类信号属于AXI-Stream流接口的握手控制信号,由HLS工具自动生成,不需要手动定义在数据结构内,手动赋值也不会生效
  • 没有对自定义结构体添加打包指令,工具自动对齐到64bit位宽,最终生成了异常的64bit TDATA端口

修正方案

优先使用HLS官方提供的ap_axis模板(你已包含ap_axi_sdata.h头文件),无需自定义结构体,工具会自动识别并生成所有独立端口:

头文件修改

#ifndef core_h
#define core_h

#include <ap_int.h>
#include <ap_axi_sdata.h>
#include <hls_stream.h>

typedef ap_uint<16> word;
#define NDATA 10
// 模板参数:TDATA位宽16,TUSER位宽1,TID/TDEST位宽设为0(不使用)
typedef ap_axis<16, 1, 0, 0> ap_axis_str;

void core_module(hls::stream<ap_axis_str> &input_stream, hls::stream<ap_axis_str> &output_stream);

#endif

源文件修改

#include "core.h"

void core_module(hls::stream<ap_axis_str> &input_stream, hls::stream<ap_axis_str> &output_stream){
#pragma HLS INTERFACE axis port=input_stream
#pragma HLS INTERFACE axis port=output_stream
#pragma HLS INTERFACE s_axilite port=return bundle=CTRL
    ap_axis_str strm_val_in;
    ap_axis_str strm_val_out;
    for (int i = 0; i<NDATA; i++){
        strm_val_in = input_stream.read();
        // 仅需要赋值数据和副通道字段,valid/ready由工具自动控制
        strm_val_out.data = strm_val_in.data * 2;
        strm_val_out.keep = 3;
        strm_val_out.user = ((i%2)==0);
        strm_val_out.last = (i == NDATA-1) ? 1:0;
        output_stream.write(strm_val_out);
    }
}

可选:自定义结构体实现方案

如果你需要自定义结构体,需要移除结构体中的valid/ready字段,并添加数据打包指令:

struct ap_axis_str {
    word    data;
    ap_uint<2>    keep;
    bool    user;
    bool    last;
// 对结构体添加打包指令,保证字段对齐
#pragma HLS data_pack
};

注意事项

  • 生成的AXI-Stream接口中,输入流的TREADY是模块向上游输出的握手信号,由工具根据输入流的缓存状态自动控制,无需手动赋值
  • 输出流的TVALID由工具根据output_stream.write()操作自动拉高,无需手动赋值
  • 所有副通道信号的位宽会和你定义的字段位宽自动匹配,不会出现位宽异常问题

内容的提问来源于stack exchange,提问作者Skilopsaros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:54:05