當前位置:編程學習大全網 - 編程語言 - 如何快速掌握FPGA?

如何快速掌握FPGA?

任何壹個硬件工程師對FPGA都不會陌生,就好比C語言對於軟件工程師來說是必修課程壹樣,只要是電子相關專業的學生,都要學習可編程邏輯這門課程。 FPGA的英文全稱是Field Programmable Gate Array,即現場可編程門陣列,它是在PAL、GAL、EPLD等可編程器件的基礎上進壹步發展的產物。

從表象看,Programmable這個單詞確實能夠很好的描述FPGA的特點,但這也使得很多初學者走了不少彎路。壹說到編程,大家不免聯想到 coding,因為軟件編程的思想對工程師來說已經是根深蒂固了。因此,很多初學者都會問壹個相同的問題,兩種硬件編程語言VHDL和Verilog,應該學哪個?即使明確了要學習哪種設計語言,也會壹頭紮進浩瀚的語法中,走向歧途。有些初學者寫了大量的代碼,在Demo板上跑了n個試驗,可還是覺得不懂 FPGA,甚至搞不清楚它和單片機的區別。這是為什麽?其實,這都歸結壹個原因,就是被“可編程”這3個字給迷惑了,也就是說,沒有弄清楚FPGA的本質是什麽。因此,對於FPGA的學習也就不著法門,事倍功半,浪費了不少時間,卻仍然達不到效果。

FPGA是作為專用集成電路(ASIC)領域中的壹種半定制電路而出現的,既解決了定制電路的不足,又克服了原有可編程器件門電路數有限的缺點。因此,從底層來看,FPGA還是屬於集成電路的範疇。就當前的技術而言,使用FPGA開發項目還是全部基於數字電路設計的,所以,FPGA的“可編程”也就是實現不同的數字電路邏輯。這與所謂的軟件編程有著本質的區別!歸根結底,FPGA設計就是電路設計,因此,對於每個FPGA工程師來說,在做設計時必須在腦中有電路的模樣,這很重要!那麽,到底該如何有效地學習FPGA呢?其實,很簡單,只要從以下7點著手,循序漸進,日積月累,就完全能夠對FPGA設計遊刃有余。

1. 首先,必須了解FPGA的結構和性能。不同廠家,不同系列的FPGA芯片都有不同的結構和性能,但是萬變不離其中。剛開始,從掌握幾款典型的高端芯片開始,例如Altera公司的Stratix III和Xilinx公司的Virtex 5。之後,再去了解其它系列的芯片就很容易了。至於Lattice和Actel公司的芯片,當使用時再了解也不遲,因為學習主流的東西才會更加有效!許多有關FPGA的教科書都會以幾款常用的芯片為例,講述FPGA的基本結構和原理。初學者看了後,總覺得過於抽象,有點不知所雲的感覺。因此,為了深刻理解 FPGA,必須要有紮實的數字電路基礎!在數字電路裏,最基本的就是邏輯和時序。工程師必須明白FPGA內部邏輯結構和數字電路基本電路結構的關系。例如,任何4個輸入信號的組合邏輯都可以通過FPGA提供的4輸入LUT來實現。如果使用Xilinx的芯片,移位寄存器既可以通過多個觸發器級聯實現,也可以通過LUT來實現。通常,初學者可以設計出正確的邏輯,但卻很容易忽略時序。在I/O口的設計中,與時序相關的缺陷對於產品是致命的,會影響產品的可靠性。因此,在掌握了結構後,還必須關註芯片的壹些重要時序參數,例如I/O口時鐘的建立時間、保持時間和從觸發器到輸出的延遲時間,以及芯片內部工作時鐘的最高頻率等等。只有充分掌握了所使用芯片的結構和性能,才能設計出壹個合理的系統,才能保證FPGA的設計可靠穩定。FPGA廠商提供的大量文檔是壹個不錯的學習資料。

2. FPGA既然是“可編程”,自然離不開編程語言。其實,早期的工程師大多使用原理圖輸入方式進行邏輯設計,這是壹種更接近於電路設計的設計方式。這種設計方式對設計者要求較高,而且也不利於移植和維護,因此VHDL和Verilog才漸漸流行起來。這兩種語言,無所謂孰優孰劣,只不過Verilog發展的比VHDL好,而且和將來可能壹統天下的SystemVerilog比較接軌。它們都是硬件描述語言。既然叫硬件描述語言,自然是和軟件世界裏的編程不壹樣,所以,初學者不能把它當作軟件編程語言來學習,否則就會舍本逐末。如果僅僅只是從事FPGA邏輯設計和做簡單的功能仿真,只需學習最簡單的語法就夠了。那些用於寫驗證腳本的語法,完全不用學,基本用不上。語言僅僅只是壹個工具,尤其在硬件設計裏,代碼寫得漂不漂亮,並不重要,最關鍵的是設計思想。記住,FPGA工程師是在設計電路,而不是在“編程”!

