本文為明德揚原創文章,轉載請注明出處!
在綜合時發現會有很多如下警告出現:has a constant value of 0 in block
意思是該信號的值始終為0,在優化過程中可能被優化。
但是該信號為數據輸入,是不可以被優化的,所以找到該代碼處查找問題。
檢查代碼后,在此always塊中并未發現f2p_data_in信號的書寫有何問題。所以嘗試查找是否是與f2p_data_in信號相關或者相連接的信號出現問題,導致該警告的出現。
從代碼可以分析,f2p_data_in一直為0,有可能是條件一直沒滿足,也有可能是條件滿足的時候,data_out一直為0。
情況不太明確,先排除是不是data_out的影響。方法如下:將圖中1和2處的data_out信號改成固定輸入值,16’hffff,和 16’h0000 ,修改后重新綜合發現之前出現的警告并未出現。這說明了條件是有滿足的時候的,問題應該出現在data_out信號上。
然后找到data_out輸出模塊查看問題。
此always塊就是對data_out這個輸入信號打2拍。按照前面的思路,將圖中rx_done位置修改為1,查看情況是否與data_out有關(將之前給f2p_data_in賦固定值的操作取消)。
重新綜合后發現,警告也沒有出現,說明該警告的生成和data_out無關,而是與條件rx_done信號有關,可能該信號一直為0。
下一步找到rx_done信號模塊查找問題。
在檢查該模塊時發現,rx_done為1的條件并不成立,所以rx_done一直無法為1,導致后續data_out一直輸出為0。
總結:
1. 對于警告等信息,一定要讀懂,并理解其含義。例如本課說某信號一直為0,這是問題,那為什么?則是要根據這個含義去分析。
2. 對于難以分析的,可以嘗試修改代碼,以方便驗證。注意,這只是為了驗證某種設想,驗證完后,代碼要改回來。