不在gopath目录下能使用godoc吗_HLS Math Library:csim和C/RTL cosim仿真不一致?(1)...

40d27305cae8d1a67c05dba725e81801.png

上期内容:学习笔记:神经元模型(2)

dd85a8e957845b89f1110a53d6afaca6.png

Vivado HLS提供了数学库(需要添加头文件hls_math.h)。可以认为这个库是对标准C(math.h)和C++(cmath.h)中的函数提供了可综合的版本。该库中的所有函数既支持单精度浮点、双精度浮点和半精度浮点,同时,某些函数还支持定点数据类型。   HLS数学库中的函数是可综合的位近似(bit-approximate)的函数。所谓位近似,其实反映了函数的实现精度。这里的精度是指HLS库中的函数与标准库(math.h或cmath.h)中的函数的数值差异。通常采用ULP(Unit of Least Precision)来度量,ULP的典型值为1~4。这种精度上的差异既会影响C仿真,也会影响C/RTL协同仿真。   我们来看一个典型案例,头文件内容和函数定义部分分别如下图所示。不难看出,这里使用了 C++中的cmath库,因此其中的sinf、cosf和sqrtf都来自这个库。 87d8f0cbb4402cea882ff6d14b2f15da.png d669a93c4993c97e2270cf58fc823d13.png 为了观察C仿真的结果和C/RTL协同仿真的结果,Testbench中特地将res写入到文件res.dat中保存。这样,C仿真时会生成res.dat文件,位于工程目录下的build文件夹里,具体路径如下所示。 solution1\csim\build 同样地,C/RTL协同仿真时也会生成res.dat,位于工程目录下的wrapc_pc文件夹里,具体路径如下所示。 solution1\sim\wrapc_pc 比较这两个文件可以发现,C仿真的结果和C/RTL协同仿真的结果部分值是不一致的,如下图所示。 3fb5df8477e1ee26263235fa75ed9410.png 也可以在C/RTL协同仿真生成的波形中查看到结果,如下图所示。 6b2dd6daf4260d9fa8ec1025ee00c3ae.png 可以看到小数部分是有差异的,用户要决定这种差异是否是可以接受的。为什么会有这种差异?其实就是因为 C仿真时用的函数来源于cmath.h中,而C/RTL协同仿真用的是HLS数学库中的函数综合后的结果,存在精度损失,也就是前文所说的ULP。   一种更巧的方法是在Testbench中能够检查到这些精度损失的值,同时检查精度损失是否在可接受范围内,这就需要定义误差值。误差是期望值与真实值之差。这里期望值由cpp_math_sw决定,如下图所示。 929bba0029018235217994443c725723.png 86174aac0220f497bfdfe0ffe9db227a.png cpp_math_sw和cpp_math的内容完全一样,但cpp_math_sw是作为testbench文件输入给VivadoHLS的,如下图所示。 f00b666c3fc294a2d9f35be4e1cc26e8.png 紧接着,我们定义误差,并将不一致的结果写入文件,如下图所示。其中, fp_strmo为ofstream定义的输出文件流,AbsError为用户定义的可接受的绝对误差,diff则是实际误差值。 3be0d53988ffca41326826eac8e94b74.png C仿真时,cpp_math和cpp_math_sw的输出结果是一致的。但在C/RTL协同仿真时,由于cpp_math中的函数采用了HLS数学库中的可综合函数,从而引入了误差。上述Testbench可以检查到误差超过允许范围之内的输入值,并将其写入文件中。最终生成的文件如下图所示。 3f1efefbc9e6904bb243546086864629.png 那么,是否还有其他方法,在C仿真阶段就能检测出这种误差呢?

ff4c8c6e505eff45daa9c3dd3a589d13.png

部分可重配置都生成哪些.bit文件

VIO你用对了吗

Device视图下能看到什么

Schematic视图下能看到什么

学习笔记:神经元模型(1)

学习笔记:深度学习之“深”

学习笔记:深度学习之“学习”

学习笔记:人工智能、机器学习和深度学习

都是pin,有什么区别

都是net,有什么区别

如何快速查找目标cell

2019文章汇总

5db6c011bc229cc0d164f04ce484de54.png

b8cf134c12199373d4d7ce7a9b8a3745.png

文 | Lauren 图 | Lauren

Copyright @ Lauren的FPGA

转载事宜请私信 | 获得授权后方可转载

5e6484886afef2deee5964b59f354216.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值