本來只是測試的間歇期,對自己這段時間工作的一些感想和吐槽,發現立馬有了十幾個贊,看來知乎上關注FPGA的同學還不少,所以我就寫多一點把,想到什麼就寫什麼,切記這不是什麼入門教學,更多的是一種經驗總結,歡迎同行指點討論。

已經搞了6年FPGA,每次姑娘問我做什麼的,我卻難以回答。

FPGA是一種器件。其英文名

feild programable gate arry

通俗來說,是一種功能強大似乎無所不能的器件。通常用於通訊、網路、影象處理、工業控制等不同領域的器件。

我一直強調,我們不是程式設計師,因為在我們來看,

寫程式碼只是FPGA開發中最不重要的工作

。所以我們不需要有什麼程式碼優劣之爭。

從來沒遇到哪個同行,在那糾結過VHDL和Verilog孰優孰劣。基本上是來之可讀,拿之可用,哪個用著順手就用哪個。這些語言都是用來描述一個個真實存在的電路的,語言的優劣請退到後面去,我們真正關心的是描述的這個電路是不是足夠簡潔好用,最大機率的消除競爭冒險。

FPGA開發的流程,就是透過verilog/VHDL等硬體描述語言,經過EDA工具編譯、綜合、佈局佈線成為下載檔案,最終載入到FPGA器件中去,完成所實現的功能。

二三十年來,FPGA的結構基本上就沒還是那個樣子:

小小的晶片裡面有非常多的查詢表,這些查詢表的組合,完成了或與非等數字邏輯的實現,再加上時鐘模組實現時序,暫存器模組儲存電路狀態,RAM模組儲存大量資料,IO與外部進行通訊,一個最基礎的FPGA晶片架設完畢。

新生產的FPGA,也只是在這個基礎上加一些高速介面、專用運算模組DSP、嵌一個CPU或者arm,大的框架?how old are you。

說起來簡單,就這麼個小小的晶片,卻一直被壟斷在巨頭altera和xilinx手上,國貨賣啥都可以,唯獨這個FPGA的山寨,基本上尷尬到沒朋友的,不說也罷。

FPGA在工作的時候,需要跟各種cpu作連結。大部分情況下,用匯流排即可通訊,資料訊號用三態訊號,用於輸入和輸出,可以減少一半外部的連線數量。當然到後來,發現三態的資料線已經不能滿足速度要求。

不過對於大部分初學者來說,匯流排的控制是一個很經典好用的控制手段。

匯流排的訪問的優勢是直接對映到系統的地址區間,訪問較為直觀。

但相對傳輸速率不高,通常在幾十到100Mbps以下。

我的介面生涯從匯流排開始,然後搞非同步串列埠、同步串列埠、E1通訊口,半年之後開始玩serdes,看了半個月xilinx的GT資料,拿了實驗板開始跑rapidIO,中間各種挖坑填坑,後來接觸sata和pci-e,資料明顯多很多,開發難度明顯下降。證明了啥,當新人一定不要“不走尋常路”,等把常用的介面玩熟了,再玩一些冷門的提高逼格,這樣比較好。

所有的大俠都是從基本功練起來的,蕭峰練降龍十八掌之前在少林寺練了基本功,張無忌遇到九陽神功前也是練了不少年的武當長拳,能像段譽上來就凌波微步的人,畢竟少,因為。。因為人家有個當王爺的爹(我在說什麼呢~~~)

介面的控制應該FPGA內較為直觀,而且難度不太大開發專案,不過放到具體的應用場景裡,還是會讓開發人員費一些腦筋。

挺不喜歡國內的介紹FPGA的書籍,上來的程式設計入手專案好多不是跑馬燈就是什麼投票器,硬生生的把個

FPGA玩成了微控制器

教學。

練手的話從搭建一個UART或者同步串列埠比較好,瞭解時鐘、瞭解快取、瞭解管腳,用FIFO還能直接呼叫IP,入門的基本功啥的什麼都全了,而且可以直接連在電腦上,FPGA吐資料,電腦開窗列印,直觀,很容易產生成就感。