自從接觸和認識FPGA以后,自由電子科技堅定的選擇了FPGA器件作為我們創(chuàng)新和實現(xiàn)自身價值的承載平臺,對此,我想從以下幾個方面介紹一下。
1. 對FPGA的認識,為什么要選擇FPGA 現(xiàn)在的FPGA器件在電子行業(yè)中是一顆明星,這是一種正在不斷采用新的半導體制造工藝,邏輯容量不斷增加,應用領域不斷拓展,器件成本不斷下降的器件,F(xiàn)PGA廠商激烈的競爭使開發(fā)軟件和方法不斷的進步,是一個正在盤古開天時期的事物。很多人對此的解釋是FPGA擁有很大的靈活性,在半導體制造工藝的NRE不斷增加、應用需求不斷變更、品種要求多而數(shù)量要求少的現(xiàn)實情況下,F(xiàn)PGA是一個最佳選擇,這正是現(xiàn)在FPGA廠商們宣傳時耳目能詳?shù)年愒~。我們認為,F(xiàn)PGA在電子產(chǎn)業(yè)和信息產(chǎn)業(yè)上的地位并不是這么簡單。 實際上如果通過我們對計算機發(fā)展的歷史、軟件發(fā)展歷史的認識,可以推斷FPGA器件是一方向性的創(chuàng)新,幾千年以前我國的祖先們感悟了蘊涵在簡單的陰、陽中的事理有了太極,陰陽可以生萬物。一百多年前的布爾代數(shù)使我們從數(shù)學上有了堅實的基礎,從機械計算機到電子計算機的演變中,我們得到了馮.諾依曼型的程序存儲類的計算機體系,并在當代發(fā)展為及至,極大的推動了人類社會的前進。馮.諾依曼計算機體系是在CPU硬件的基礎上加上千變?nèi)f化的軟件,軟件的靈活性使計算機滲透到各行各業(yè),在20世紀后半頁演繹了氣勢恢弘的發(fā)展過程,造就了象比爾.蓋茨那樣的天才和巨富。但我們要認識到在這個體系中,由一部分人從事低層硬件,CPU架構體系的設計,大部分應用工程師在相對固定的硬件系統(tǒng)上從事開發(fā),這種模式在現(xiàn)在依然擁有無與倫比的活力和現(xiàn)實作用,在這里我提醒一點,在這個體系中,對大部分工程師來說,一半固定,硬件CPU是不可編程的,另一半靈活是可編程的(軟件),很自然我們會想聯(lián)想到如果兩個部分都是可編程的那會是怎么一種情況呢?很好,現(xiàn)在有一種器件來了,這就是FPGA,它代表的就是硬件的編程。這兩部分都可編程的一個結合點就是FPGA上的軟核,在Altera提供的開發(fā)環(huán)境中提供的SOPC環(huán)境就是如此,你可以象以往一樣在生成硬件架構以后進行軟件開發(fā)。但令人矚目的是它可以隨心所欲的定制外設,外設不再固定,更進一步它還支持增加自定義指令,從而改變CPU,在軟件上可以用C2H把原來屬于軟件運行的指令變換成RTL邏輯來完成,極大的提高了效率,在這里要提醒的是,這樣的事物才剛剛開始,是長江源頭佗佗河上那不起眼的涓涓溪流,它正在發(fā)展,正在完善,從歷史的眼光看,我們要有足夠的耐心。 以上的文字就象是傳教詞一樣令人心醉,這些還是從比較現(xiàn)實角度看待FPGA這個事物的,在比較長時期的學習和思考過程中,我還領悟到更深一個層次的含義,在說這個之前,容我介紹一種類型的應用,我們知道RAM型FPGA在不上電的時候,是一個半定制的ASIC,擁有基礎的邏輯,而不擁有功能性邏輯,所有功能性邏輯是通過上電配置以后完成的,已經(jīng)有工程師在設計產(chǎn)品的時候使用了這樣的方案:把各種不同的電路功能編譯成不同的配置文件,根據(jù)需要通過外部單片機把合適的應用bit流寫入到FPGA內(nèi),從而完成根據(jù)功能需要變更硬件,這個需求很好理解吧。在軟件領域可重構這個詞出現(xiàn)的概率是非常多的,軟件的發(fā)展也是往這個方向前進,c++,java支持下的接口、模板、對象重載等等,再到組件、COM,無一不用可重構這個概念。在FPGA領域,現(xiàn)在絕大部分器件只支持整體配置,也就是整體重構,如果能支持局部電路重構,那么上面我們敘述的應用就能夠很自然的實現(xiàn),而且切換速度會很快,實際上我們需要的是在接口不變的情況下切換速度要非???,快的讓邏輯自身也不知道底層硬件已經(jīng)重構,就象沒有變化一樣。為什么我們這么重視電路可重構呢?一個原因是我們在軟件發(fā)展的里程上看到的,我們可以在接口的支持下以相同的程序支持很大一類的應用。另一個原因我認為:人類信息科技發(fā)展的一個必然趨勢。為什么這么說呢?需要從我們?nèi)吮旧砩砩险J識開始,我們?nèi)祟惖拇竽X是億萬年來自然選擇的結果,是宇宙中最精致的事物之一,是物質運動的最高形式(這有些象哲學家的說辭了),我們的大腦能形成條件反射,一個多次重復的思考過程,最后就形成的直接的通路,這種變化能讓我們以最快的速度去適應和處理信息,我們對計算機的要求不也是這樣嘛,可是,我們現(xiàn)在的計算機對多次重復的處理,能形成直接的通路嗎?不能,一個計算,再怎么重復和有規(guī)律,現(xiàn)在的計算機只要程序不變,它永遠重復,這就是人類能有直覺,而計算機不能的一個原因吧。說到這里,基于LUT查找表的FPGA倒是有些這個思想的雛形,對于一些邏輯計算,我們通過EDA軟件的計算和優(yōu)化,把輸入和結果直接下載到LUT的RAM中,省略了電路邏輯處理過程,這也算是一個直接通路吧。我們要使計算機的能力越來越強,現(xiàn)在的一個方法是提高頻率,這個方法很直接,可是現(xiàn)在材料和工藝在功率問題上的制肘已經(jīng)使這個方法走到盡頭了(熱衷于提高頻率的Intel不是也放棄了這個方法了嘛),于是新的方法是并行,用多核,Intel和Amd現(xiàn)在都在這個陣地上拼搶,說到并行,實際上fpga是一個很好并行處理平臺,只要邏輯資源允許,它內(nèi)部也可以構建n處理模塊,n個軟核cpu。這些方法中前一個方法是靠工藝取勝,后一個方法是靠體系取勝,體系取勝是最終的辦法。人類大腦中的蛋白運算并沒有如此高的頻率,神經(jīng)傳導速度也比不上電路和光纖,但它的處理能力、容量和適應能力是驚人的。選擇FPGA的一個直接原因是它的并行和靈活,但我認為更重要的應該是它的可重構上,特別是局部單元電路可重構的FPGA更能夠做到象人類大腦中信息處理機制一樣,也就是信息處理的過程中根據(jù)需要能夠改變物理聯(lián)系通道(即底層硬件電路),局部單元可重構的FPGA能帶來體系結構上和實現(xiàn)算法上的革_命性創(chuàng)新。這樣的FPGA和相應的算法會在體系結構上取勝,能夠在不遠的將來構建軟硬件更加協(xié)同的應用方案。這種類型的FPGA器件(或以其他名字命名的器件)必然會出現(xiàn)。 數(shù)字信號處理應用是目前科技創(chuàng)新的一個前沿陣地,現(xiàn)在FPGA以其并行性和高DSP處理性能進入到信號處理領域?,F(xiàn)代數(shù)字信號處理中,以往很多時候我們選擇的都是帶數(shù)字信號處理優(yōu)化指令的CPU,象TI和ADI公司就擁有很多DSP芯片,在這些DSP芯片上實現(xiàn)算法處理,一般用C描述算法(關鍵處理用匯編),編譯以后以機器指令的方式在DSP芯片上運行,在一個芯片上這樣DSP處理單元是不多的,需要軟件做不斷重復的疊代運算從而高效利用這些DSP指令單元,重復的指令執(zhí)行過程影響了DSP處理能力的提升,實際上一些DSP芯片集成了ARM處理器、DSP硬件運算加速器以后在性能上覆蓋了大部分應用,在高端DSP處理領域FPGA的并行優(yōu)勢得到很好的體現(xiàn),特別是FPGA在邏輯、DSP處理塊、片上RAM規(guī)模越來越大的情況下,這個優(yōu)勢會更多展現(xiàn)出來。我們知道不管用什么途徑實現(xiàn),在現(xiàn)代計算機中的任務或算法實現(xiàn)最終都要在嚴格的時序狀態(tài)機中完成,現(xiàn)代軟件開發(fā)語言都是接近人類語言的方式描述處理過程,盡管有一定的節(jié)拍和步驟,但主要描述的是一個過程,而非嚴格按時鐘節(jié)拍的處理過程,語言編譯軟件生成的指令和CPU硬件(或DSP處理器)已經(jīng)為我們完成了這個從語言算法描述空間到硬件狀態(tài)機處理空間的轉換。FPGA DSP應用開發(fā)方面,盡管擁有性能優(yōu)勢,但如果用HDL語言去開發(fā)DSP顯的很局促,因為我們不能同時考慮算法的實現(xiàn),又同時滿足嚴格的狀態(tài)機時序,所以用HDL直接寫DSP處理模塊這種開發(fā)模式不容易被廣大的工程師接受,這就象CPU開發(fā)出來以后,用機器碼或匯編去開發(fā)應用一樣,計算機和軟件發(fā)展的歷史使大家可以相信,這個過程會很短暫,很快會有合適的開發(fā)工具來彌補這個空擋,目前math works公司的MatLab開發(fā)工具就是一個很好選擇,擁有算法仿真到RTL CORE GENERATE,使得FPGA的DSP應用開發(fā)流程得以完整的實現(xiàn),各個FPGA廠商也提供了各自的MatLab simulink下的工具套件,比如Altea的DSP Builder,xilinx的core generate和Xilinx AccelDSP,這些軟件完成了算法描述到硬件狀態(tài)邏輯處理機的轉換。這種開發(fā)方式現(xiàn)在還處于初始階段,軟件工具、開發(fā)習慣等都需要我們有一個學習積累過程。 現(xiàn)在越來越多的模塊被集成到FPGA芯片上,微處理器、高速收發(fā)器、以太網(wǎng)控制器、PCIE端點控制器、DSP處理單元、片內(nèi)RAM等等,F(xiàn)PGA不再是一個單純的編程邏輯器件,而是一個彈性很好的系統(tǒng)集成的平臺,走出了IC原型驗證的范疇。是一個很現(xiàn)實并且有前途的選擇。 2. 學習和進階 FPGA在電子開發(fā)工作中已經(jīng)上升到數(shù)字系統(tǒng)核心處理器,盡快掌握FPGA開發(fā)技術顯得非常迫切。我們來自五湖四海,為著一個共同的目標走到一起來了,我們中間可能有學生,學好一門技術追求好的發(fā)展,也可能已經(jīng)是工程師,要尋求好的解決方案。 FPGA開發(fā)對學習者的要求相對是比較高的,我們上一節(jié)所說的,F(xiàn)PGA是一個可以實現(xiàn)軟硬件協(xié)同設計的平臺,即需要硬件也需要軟件,而且軟件開發(fā)也比較多,不同F(xiàn)PGA提供商提供各自的開發(fā)環(huán)境,還有第三方的軟件工具。我們可以按下面的幾個方面開始 HDL語言的學習VHDL和Verilog HDL都可以,HDL語言是FPGA開發(fā)的基礎,先掌握一門,以后根據(jù)需要去理解掌握另一門會比較方便,兩門都會是最好的,因為提供有關代碼資源的可能是你不熟悉的HDL,有時我們還需要把這個語言實現(xiàn)的翻譯成另一個語言,以便在開發(fā)環(huán)境上統(tǒng)一實現(xiàn)。如果你有C語言基礎,推薦學Verilog HDL,因為語法上類似,需要注意的點是 a、Verilog是描述,而不是運行代碼。代碼綜合以后是邏輯網(wǎng)表,而不是指令,所以需要注意我們寫的代碼是否正確描述了需要實現(xiàn)的邏輯電路。 b、除了邏輯功能,還要把描述中的時序給看出來,一開始的時候,可以根據(jù)代碼嘗試著把波形畫出來,盡管仿真軟件也能做到這個,還是建議自己畫以加強對語言的理解,可以用仿真軟件來驗證你畫的波形 c、注意區(qū)分哪些是可綜合的,哪些是不可綜合的代碼,這個對出學Verilog的人會比較困惑,因為C只要語法正確,可以編譯就能運行,而Verilog一些代碼只能在仿真環(huán)境中用,不能綜合成實際的電路 d、要多關注描述代碼綜合后的電路,不能象C語言那樣寫好了就行,Verilog寫好代碼只能算做了一半工作,還要做仿真,如果時序不滿足還可能調整程序代碼。 e、多寫多試,這個方法對學習任何事物都一樣,如果有環(huán)境,即使沒有老師指導照樣可以試出來。 f、多看代碼,特別是原廠提供的代碼,這些代碼應該代表了比較高的FPGA設計水平,從中我們可以學習兩個方面的知識:一是相對比較大規(guī)模的邏輯設計如何組織模塊結構,二是局部應用處理,可以照搬,作為我們開發(fā)時的模板。熟讀唐詩三百首,不會作詩也會吟,看多了,就會習慣的學會他們的開發(fā)模式,我有這樣的體會,看多了,很多東西思想上已經(jīng)把它當作是自己的理所當然的東西了,實際一做,手生的很,遇到很多問題,解決這些問題,這個過程就通過了,學習就需要這么個過程 Modelsim仿真環(huán)境的使用? 學習HDL需要有一個編譯、驗證環(huán)境,首推的就是Modelsim,Modelsim在各家FPGA廠商的開發(fā)工具中都提供內(nèi)置或外掛,這種共性的工具自然是越多越好。有很多數(shù)據(jù)介紹Modelsim的使用,網(wǎng)上有很多介紹資料,在此不在贅述。 選擇合適的開發(fā)板,熟悉一種器件? 一款合適的開發(fā)板是學習進步的捷徑。現(xiàn)在原廠和國內(nèi)很多公司都提供FPGA學習開發(fā)板,可以根據(jù)需要選購。在使用開發(fā)板前可以先看安裝使用說明,明確開發(fā)選用的芯片型號,以及外圍配置,然后根據(jù)芯片型號去相關廠商公司下載該芯片的數(shù)據(jù)手冊,詳細閱讀一遍很有好處,現(xiàn)在FPGA芯片更新?lián)Q代比較快,一般2~3年就換一代,所以要適應英文資料的閱讀,而且大量應用文檔也是以英文形式提供的。 FPGA廠商主要開發(fā)軟件工具的使用? 目前主要的FPGA廠商有Altera、xilinx、lattice都提供的了各自的FPGA開發(fā)環(huán)境,分別是:Altera的Quartus II,Xilinx的ISE,Lattice的ispLever。我們可以選擇先熟悉一家公司的環(huán)境(或者根據(jù)開發(fā)板的具體芯片選擇廠商環(huán)境),以后根據(jù)器件選擇需要,再去熟悉其他的環(huán)境,學習周期就可以短了。通用的步驟是:建立項目,設計輸入(代碼或原理圖),功能仿真,引腳鎖定和相關時鐘約束,綜合,功能仿真,影射、布局、布線,時序仿真等等。這個過程需要一段時間去熟悉。 如果你是單片機系統(tǒng)轉過來學習軟核系統(tǒng)的開發(fā),也需要掌握這些工具,同時掌握廠商提供的系統(tǒng)集成工具和軟件開發(fā)工具,Altera提供的集成環(huán)境是SOPC Builder,軟件開發(fā)環(huán)境是NIOS II IDE。Xilinx提供的集成環(huán)境是Xilinx Platform Studio,軟件開發(fā)環(huán)境是:Xilinx Platform Studio SDK。 分析和實現(xiàn)參考設計? 一般開發(fā)環(huán)境會自帶example目錄,這些都是典型的開發(fā)范例,強烈建議分析這些范例,并在自己的開發(fā)板環(huán)境中實現(xiàn),這個過程可能需要我們修改一些設置和環(huán)境,比較硬件的不同,但這是一個很好的鍛煉機會。另外開發(fā)板也會隨板提供開發(fā)范例,分析這些范例,并常試修改他們也是很好的機會。遇到問題是很正常的,我們的進步就是建立在遇到問題并解決問題基礎上的。 設計實現(xiàn)自己的應用系統(tǒng) 要明白一點,設計開發(fā)一個環(huán)境比使用一個環(huán)境要求要高很多,就象會使用計算機和會設計制造計算機一樣的差別。特別是自己去設計一個系統(tǒng)的時候,建議學習者設計一個自己的系統(tǒng),不論系統(tǒng)的大小。這樣會遇到方方面面的需要考慮的問題,能夠把上述學習的知識做一個考核,順利通過后就會在知識和能力上得到及大的提升,特別是在開發(fā)信心上得到強化。建議把遇到或想到的問題都羅列記錄在筆記本上,并嘗試逐個排查解決,這個過程中我們可能需要閱讀很多原廠提供的文檔,或者網(wǎng)上搜索到的資料,把每一個疑問逐一解決,做到?jīng)]有疑問,這樣我們設計的系統(tǒng)就會順利達到目標。 前不久我就實際體會了這個過程,我們以前都是使用Altera的FPGA器件,熟悉他們的工具也熟悉他們的器件,但客戶需要我們開發(fā)Virtext 5 PCIE系統(tǒng),我們從4月份開始著手,到8月份完成樣板,用了4個月,熟悉開發(fā)環(huán)境,并閱讀了所有Virtex5的文檔,很多測試代碼,實際上在設計過程中已經(jīng)寫了并在ISE環(huán)境下編譯,因為FPGA設計很重要的一點是規(guī)劃pin和邏輯功能塊在FPGA內(nèi)的分配,所以需要在原理圖設計過程中就做FPGA項目并在ISE軟件中編譯檢查和驗證,這樣在PCB設計時原理圖基本是可行的,同時在PCB設計中做好板級仿真,這樣能減少了樣板的反復修改,我們這樣努力的結果是:一次投板成功。良好的開始是成功的一半,特別要在第一塊板的設計制作過程中用盡心計,保證成功,確保我們開發(fā)工作的信心。 開卷有益,勤于實踐,持續(xù)提高設計能力? FPGA芯片技術和開發(fā)技術發(fā)展很快,學習任務重,另外羅馬不是一天建成的,需要我們在工作中不斷的積累。FPGA設計有點象圍棋:易學難精。需要我們不斷拓寬知識面,不厭其繁的去嘗試,仔細去看編譯綜合報告,時序分析報告,并去嘗試提升性能,從底層更深入的去理解硬件電路的設計,改進、嘗試性能的提高。 很多單位有非常好的高級FPGA培訓,這是個很好機會,可以和高手切磋技藝,咨詢開發(fā)中遇到的問題和解決辦法,這個很令人期待。但很多人可能象我所處的環(huán)境一樣沒有提供這樣機會,我建議是開卷有益,多看書,現(xiàn)在FPGA方面的新書出來的比較多,一些開發(fā)高手,或多或少的在他們的介紹中提供了提高的途徑,我都會仔細的閱讀。另外網(wǎng)上有很多各個專題的文檔也是很好的閱讀對象。 帶著問題學習是最有效率的,如果一些問題捆繞著我們,我們就會對這些問題的解決很關注,很多時候,不經(jīng)意之間,我們所需要的信息來了:別人的一句話,資料上的一句提示,或者其他人開發(fā)的代碼中等等,都會是我們提高的途徑。 就象大型數(shù)據(jù)庫性能調整一樣,時序性能的調整提高是FPGA開發(fā)能力的標志,各個FPGA廠商都會提供很多解決方法,學習者要注意去逐步的學習使用這些方法。 只要不斷的努力,一定可以持續(xù)提高我們的FPGA設計能力。 3. 目前的開發(fā)方法應用介紹 目前,在FPGA上有三種類型開發(fā)方法和應用方向:a、邏輯類應用 b、軟核類應用 c、DSP類應用。 邏輯類應用我們接觸的最早,也是FPGA最初的應用領域,大的應用上,一些數(shù)字IC設計可以在FPGA做前期的功能驗證,在通信領域,F(xiàn)PGA做信號的編解碼等等,小的應用上我們做的最多的實際是CPLD,完成信號的變換控制等等。 軟核應用是前幾年才興起,現(xiàn)在熱門的開發(fā)應用方法,在原本需要FPGA結合CPU的地方有成本和靈活性優(yōu)勢。 FPGA的DSP應用是非常有潛力的,性能優(yōu)勢非常明顯。開發(fā)方法是用Matlab的simulink中嵌入廠商的開發(fā)工具包,算法驗證在Matlab simulink工具下完成,在開發(fā)工具包的支持下生成HDL模塊或者直接生成FPGA下載配置文件,這個方向是FPGA應用最有挑戰(zhàn)能力領域。Mathworks公司不久前也推出了獨立于FPGA廠商的Simulink HDL Coder工具,使的Matlab在數(shù)字系統(tǒng)設計領域邁出了堅實的一步,把Simulink 模型和Stateflow框圖生成位真(Bit-Ture)、周期精確(Cycle-Accurate)、可綜合的Verilog和VHDL代碼,為Matlab simulink用戶提供了通往FPGA設計實現(xiàn)的直接通道。 |
|
來自: jianxz > 《學習(網(wǎng)絡)》