2019年6月12日 星期三

FPGA Verilog 的學習經驗,提供給要入門的新手

今天簡單說說 FPGA Verilog 的學習經驗,提供給要入門的新手:
1.對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數。 這一點個人認為很重要,就正如寫 C語言,心中要能生成對應的組合語言一樣,我是這樣要求自己的。
雖然 FPGA Verilog語言很像 C語言,但Verilog和C語言在本質上是不同的,因為Verilog進行的是數位硬體設計,寫出來的程式就是實實在在數位電路。所以最重要的就是"對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數"。

2. FPGA Verilog所實現的數位電路,重要的一點觀念是:同步原則,這可由其Verilog語法所生成的RTL Viewer查看(以Quartus為例)即知。然在設計時在異步電路會有不可控性,很可能一不小心可能有毛刺產生,而在整個FPGA內部的任何一點毛刺,都會一級一級的傳遞下去,最終影響系統的穩定性。
正因如此,我在大部分的設計均是採同步電路方式。
而在要採用哪種開發工具,我的觀點是:工具永遠就是工具,最重要的是學會怎麼使用它,不用去太細究研究它,用的多了自然就熟練了。

我在教新人如何入門FPGA Verilog時,時常強調"對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數",會大量使用FPGA Verilog程式與生成的RTL Viewer查看比對。
現我分享, 一個由網路上擷取下來的 moore狀態機的Verilog程式,稍加改寫,並寫一支 Test Bench程式,執行ModelSim產生波形,擷取下來。且也生成 RTL Viewer 查看比對。

有關 FPGA State Machine的寫法與討論,網上很多請自行搜尋查閱。在State Machine我個人常用moore狀態機。
簡單說說moore跟mealy狀態機,無論是mealy還是moore,下一個狀態改變都依賴於input跟目前狀態。兩者不同之處在於其輸出:在mealy,輸出取決於當前輸入和狀態。在moore的輸出,僅是一狀態函數。兩者的優點和缺點:mealy會更快。從某種意義上說,輸入轉換會在輸入轉換符合邏輯時立即改變,這樣mealy是很快反映,但mealy是異步的。
在moore,它必須等待一個時鐘週期,因為moore隨著狀態而變化,moore是同步的。
兩者缺點:moore的輸出比mealy會慢一個 Clock。 而 mealy 最重要的缺點是可能會導致Metastability(動態穩定性),因而可能有 "毛刺" 產生,以導致影響系統的穩定性。

現分享,為讓自己完全清楚: 自己寫的FPGA Verilog程式[如圖1],所生成的數位電路要心中有數[如圖2]。 以及明明白白清楚會產生如何的波形[如圖3]。



沒有留言:

張貼留言

FPGA Verilog 的學習經驗,提供給要入門的新手

今天簡單說說 FPGA Verilog 的學習經驗,提供給要入門的新手: 1.對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數。 這一點個人認為很重要,就正如寫 C語言,心中要能生成對應的組合語言一樣,我是這樣要求自己的。 雖然 FPGA Verilog語言...