前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何查看可综合C代码的中间结果

如何查看可综合C代码的中间结果

作者头像
Lauren的FPGA
发布2020-05-15 09:56:34
9600
发布2020-05-15 09:56:34
举报
文章被收录于专栏:Lauren的FPGALauren的FPGA

采用Vivado HLS实现高层次综合时,Xilinx建议一定要提供相应的C测试文件。但C测试文件的弊端在于只能查看待综合顶层函数的输出,而对于子函数(顶层函数中调用的函数)或者其他一些中间变量的输出结果无能为力。如果C仿真有错误,这说明本身算法描述可能有问题。此时,尽管可以通过调用Debugger设置断点的方式跟踪数据处理结果,但从快速定位问题的角度而言,这种方法仍不够高效。如果可以打印出子函数或者中间变量的输出结果,那就可以实现快速粗定位。

为此,一种方法是采用条件编译的方式,如下图所示,在头文件中定义了宏__ONLY_SIM__(图中代码第7行),在待综合函数中通过条件编译的方式输出中间变量xi、yi和zi,如代码的第33至第35行。但这种方法的弊端是在C综合时,需要将头文件中第7行定义的宏注释掉,否则综合会报错,因为cout是不可综合的。

针对上述问题,Vivado HLS提供了自定义宏__SYNTHESIS__(SYNTHESIS左右各两个下划线)。自定义宏意味着这个宏并不需要用户定义,是用户可以直接使用的。Xilinx建议只在可综合函数中使用该宏。因为这个宏只有在C综合时才有效。这样上述代码就可以更改为下图所示的方式。注意,头文件中不需要对这个宏进行定义。由于代码中使用了#ifndef,因此,在C仿真时,__SYNTHESIS__没有生效,故可以输出中间结果。而在C综合时,__SYNTHESIS__生效,此时34行代码无效,不影响综合。

结论:通过使用Vivado HLS自定义宏__SYNTHESIS__的方式可以查看待综合函数的中间输出结果,实现粗定位,调用Debugger加断点的方式可以实现细定位。同时,__SYNTHESIS__只在可综合函数中使用,无需用户定义,也不能在C测试文件中使用,否则会报错。

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

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

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

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

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