前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HLS Math Library:csim和C/RTL co-sim仿真不一致?(2)

HLS Math Library:csim和C/RTL co-sim仿真不一致?(2)

作者头像
Lauren的FPGA
发布2020-03-16 17:42:56
9440
发布2020-03-16 17:42:56
举报
文章被收录于专栏:Lauren的FPGALauren的FPGA

在之前的文章中我们提到了C仿真和C/RTL协同仿真结果的差异,造成这种差异的原因是C/RTL协同仿真使用的是HLS数学库中的函数,而这些可综合的函数采用的是位近似(bit-approximate)的方式,从而引入了精度损失,这种精度损失是相对于C标准库中的函数而言的。那么,能否尽早发现这种精度损失,以判定其是否在设计者可接受的范围之内呢?答案是肯定的。这里我们就来介绍一下第二种方法。

头文件cpp_math.cpp和cpp_math_sw.cpp分别如下图所示。在头文件中引入了HLS自带的数学库:hls_math.h。在定义可综合的顶层函数cpp_math时,特地使用了“hls::“,意在表明此处使用的是HLS数学库中的函数,有别于C标准库中的数学函数,这也就是cpp_math和cpp_math_sw的本质区别。这里,cpp_math_sw作为testbench的一部分添加到Vivado HLS工程文件中,用于提供参考输出(期望输出)。

仍然采用这篇文章中使用的testbench,这样可将超过可接受误差范围的输入角度、真实值、期望值和误差存入到目标文件中。采用上述定义的函数,在C仿真时就可以检查到超过误差允许值的情形,这是因为此时也使用了HLS数学库中的函数,从而在早期就可以发现精度损失。最终实现了C仿真和C/RTL协同仿真结果的一致性。该方法只适合于C++,而不适合于C。

综上所述,对于C标准库中的数学函数,采用Vivado HLS综合时,建议直接使用HLS数学库提供的函数,这样可以在C仿真时发现精度损失,从而判定这种误差是否在可接受范围内。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lauren的FPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档