用Python編寫FPGA乙太網MAC
來源:EETOP 作者:ccpp123
略作了解後發現,MyHDL不是高層次綜合, 它實際上是用Python的一些功能實現了一個Verilog模擬器, 能對用Python寫的仿Verilog語言進行模擬, 並把Python代碼翻譯成Verilog. 省事的地方在於Python的簡潔,以及可以很方便的看波形,還有可以和其它Python代碼結合來進行模擬輸入和查看模擬結果. 比如寫圖像處理的模塊就很容易把圖像輸入進行模擬然後查看結果.
在Python MyHDL環境下模擬測試好的代碼,翻譯成Verilog後就可以直接拿去編譯使用了,可以不需要再到ISE或Vivado中去模擬.也就是說MyHDL的模擬和翻譯結果都是沒有問題的.通過做這個項目俺已經能確認這一點. MyHDL的作者Jan Decaluwe是個設計晶元的工程師,用MyHDL設計過晶元, 所以在正確性上是沒有問題的.
使用Python MyHDL有以下幾點需要注意 :
實際上只有@always_seq, @always_comb這兩個語句塊可用, 雖然MyHDL也支持assign, 但在翻譯成Verilog時似乎會出問題, 所以就不要寫assign了,全部用@always_comb.
在用@always_comb時, 如果你在一個@always_comb塊中既賦值了一個信號,又引用了這個信號,MyHDL會報錯. 這個問題不大, 可以再寫一個@always_comb塊,把賦值和引用語句分到不同@always_comb塊里就行了.
對a = 這樣的信號拼接支持的不好,雖然有個連接信號函數支持這個,但只支持模擬,翻譯Verilog會出錯.所以這樣的信號拼接似乎也只能拆開來一個一個的寫在@always_comb塊里. 這也是用MyHDL要比Verilog麻煩的地方.
但總的來說Python MyHDL還是要比寫Verilog省事一些的,我打算以後就用這個了,不再寫Verilog了.
我嘗試用MyHDL寫了一個FPGA乙太網MAC, 可以通過UDP協議向PC機傳原始視頻。
代碼模塊截圖:
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
TAG:Python |