本文首發於微信公眾號「花螞蟻」,是快速入門FPGA與Verilog第1講
1.從新手到專家之路
任何領域從新手到專家都分5個階段:
探索期 入門期 勝任期 高手期 專家期
從入門期到勝任期再到高手期都是可以通過項目歷練而達到,但是從高手器到專家期一般由人的思維而決定。
這其中最難的就是入門期的新手入門階段,由於新手期的迷茫,特別是沒有高人指點的情況下,新手的學習狀態曲線呈現出波盪起伏的趨勢:
新手們憑著興趣一腔熱血扎入到FPGA和Verilog的學習中去,一個個的難點使之挫折,直至厭惡懷疑:我為什麼要學這?如果還能堅持,經過了這段低谷期後,你開始慢慢找到感覺,然後逐漸開竅:不過如此嘛!此刻激情已然褪去,自滿導致麻木,但是在你接觸到更多的項目後你才會領悟到:我還差得遠呢!此刻你已經入下一個快速提升期。
起步之後的專家之路同樣是起伏的曲線:
緩慢起步期:往往對什麼都有興趣,但是都不能深入的去學習,一個個的攔路虎使我們知難而退,大多數人熬不過緩慢起步期,起步期對應的就是我們的入門階段。
快速提升期:在這一階段,已經克服了第一個困難,成功地發現了學習的方法,是提升最快的階段。
高原期:只有極少數的人能夠進入這個階段,因為大多數人依賴原有的學習方法,不能建立屬於自己的方法論,思維限制了他們的進步。
FPGA的學習之路是一個模仿、學習、動手、創新、設計,不斷迭代的過程。
初學者往往是從模仿別人的代碼開始,學習語法、學習建模方法、學習代碼風格等等,在學習的基礎上動手修改出自己的代碼,熟練後開始加入自己的創新點,可以獨立的做自己的設計。
FFPGA初學者會常見現象:
目前我能想到的初學者的問題就這些,如果你作為初學者還有其他問題,可以加我個人微信(GreenAnt_Wayane)詳細交流。
說到FPGA,往往離不開介紹ASIC。從字面意思上來說:
FPGA(Field-Programmable Gate Array),即現場可編程門陣列;
ASIC(ASIC,Application Specific Integrated Circuit)是用於供專門應用的集成電路晶元技術。
我的理解是FPGA是可編程的ASIC,FPGA是一個百變星君,可以孫悟空的七十二變,在FPGA內部資源允許的情況下,FPGA可以實現ASIC晶元的功能,反之,ASIC內部的邏輯都是定死的,只能實現固定的功能,ASIC遠沒有FPGA靈活。打個比方:如果說ASIC是一塊磚,那麼FPGA就是水泥,可以揉捏成任意的形狀。
下面是一些FPGA晶元和ASIC晶元的實物圖片:
從FPGA和ASIC的實物圖片可以看出:FPGA和ASIC也沒有什麼區別嘛,從外觀上看都是晶元嘛!恭喜你答對了,他們都是晶元,FPGA和ASIC的本質的都是由晶體管組成,所以他們看著差不多。
去掉晶元的保護外殼(封裝),會漏出裡面的的裸片(die),晶元的管腳就是從裸片上的PAD用金線連接出來的,如下圖所示。
裸片是從晶圓上一片片的切下來的,晶圓的樣子如下圖所示,
晶圓是指硅半導體集成電路製作所用的硅晶片,由於其形狀為圓形,故稱為晶圓。在硅晶片上可加工製作成各種電路元件結構,而成為有特定電性功能的集成電路產品。上圖中的晶圓,每一個長方形就是一片晶元的裸片,每一個裸片將來都可以封裝成一塊晶元。
晶元是如何在硅晶片生產出來的呢?這幾需要集成電路的版圖了,版圖就好比PCB文件,只不過集成電路版圖用於指導晶元的生產,PCB用於印製電路板的生產。下圖就是一個晶元的版圖,周圍黃色的方形就是將來封裝晶元時,用金線連接晶元管腳的PAD。
像PCB一樣,版圖也是分層的立體結構。
以一個或非門為例,它的版圖結構如下所示:
一個晶元的版圖就是由千千萬萬個類似於或非門的基礎電路搭建而成,門級電路又是由更基本的單元:PMOS和NMOS組成。
MOS管的剖面結構如下所示:
通過上面的講解我們明白了任何的數字晶元都可以由由晶體管組成。
數電中我們學過卡諾圖化簡邏輯表達式的方法:
由卡諾圖化簡過程,可以得知,任何的數字邏輯表達式最終都可以化簡成與或非組合的形式。
而與或非門又由基礎的PMOS和NMOS(晶體管)組成,與或非門又可以搭建出任何的組合邏輯電路。
非門、與非門、或非門由晶體管級的PMOS和NMOS組成,組成電路如上圖所示。
所以,任何的數字組合邏輯電路都可以有晶體管組成。
FPGA的原理是基於SRAM的查找表結構。通俗的講就是:可以將FPGA看做是一片SRAM,利用開發工具軟體計算出所有的輸入組合排列對應的輸出結果,然後將輸入組合作為SRAM的地址,該地址中存放的是與輸入組合對應的輸出。當輸入信號變化時,到相應的地址中讀取提前計算好存入的結果,然後輸出。
FPGA結構組成包括以下:
其中1-5是FPGA必須具備的,6、7一些低級的FPGA可能不具備。具體不再細講,幾乎每一本FPGA的書籍都會有詳細的講述。
如何將一堆積木零件搭建出我們想要的結構呢(將FPGA配置成我們所需要的電路)?這就需要我們的Verilog HDL登場了。
Verilog HDL是一種硬體描述語言,可以抽象的描述硬體電路。硬體描述語言同樣可以用於ASIC設計和FPGA設計。
常用的硬體描述語言還有VHDL,關於VHDL和Verilog HDL,我的總結就是:VHDL語法嚴謹(潛台詞:規矩多),適用與大型電路設計;Verilog HDL語法靈活,上手快。所以建議新手學習Verilog HDL。即使沒學過VHDL,但是精通Verilog HDL也照樣能夠看懂VHDL,因為建模思想都是一樣的,猜也能猜個八九不離十。
你必須知道的,Verilog的所有語法中:
?Verilog語法中30%的語言用於電路設計(可綜合,可產生實際電路)
?70%的語言用於功能模擬,也就是測試
也就是說,你沒必要掌握所有的語法。有的同學抱著本Verilog語法書從頭到尾一直不拉的啃,妄想著學會說有語法後再去設計電路,殊不知他拿著80%的時間去學習著70%的可能用不到的語法。我並不是說模擬的語法不重要,我的意思是先掌握基本的簡單語法,四個字:先幹起來。
學習Verilog就像是蓋房子,妄圖掌握所有語法的人想著我一定要把地基打牢,所以花費了巨量的經歷和時間磨語法,就一直在打地基。而先幹起來的同學雖然房子不完整,但是輪廓已經起來了,以後修修補補,就能完工。
總結
在學習一門技術之前我們往往從它的編程語言入手,比如學習單片機時,我們往往從彙編或者C語言入門。所以不少開始接觸FPGA的開發人員,往往是從VHDL或者Verilog開始入手學習的。但我個人認為,若能先結合《數字電路基礎》系統學習各種74系列邏輯電路,深刻理解邏輯功能,對於學習HDL語言大有裨益,往往會起到事半功倍的效果。
當然,任何編程語言的學習都不是一朝一夕的事,經驗技巧的積累都是在點滴中完成,FPGA設計也無例外。
我後續推出的快速入門Verilog HDL及FPGA視頻教程的學習方式將是:
由於工作比較忙,下期教程更新前同學們可以先看書自學一下語法,下面是我搜集的一些不錯的教材書籍。
鏈接:https://pan.baidu.com/s/1DiXsasDyKR7kTgBQBvAg8g
提取碼:d0ef
若鏈接失效,請關注微信公眾號花螞蟻,後台分別回復「教材書籍」重新獲取鏈接。
本文章首發於我的公眾號(花螞蟻),後續會在微信公眾號上發布快速入門FPGA與Verilog HDL系列視頻教程,有興趣的同學可以關注一下。
推薦閱讀: