容易忽略的設計

容易忽略的設計

邏輯寫多了,有時候一些基本的錯誤忘了避免了。

昨天設計邏輯的時候就不小心觸雷了,有個信號有激勵沒響應,後來看了時序報告,有這麼一句話。

inferring latch for................................

這是 什麼呢?鎖存器啊!

最容易產生的是在always(*)語句中,最後一定是所有分支條件都要描述並賦值。

狀態機中,同樣如此,不但需要有default的狀態,每個狀態的都要有所有的分支都要賦值。

如果設計很大,不容易查的話,可以打開綜合報告,搜索“LATCH”關鍵詞,查看是否有鎖存器的產生,有就趕緊更改設計。

而時序邏輯綜合結果必然是觸發器,因此不用檢查時序邏輯的分支條件。所以還是那句話,能用時序邏輯,就儘量別用組合邏輯。

容易忽略的設計

當然如果是老鳥,這句話可忽略。

阻塞和非阻塞,這件事情百分之九十九點九九是筆誤,沒見過開發者沒事非要冒險試一下“=”跟“<=”的區別。

很多人說這兩個沒啥區別,這兩個符號啊,沒出事就好,出事了查起來就煩了。

所以記好了,組合邏輯裡面用=,時序邏輯裡面用<=,肯定不會錯。

硬件描述語言的坑還是很少的, 搞來搞去就是組合邏輯、時序邏輯,一些generat加for循環就算複雜的了,因此這塊能說的不多。

編程語言不是語言本身,而是每句邏輯之後的電路,新手入門學習的初學者一定要注意。

容易忽略的設計

原文地址:卿萃科技FPGA極客空間 微信公眾號


分享到:


相關文章: