拓冰建站拓冰建站
首页 / 资讯中心 / 正文

HLS高层次综合设计技巧--struct结构体 enum枚举 uninon联合体

一、struct结构体在高层次综合设计中应用1.结构体可以作为顶层函数的参数来使用2.结构体在顶层接口中如果不适用data_pack来优化那么结构体成员反映成员本身的综合情况3.结构体在顶层接口中如果使用data_pack来优化那么就将各个元素对齐了合并为高位宽的向量或者矢量类型二、无pack的结构体1.如果结构体中有标量成员那么会作为标准的标量端口来实现的2.如果结构体中有数组成员那么会作为内存端口来实现的三、enum枚举类型在HLS高层次综合设计中应用1.在顶层接口中使用enumenum会被综合为32位的数据类型注意在标准 C 中enum 并不是一个独立强类型而是一个“命名的整型常量集合”。它的底层类型由实现定义但绝大多数 C ABI/编译器包括 Vivado HLS 所兼容的 GCC 行为都会选择 intVivado HLS 生成的 RTL 并不是孤立的它需要与外部环境通信为了保持与标准 C 编译行为一致Vivado HLS 默认将 顶层函数实参中的 enum 综合为 32 位端口。这主要是接口兼容性要求而不是硬件优化要求。2.在函数内部使用enumHLS综合工具会最优化到必要的最小位备注在函数内部枚举变量或常量不直接暴露给外部 ABI它只在 RTL 内部使用。此时 HLS 可以做一个叫 位宽优化 / 值域分析 的过程。四、联合体union的使用1.union联合体在HLS高层次综合设计中的支持力度不是很好主要是union结构存在多重解释这个和FPGA设计的理念是有冲突的HLS综合工具为了保险起见大多数情况是不支持或者不保证union的功能的2.HLS中综合不保证union中的各个字段使用相同的内存或者相同的寄存器3.HLS高层次综合是不支持union在顶层函数接口使用的vivado hls在顶层接口使用union会存在问题union的多个成员共享一个存储会导致端口的类型模糊综合工具不知道要综合为标量数组axis还是axi因为不同的类型会产生不同默认的端口设计综合工具没有办法兼顾4.对联合体进行综合不支持原生 C 类型与用户定义的类型之间进行强制类型转换。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门