1. 程式人生 > >FPGA之學習FPGA需要注意的地方

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工程師也必將會有一個更加廣闊的施展空間。

相關推薦

FPGA學習FPGA需要注意地方

任何一個硬體工程師對FPGA都不會陌生,就好比C語言對於軟體工程師來說是必修課程一樣,只要是電子相關專業的學生,都要學習可程式設計邏輯這門課程。FPGA的英文全稱是Field Programmable Gate Array,即現場可程式設計門陣列,它是在PAL、GAL、EP

FPGA機器學習stanford機器學習第一堂

        主講:吳恩達。如果你學機器學習,對這個人牛,神的程度,不瞭解。你就可以洗洗睡了。必定全球人工智慧最權威專家中有他一個。          他說,機器學習是最重要的IT技能。這個是在矽谷那種地方。在中國,目前最火爆的是,網頁和安卓。不過大資料,網際網路,智慧機

python學習 ( 一 ) :安裝基礎和安裝環境時需要注意地方

常用:使用workon 時要在envs下使用 1. pip使用報錯 ‘pip’ 不是內部或外部命令,也不是可執行的程式或批處理檔案。 解決方法: 將python的環境新增到pathon中例如:Python27\Scripts 2.使用豆瓣原來安裝dj

FPGA機器學習stanford機器學習第十六堂

              Reinforcement Learning                強化學習。這裡舉例子是自主飛行的飛機。控制飛機,如果自主寫程式的話,會很難,所以需要它自學習。              最好用的地方,就是下棋。不過,怎麼半監督學習演算

FPGA機器學習stanford機器學習第四堂

                這個是第一篇講義的20頁。                                                                                                            

VUE 爬坑旅-- v-for,v-on:click 使用需要注意地方

今天在寫一個頁面的時候,需要在一個 v-for 迴圈裡面給每個 item 繫結一個點選事件,在這個事件中我需要拿到所點選 item 裡面的資料和它的 index。寫法如下: <div @click="chooseAddress(item,index)

FPGA機器學習stanford機器學習第二十堂

  線性二次相關問題。選擇動作。 POMDP引數又多了2個。   o是觀察分佈。 隨機策略??? 狀態和行為的對映,π(s,a) 制定一個可能的行為分佈。 π,策略。   a1,a2是兩個行為,加速度。 1,兩個的內積。s是位置,theta引數。 2,目標,最大化預期回報

FPGA機器學習stanford機器學習第十八堂

               MDP的幾個參量。 這個就比較熟悉了。獎勵最大化函式。 獎勵函式改變,並不會有太多影響。 s狀態,a行為。獎勵機制。 1是當前回報,2未來總回報。 左邊的圈是加1,後邊的圈加10,下面是機器人 的行為,為什麼沒有向10方向,是因為沒有足夠的

FPGA機器學習stanford機器學習第三堂2

             我已經寫過一遍了,為了我的分享事業,我在寫一次吧。            上一次我寫到了,這裡加號後面的那個就是錯誤率。為什麼會引入這個,上一篇,我有寫清楚。          這裡,我們假定它符合高斯分佈。為什麼是高斯分佈,上一篇也寫了。 這裡引

FPGA機器學習stanford機器學習第九堂

             接下來他要講的內容是,如何使用好這些工具。               開始的時候說了一些過擬合,欠擬合線性。              為了方便理解,來一個簡化版機器學習模型。 被假設錯誤分類的訓練樣本數的和。  叫ERM 最小化。這個是最基本的

FPGA機器學習stanford機器學習第十堂

               誤差都為0. 這次用三點舉例子。也是可以完全分離的。 如果用這三個點的話。h就不可以分離了。 可是用4個點的話。h函式也不可以完全分離。 在二維空間裡面,任何線性分離器都不可以分割右上角四個點的情況。 根據這些情況可以得到一些結論。 如果要分離

FPGA機器學習資料探勘,影象處理,機器視覺,模式識別,人工智慧,機器學習的關係

資料探勘:          資料探勘從字面上就已經很好理解了,就是從一堆資料中,挖掘出一些有用的資訊來的過程。比如說,我們的搜尋資料,如果某個地區大部分人都在搜尋MH370,表示他們在關注這個事情。我們就可以推薦一些安全知識,飛機知識過去。同樣的也可能會有蠟燭銷售高潮

FPGA初認識

而已 nbsp lte 內部 ron 受限 ram 我們 特定 什麽是FPGA FPGA(Field-Programmable Gate Array),即現場可編程門陣列 。看到編程兩個字碼農就笑了,不就是編程嘛,那可是我們的強項 。且慢,此編程非彼編程 。一定要把 F

如何學習FPGA(轉)

綜合 壓縮 soc 濾鏡 介紹 pga 百度文庫 參考 utf8 原文來自:http://m.blog.csdn.net/k331922164/article/details/44626989 一、入門首先要掌握HDL(HDL=verilog+VHDL)。 第

學習FPGA有必要寫SDRAM控制器嗎?

圖片 掃描二維碼 dram TP jpg 技術 text play com 在學習FPGA的過程中,註意是在學習過程中,聯系FPGA的使用技巧,強烈建議嘗試設計一個SDRAM控制器,不要使用IP核。 學習SDRAM控制器設計,能讓你掌握很多知識。 更好的使用狀態

成為Java高手需要注意的25個學習目標

1.你需要精通面向物件分析與設計(OOA/OOD)、涉及模式(GOF,J2EEDP)以及綜合模式。你應該瞭解UML,尤其是class,object,interaction以及statediagrams。 2.你需要學習Java語言的基礎知識以及它的核心類庫 (collections,seria

Lambda表示式和For迴圈使用需要注意的一個地方

一個需要注意的地方看下面的程式碼: using System;using System.Collections.Generic;using System.Linq;namespace MyCsStudy{    clas

詳解關於Vue2.0路由開啟keep-alive時需要注意地方

Vue2.0 做應用必有的需求就是頁面資料需要做快取,不用每次進入頁面都要把資料重新請求一遍,每次頁面切換都有段等待資料相應時間,這個使用者體驗可想有多麼蛋疼,所以頁面快取是必要的,啥時候需要更新頁面資料呢?可以監聽狀態變化,或者是手動下拉重新整理重新請求資料,醬紫,我想使用者體驗會做的更好。 keep-a

android studio快捷鍵需要注意地方

1:程式碼自動補齊:推薦使用none的形式: Editor—>General—>Code Completion:None 2:自動提示需要實現的方法快捷鍵設定: keymap—>Main Menu—>Code—>Implement Methods 3:設

學習Python的過程中需要注意的點

  一、學習流程 1.學習過程中(看視訊、直播課程、書籍) 跟上思路 一旦發現不懂的概念, 先記錄在筆記中, 事後再查 搜尋引擎(不要在意百度,谷歌哪個逼格高;自己注意篩選就好) 查不到,或者查到不理解;來群裡吧(516107834)