在FPGA里想寫順序執行的語句沒有C語言來的簡便花哨,比如for迴圈,或者再厲害點的來個嵌套迴圈。FPGA里要實現順序執行某個操作功能需要藉助狀態機實現。下麵比較了下兩種狀態機的寫法。 test_fsm和test_fsm2是兩個工程。 test_fsm是仿順序寫法,即數節拍的寫法,行數多,看著繞人, ...
在FPGA里想寫順序執行的語句沒有C語言來的簡便花哨,比如for迴圈,或者再厲害點的來個嵌套迴圈。FPGA里要實現順序執行某個操作功能需要藉助狀態機實現。下麵比較了下兩種狀態機的寫法。
test_fsm和test_fsm2是兩個工程。
test_fsm是仿順序寫法,即數節拍的寫法,行數多,看著繞人,但是寫的時候不饒人,另外寫的時候仔細點,模擬的時序就是你寫好的時序,屬於磨刀不誤砍柴工的類型,當然有人覺得後序維護升級時麻煩,比如加狀態或加一個操作時,更改會很麻煩,這個確實是,因此這種寫法在一開始寫的時候如果能考慮到後序升級就會更好,本人偏好這種寫法,因為代碼寫好即模擬好。
test_fsm2是三段式狀態機的寫法,行數少,代碼簡潔,後序升級便利,只需要在狀態機中增減狀態。但是寫代碼的時候需要劃分狀態,狀態切換時需要考慮時序節拍,因此寫好後需要模擬,當然老鳥可以一眼望穿。
下麵比較兩種寫法的綜合報告,具體報告可以打開工程仔細看。概括幾點如下:
兩種寫法的綜合報告顯示兩種寫法的資源利用量差不多,但是FF的利用率相差較大,且fanout不一樣。
Number of fully used LUT-FF pairs這項,仿順序的寫法達到62%,而三段式狀態機的寫法只有42%。這項越高越好,表示資源的利用率。
在fanout上三段式狀態機的寫法fanout較低,這樣就對信號的扇出要求較低,如時鐘信號,有利於時序收斂。
兩種寫法各有千秋,仁者見仁智者見智吧,正所謂左貴人右貴人都不錯,各人根據需求選擇自己喜歡的姿勢而已。
本人在FPGA方面還是一隻小鳥,周末閑著無聊瞎搞搞的,歡迎大俠批評指正,一起深入學習FPGA!謝謝!
By 我有風衣
// test_fsm && test_fsm2工程鏈接:http://pan.baidu.com/s/1i5GDe8P