如何學習FPGA

原地址:http://www.cnblogs.com/jacob1934/p/6811974.htmlhtml

本人也入門不久,但願我不會誤人子弟哈。python

1.沒必要着急買開發板。web

2.在學習FPGA以前,先去學習一下數字電路,不要求精通,最起碼要有基本的電平標準、單端/差分、時鐘、觸發器、門電路概念。編程

3.瞭解FPGA。
【3.1】FPGA的內部以查找表爲主,輔助以PLL、高速觸發器、靜態存儲器等。
數字電路在必定的輸入下,會有肯定的輸出;當全部的輸入輸出對應關係都被計算出來,而且經過查找這種對應關係,而在必定輸入下產生對應的輸出,基本能夠認爲咱們等價地實現了該數字電路。 查找表就是這樣的電路,當一個查找表單元不夠實現目標數字電路時,可使用多個查找表聯合,以及使用FPGA上的其餘資源。
FPGA配置文件包括各個查找表的內容、內部連線等等。FPGA內部會以SRAM、NOR FLASH的方式保存配置文件,SRAM方式掉電後數據消失,須要在每次上電時從外部的SPI FLASH加載配置文件;NOR FLASH方式則不須要外部SPI FLASH,上電後很迅速的進入工做狀態。架構

主要的FPGA廠家有xilinx、altera(現屬於intel)、actel(現屬於microsim)、lattice。這四家公司全是美國的,國內也有幾家,但如今還比不上國外。前二者的銷量最大,xilinx目前的主流低端產品是spartan6,altera的主流低端產品是cyclone IV。spartan6和cyclone IV都是SRAM架構的FPGA,altera的max 10是NOR FLASH架構的FPGA(也被altera定義爲CPLD)。編程語言

【3.2】CPLD主要以宏單元和乘積項爲基本結構,也就是經過改變邏輯門和觸發器等的連線的方式實現數字電路,容量通常作不大。通常都是使用芯片內EEPROM或NOR FLASH保存配置信息。工具

【3.3】相比之下,FPGA更適合時序邏輯,CPLD更適合組合邏輯。CPLD的信號延時較爲固定、可預測,而FPGA的延時抖動較大。FPGA的容量較大、價格較高。學習

【4】學習一種硬件描述語言(HDL)的基本語法。
HDL是對數字電路的描述,經過編譯器synthesize(綜合)成網表,再implement(translate----map----place&route),最後生成對應器件的配置文件。
常見的HDL是verilog和VHDL,我我的用verilog。開發工具

到網上找一篇語法教程,通讀二、3遍便可。測試

對於verilog初學者,有幾點常見注意點:
【4.1】每一個寄存器都只能在一個always裏被賦值。
【4.2】時序邏輯,例如

reg a,in;
always @(posedge clk)
begin
    a <= in;
end

中,只使用<=(也叫非阻塞賦值)

【4.3】組合邏輯,例如

reg a,b,c;
always @(*)
begin
    c = a + b;
end

只使用=(也叫阻塞賦值)。組合邏輯中,雖然定義了reg(必須定義成reg),但會在綜合的時候被優化成wire。

【4.4】always裏的語句實際上都是「並行執行」的,除了testbench。
其實說並行執行也不全對,GPU裏幾千個核同時運算,也叫並行執行。FPGA裏全部的查找表都是隻管本身的輸入的,把testbench外的verilog當作數字電路的描述便可(原本就是HDL)。

 

【5】FPGA型號基本瞭解。

我推薦新手先從spartan6或cyclone IV開始,這兩個系列都有QFP封裝,容易焊接、成本低(便宜的只有二十元)、結構相對高端型號較爲簡單。
查閱官網,簡單瞭解器件的基本特性便可,好比容量、封裝、IO電壓、速度等級、工做溫度等等。
網上也有對各廠家和系列的對比文章,能夠看一下。
以便稍後選擇相應的開發環境和器件。

【6】經過仿真進一步學習HDL。
仿真的工具能夠是modelsim等,也能夠是FPGA廠家的開發環境中自帶的。我推薦先用後者。
  xilinx的低端開發工具是ISE 14.7(最高版本,再也不更新),高端開發工具是vivado。
  altera的開發工具是quartus II。
