《HLS系列– HLS中的数据类型1.docx》由会员分享,可在线阅读,更多相关《HLS系列– HLS中的数据类型1.docx(3页珍藏版)》请在第一文库网上搜索。
1、H1S系列-H1S中的数据类型1数据类型优化的意义C语言中所提供的数据类型,其长度都是8bit的整数倍(8,16,32,64bits)0但是rt1所描述的硬件,却可以支持任意长度的数据宽度。所以,在很多情况下,使用标准C所提供的数据类型,直接用H1S翻译成硬件的话,可能会造成硬件效率的下降。举一个常见的例子。在XiIinXFPGA中普遍含有DSP48,它可以提供18x18bit的乘法器,假如你的设计只需要17bit的乘法器,那么从FPGA实现角度,只需要1个DSP48就够了。但是由于标准C没有提供17bit的数据类型,我们只能选择最接近的32bit的数据类型,那么一个32bit的乘法器,就要对
2、应消耗3个DSP48宏。这显然会造成很大的浪费。因此,H1S中对标准C做了扩展,可以由用户自定义任意长度表示的数据类型。这样做可以让用户用硬件最优化的方式去实现想要的功能,逻辑可以做的更小更紧凑,同时也可以运行的更高效。数据类型优化的例子如下的代码inc1ude,types.hvoidapint-arith(dinA_tnAydinB_txnB.dinC_tinC,dinD_tinD,dout1_t*out1.dout2_t*out2,dout3_t*out3,dout4_t*out4/Basicarithmeticoperations* out1inA*inB;* out2=inB+inA;
3、* out3=inC/inA;* out4=jD%inA;其数据类型dinA_t,dinB_t等,都在一个专门的头文件types.h中定义。(强烈推荐在一个专门的头文祥当中,去定义所有的数据类型,这样方便管理数据类型的精度)假如在types”中定义的数据类型都采用标准C提供的精度,入下:typedefchardinA_t;typedeftypedeftypedeftypedeftypedeftypedefintdinJt;dout1_t;1ong1ongdinD_t;则其综合后,所占用的资源为:1atencyic1ockcyc1es):*Summary:41atency+4-Interva1.
4、Pipe1ineIminmaxminmaxType66666767none*Siunmary:NameBRAM_18K|DSPd8EFF1OTI!Expression-Io17FIFOI-I-IInstanceI-I117920171521MemoryI-I-I(Mu1tip1exerI-I-IRegister-I7-ITota1IOi11792717169IAvai1ab1e6501(Uti1ization(%)o202RpOI1,0400I如果我们将数据类型做下调整,换成我们实际使用的精度,如下:typedeftypedeftypedeftypedeftypedeftypedefint6d
5、inA_t;int12dinB_t;int22dinC_t;int33dinD_t;int18dout1_t;uint13dout2_t;typedefir,t,22dut3t;typedetnt6dU二9那么所综合后的资源,就能减小很多,并且IatenCy也可以减小:1atency(c1ockcyc1es):*Summary:一1atencyInter+va1IPipe1ine;IminImaxminmaxIType353513636JInone*Sunanary:NameBRAM_18K|DSP48EFF1UTIExpressionoUIIFIFO-I-I-I-IIInstance-1476414560IMemory-I-I-I-I(Mu1tip1exer-I-I-I-IIRegister-61-ITota1I014770145731IAvai1ab1e650I60CjJ202800j10)400IUti1ization(%)IX-zx7-iI