Vivado 2019.1 综合器bug - 优先级判断错误

这个bug真的是坑惨了我呀!仿真完全正确,上板就挂了,ILA抓取的信号行为和设计不符,我一度以为芯片坏了,结果最后推测是综合器bug。上代码:

if(cal_state  == STATE_FINISH && cal_release_save_ping && !save_ping_lock) 

==优先级应该高于&&,这个是verilog标准,继承于传统C语言。但是综合后代码的行为是

if(cal_state  == (STATE_FINISH && cal_release_save_ping && !save_ping_lock)) 

也就是说,综合器认为==优先级低于&&。将原来的代码改为

if((cal_state  == STATE_FINISH) && cal_release_save_ping && !save_ping_lock) 

测试通过。

这个优先级问题还是我们非常常见的判断,建议大家还是作为特例记下来吧,或者使用vivado综合的时候出现问题想一想是不是优先级问题。不建议常用优先级也加括号,这样书写麻烦而且风格不宜阅读。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容