其餘廠家的產品我我的沒有使用過。
X和A的開發環境都有web版,高端功能和器件受限,免費。網上有完整版的破解(就是X和A的代理髮出來的……)。

我是先用ISE 14.7自帶的ISIM仿真的,ISIM的功能比modelsim弱,但對新手和小項目足夠了。ISIM包含在ISE中,能夠更早、更快的熟悉開發環境。另外對新手而言,modelsim有點複雜。

使用ISE、quartus等仿真,須要選擇具體FPGA型號,選擇較小的型號便可,好比XC6SLX9-2TQG144C和EP4CE6E22C8n,由於這階段的代碼量都很小,並且通常跟具體硬件無關。

有不少的實例書籍和教程,對照着實現並仿真。

仿真要寫testbench,就是向你寫的verilog模塊給測試信號的代碼。verilog中有一些語句是隻能用在仿真中的!好比$display、event。for可綜合但不推薦在 generate testbench 外使用

暫時忘掉C/C++等語言。大多數人在學習HDL以前就已經學習了C/C++等等運行在CPU上的編程語言,而後在學習HDL的時候會不自覺的將C/C++等語言的語法、習慣、理念帶入到HDL中,並且有時候根深蒂固。請記住:HDL是對硬件的描述,在編寫HDL時,要想着這段語句會被綜合成什麼樣的等效邏輯電路,每次編寫完後都要看看綜合出的RTL圖和預期的有多少差距,而後再仿真看下時序是否符合預期,有差異固然要改嘍。

在仿真中,會出現不少warningerror,必定要經過搜索引擎弄明白warning和error出現的緣由和解決辦法,嘗試將全部warning都去掉

嘗試同一個功能的不一樣實現方式----要速度仍是面積?這就是經驗。

【7】HDL進階。
好比verilog 2001。
好比兩段式、三段式狀態機的寫法。


【8】FPGA進階瞭解

瞭解更多的FPGA知識,開拓下知識面,看到琳琅滿目的開發板也能知道如何選擇。

ip core,具體芯片和開發環境下都有哪些IP core,如何使用。

好比 什麼是軟核、固核、硬核。好比全部BGA封裝的spartan6都帶DDR3硬核,-3等級的能夠跑到DDR3-800;而cyclone IV系列都只有DDR3軟核。

好比 X和A的各類原語,好比xilinx的serdes原語能夠實現1gbit/s的串並轉換。

好比 spartan6的LVDS輸出只能在BANK0和BANK2(官方手冊有寫)。

好比FPGA的特殊管腳,GCLK、VREF、差分對、VCCIO。使用各類電平標準時的VCCIO和VREF需求(官網有文檔)。

好比主動配置和被動配置。

spartan6帶T的和CYCLONE IV的GX型號均可以用來作什麼,PCIE、SATA等等。

如何經過JTAG下載配置文件,xilinx的chipscope、altera的signaltap。

【9】買開發板或本身打板
對於新手,買便宜的甚至是二手的開發板就好了,通常100-300元就夠了。能夠買核心板+外設子板,也能夠是一整塊板。
買開發板的好處,一是電路設計出錯的可能很小,二是附帶的教程。
不過若是你有足夠的閱讀量和畫板能力的話,我推薦本身畫板。QFP144封裝(x和a都有)的FPGA價格仍是挺便宜的,低速應用只要2層板就能搞定,比買一樣配置的開發板還要省錢,並且也容易焊接。

根據開發板的教程學習實踐,或者給本身定個小的項目作作。

【10】更多進階

好比implement後的仿真。

好比PCIE、DDR3內存。

如何開發本身的ip core。

好比軟核CPU。

好比ZYNQ系列、cyclone V soc系列。

【11】學習TCL腳本

FPGA的編譯和仿真中,通常都會使用預約義的tcl腳原本完成任務,學習TCL腳本能夠在必定程度上提升工做效率。

【12】相關技能和行業知識

好比PC上的軟件、python之類的腳本語言、matlab、Linux、單片機、高速PCB的設計,看你的需求和興趣。

實際的FPGA應用都是在具體行業具體的項目裏的,好比數字信號處理、圖像處理等等,初學者能夠給本身定一個方向,而後多多get相關技能。

相關文章
相關標籤/搜索