|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
前两天纠结于这个问题,在论坛上也发了求助帖,今天自己测试整理了一下,跟大家分享下,如果有不对的地方请提出指正,谢谢
关于使用操作符(+、-、*)和调用IP核的区别
1. 实现方式
综合器见到+、-、*之后,会到库里去map各种IP,找到一个最适合的design ware,然后映射到网表中,然后基于这个网表做逻辑优化,包括timing/power的优化;而调用IP核,直接调用的是厂商已经设计优化的网表;
2. 综合生成逻辑(实测)
对于0时钟延时的加减法,直接用操作符和调用IP核得到的逻辑电路是一样的,电路的延时以及占用的资源都一样。
对于0时钟延时的乘法器,直接调用操作符综合结果和综合约束有关,特别是DSP资源的利用率(Synthesis Options->-dsp_utilization_ratio),决定乘法器是使用DSP资源实现还是LUTS实现。在使用LUTS实现时,操作符方式使用的LUTS更多,延时较短;在使用DSP资源时,DSP资源一样,但是调用IP核的延时较短;
LUTS DSP资源
操作符(*) 占用资源多,延时短 资源一样,延时长
调用IP核 占用资源少,延时长 资源一样,延时短
3. 可控性
直接使用操作符不能控制时钟延时,不能做到较高的速度;调用IP核可以根据实际需要进行配置;
32位定点乘法实测结果(*):
LUTS DSP资源
操作符(*) 1571个-5.999ns 4个-8.879ns
调用IP核 1062个-6.299ns 4个- 8.650ns
引用:综合器见到+ - * /等操作符之后,到库里去map各种IP,找到一个合适的designware后映射到网表中,然后基于这个网表做逻辑优化,包括timing/power,我记得coding style的文档中有个要求,尽量实例化design ware,其基本过程是找到design ware的列表和文档,研究哪个在gatecont/power,timing方面最合适你,然后再rtl中使用。
如果是小尺寸的运算,可以考虑直接写操作符,如果是大尺寸,尤其是* /运算,最好不要直接用操作符,毕竟综合器的mapping及优化过程不完全可控。
所谓design based on spec,not based on tool
作者:yinchyang
中国电子顶级开发网(bbs.eetop.cn) |
|