3. 很多工程師會談到算法的重要性,認為必須懂得很多算法。沒錯,好的算法對於設計來說猶如利器壹般。可是,研究算法和如何實現算法是兩個不同的概念,研究算法是在做數學題,實現算法才是工程師的職責。這裏並不是說FPGA工程師不用去研究算法,而是強調職責所在。不同的算法,我們對其原理的研究和理解的要求也是不同的。例如8B/10B編碼,只要妳懂得在哪裏需要使用它就夠了,現成的IP Core可以直接調用。但是,諸如FEC編解碼這樣的算法,則只有了解了基本原理後才可能懂得如何實現。對於算法,FPGA工程師的重點就是在於“如何實現”!。另外,算法之外,邏輯設計裏常用的設計方法必須懂得,例如,乒乓操作、流水線設計和分時復用等等。還有常用的邏輯模塊,如異步FIFO、狀態機,這些其實都是數字電路裏最基礎的東西,但是對於初學者來說,在做FPGA設計時未必會正確的使用。

4. FPGA設計必須有壹個好的設計流程來支撐。代碼寫完後,花大量時間做完善的功能仿真和驗證是很有必要的。可是壹些工程師並不重視仿真和驗證,而是迫不及待的上板調試。碰到BUG後就在代碼上修修補補,運氣好的話,BUG表面上是解決了,可真正深層次的原因卻未必發現,給產品留下了隱患。壹個好的設計流程要求大多數BUG在前期工作中必須解決掉,功能仿真和驗證則是壹個很有效也很重要的步驟。除了仿真驗證,綜合和布線也必須重視,這要求我們必須仔細瀏覽編譯報告和時序報告,因為,許多時序問題都能通過報告反映出來。有時候,壹些工程師碰到時序問題,僅僅做時鐘反相來調整數據和時鐘的相位關系,或者修改綜合和布線的參數,仍無法解決問題。尤其是在用了高速時鐘的設計裏,大多數情況,我們只有修改代碼裏的邏輯才能滿足設計的時序要求。這些也只有仔細分析了報告後,才能對癥下藥。另外,對於大多數同步邏輯設計來說,時序仿真是沒有必要的,這壹步完全可以省略。

5. 現階段,FPGA發展的三大方向就是SOC,高速I/O和DSP。在有限的時間裏,選擇壹個領域進行主攻是有必要的,只有明確了目標,才會更加投入。 SOC設計要求設計者對軟件編程、CPU原理甚至是操作系統比較了解才行,因為SOC就是壹個軟硬件結合的系統。高速I/O設計則要求設計者掌握許多模擬電路的基本知識以及壹些常用的通信協議,例如,SDH、GbE、PCI-E等等。FPGA在DSP領域的使用是近幾年興起的壹個發展方向。FPGA由於其內在的並行特性,能以很高的效率實現DSP算法中計算量較大的模塊,非常適合視頻和圖像處理等對DSP性能要求越來越高的新興應用,設計者需要掌握數字信號處理常用算法。這3個方向完全不同,切勿囫圇吞棗,壹切通吃!“術業有專功”,資深的高級工程師也很難在多個方向都取得成就。當然,若能在壹個領域有較深的研究,同時,對另外兩個領域也有壹定的了解,那就更好了。

6. 壹個優秀的FPGA工程師,必須做到“壹專多能”。所謂的“壹專”當然是指在FPGA設計領域的專業深度,而“多能”則是要求工程師對其它專業領域也要有所了解和掌握。例如,對於設計壹個SOC系統來說,C語言就必須學習,否則對於片上系統的架構就可能不合理。另外,對於設計高速I/O口的工程師來說,電路板原理設計和PCB設計則需要有所了解。只有掌握了預加重、均衡以及阻抗匹配等這些與模擬電路相關的概念,才可能在設計和調試中得心應手。

7. 最後壹點,也是最難的壹點,這也是邁向高級工程師的關鍵,就是FPGA的設計需要壹個好的系統架構方案和合理的模塊化分。這有助於FPGA的調試和維護,也便於多人***同開發,尤其是在使用大規模FPGA時,這也就是常說的Top-Down設計方式。把壹個龐大的、復雜的設計化分成若幹個小模塊,而且層次要分明,不能扁平化,這需要設計者對設計必須有全面深刻的理解。壹個雜亂無序的設計對於後期的維護是災難性的,尤其是對於接手者來說,若要修改某個邏輯,可以說是苦不堪言。從這壹點看,初學者的問題都可以在這裏找到答案。FPGA學什麽?就是學習系統級的電路設計。所以,FPGA工程師的發展方向就是系統工程師。

以上7點若能有深刻理解,則就能看清FPGA的本質了。市場的瞬息變化,要求電子產品必須對市場具有高敏感性,產品從方案設計到市場投放的時間越來越短,FPGA在其中功不可沒。另外,在面對Cost Down時,FPGA也起著不可或缺的作用。在當今時代,FPGA已經在通信、數據處理、網絡、儀器、工業控制、軍事和航空航天等眾多領域得到了廣泛應用。隨著功耗和成本的進壹步降低,FPGA還將進入更多的應用領域,相信FPGA工程師也必將會有壹個更加廣闊的施展空間。

推薦壹本書《基於VHDL的FPGA開發快速入門·技巧·實例》

加油吧!

  • 上一篇:中職計算機專業課程設置
  • 下一篇:搞C++算法的工作太難,感覺無法勝任,怎麽辦
  • copyright 2024編程學習大全網