HLS 3.接口综合与结构体

结构体接口默认是拆分成它的成员,每个成员有单独的接口。

DATA_PACK优化约束用来把结构体成员打包成一个宽的向量,所有成员能被同时读写,提高了吞吐量。成员按照c代码中的顺序,第一个成员对齐低位,最后一个成员对齐高位。DATA_PACK不支持队成员是结构体的结构体打包。

DATA_PACK约束创建的唯一宽向量能够在一个时钟周期被存取。有种情况,结构体含有数组,有循环要使用这些数据并且数据能在一个周期内被存取时,Vivado HLS将自动展开循环来提高吞吐量。但可以使用config_unroll命令和 tripcount_threshold选项来控制循环的展开。如下,展开的循环数量将不超过16。

config_unroll -tripcount_threshold 16

注意:如果结构体使用DATA_PACK约束,结构体只能使用AXIM接口。

如果使用DATA_PACK的结构体要用AXI4接口去实现时,需要考虑-byte_pad选项。-byte_pad选项是用来自动把成员对齐8位。对齐有时是Xilinx IP需要的。如果一个使用DATA_PACK的AXI4接口要去被实现,你需要参考要去连接的Xilinx IP来决定是否需要对齐。

如下结构体,采用不同情况去实现。


typedef struct{
int12 A;
int18 B[4];
int6 C;
} my_data;
​
void foo(my_data *a )

 

如果结构体含有数组,可以使用ARRAY_PARITION约束去拆分数组,或者使用ARRAY_RESHAPE去拆分数组再重组被拆分元素成一个更宽的数组。DATA_ARRAY执行的操作与ARRAY_RESHAPE相似,只不过还多了一步,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值