一、初學者常見問題
很多初學者說FPGA入門好麻煩,尤其是原來一些寫過C代碼的同學,覺得FPGA的代碼邏輯性太強,寫起來完全不像C那樣靈活。
我的觀點:
1、FPGA其實入門是非常簡單的,你覺得復雜,估計是你被帶到糞坑里面去了,自己沒跳出來。
2、C語言有編譯器,會幫你把代碼邏輯給處理好。FPGA寫出來的是電路,是很底層的。如果你像寫C那樣寫FPGA,出發點就錯了,也不可能會寫好FPGA。
3、FPGA常用的語言有VHDL和verilog,目前外邊百分之九十的公司都是在用verilog,建議你還是用verilog吧。
4、有同學問,老師,我需要有什么基礎才能學FPGA嗎?比如模擬電路和數字電路。 我認為:模擬電路講的東西其實挺復雜的,我們只需要一些電路的基礎就可以了,和模擬電路沒直接的關系,比如:一個芯片的供電電壓,芯片操作的電平。二極管的導通和關斷。 數字電路,需要知道與 或 非 是什么意思、D觸發器的概念就行了,其他的,我認為沒必要去深究,和FPGA學習沒直接的關系。
5、FPGA最重要的概念是什么?我認為是時鐘,FPGA所有的信號都是跟著時鐘走的。
6、有沒有推薦的書。目前我沒有什么書可以推薦的,很多學生研究verilog的語法,買本FPGA的書在那里看,我認為這種學習方法非常愚蠢。高校的書多半是沒有使用過FPGA的叫獸在那里瞎寫的, 很多連可綜合不可綜合都跟你說不清楚,把你帶到坑里面,直接淹死你。還有一些為了利益騙人的教授,哎,太復雜了。 其實FPGA的語法非常簡單,可綜合的非常少,也就是實際你使用的非常少,少的可憐,多半都是不可綜合的。有同學會問,不可綜合的語法有毛用,好問題,不可綜合的語法是仿真用的。modelsim是最常用的一個仿真工具了。還有vcs等。
7、入門需要學哪些軟件,其實先學3種吧。1、ALTERA的Quartus II,2、XILINX的ISE,3、modelsim。(xilinx的vivado也很重要,先別接觸了,不適合初學者,尤其是ZYNQ系列,是ARM和FPGA的結合,很多實驗需要ARM的配合) verilog的代碼編輯器常用的是notepad++和UE,也有用vim的。我建議你用Notepad++吧,免費的,百度搜索下,直接就安裝好了。和quartus II、ISE、vivado關聯起來非常簡單。后續會介紹。
再次強調:modelsim是非常重要的,必須熟練應用,熟練寫tb文件。
8、FPGA 內最重要的IP有哪些? 這個問題比較朦朧,分應用吧! FPGA用的最多的是PLL、FIFO,基本我寫的每個項目都在使用。做算法經常用到加減乘除的IPCORE,當然還有用FFT的,不過FFT比較復雜,做出來的消耗資源都比較多。外部的比較重要的是DDR2,進行大數據存儲的時候使用。
9、給初學者30個例子
本博客會連載30個入門的例子。我盡量堅持到最后一刻,希望大家為我加油!
二、聊聊之前的經歷吧
FPGA程序寫的太久了,08年畢業就開始寫,身邊的同事換了一波一波又一波,徒弟收了一個一個又一個,軟件更新了一代一代又一代。手上經歷過的項目也數不清了。什么E1、T1、百兆千兆以太網、USB2.0、USB3.0、DDR2、DDR3、CAN、CCD、CMOS、PCIE、ZYNQ。還有簡單的i2c、spi、串口、ADC、DAC音頻等等, 之前做圖像處理的時候,一般FPGA的容量都比較大,有一些算法會集成在里面,尤其是CCD的圖像.采集時序非常復雜(呵呵,CCD的時序可好玩了)。常用的就是緩存行。CMOS的圖像采集時序就比較簡單了。 后來做其他行業了,控制類的比較多,ADC采集經常用到,一般都是純代碼寫出來的。
三、想要提高需要做的
個人認為:
1、知道自己寫出來的程序,占用資源的評估,是否能綜合出來。
2、如何知道自己的程序能跑多高的頻率。
3、DDR2緩存,一定要會額,這個是加分項,很多項目都是需要的。至少是經常碰到的。
4、會對算法進行分解,評估是否能在FPGA里面進行處理,PFGA能否寫出來高效的算法。
5、能跳過去一些坑,比如,復雜的SPI,一般是用C寫更好一些,FPGA做復雜的圖像顯示是不擅長的,但是顯示個簡單的圖標還是可以的,呵呵。
6、NIOS II和MICROBLAZE 其實用的不太多,什么情況下必須用呢? 呵呵,肯定是邏輯不好寫的時候呀,比如,復雜的軟件協議,網絡協議,你用verilog寫一個試試,累死你。但是用C是分分鐘的事情,畢竟C是上層的語言嘛!!