Vivado 2019.1 综合器bug - 优先级判断错误
2019-12-21 本文已影响0人
澎_3ba2
这个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综合的时候出现问题想一想是不是优先级问题。不建议常用优先级也加括号,这样书写麻烦而且风格不宜阅读。