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综合的时候出现问题想一想是不是优先级问题。不建议常用优先级也加括号,这样书写麻烦而且风格不宜阅读。

上一篇 下一篇

猜你喜欢

热点阅读