Xilinx Artix-7 FPGA快速入門、技巧與實例連載2——FPGA基礎概念 更多資料共享 鏈接:https://share.weiyun.com/53UnQas ![]() 簡單來說,FPGA就是“可反復編程的邏輯器件”。如圖1.1所示,這是一顆Xilinx公司面向中端市場的Artix-7 FPGA器件,從外觀上看,貌似和一般的CPU芯片沒有太大差別。 ![]() 圖1.1 Xilinx公司的Artix-7 FPGA器件 FPGA取自Field Programmable Gate Array這四個英文單詞的首個字母,譯為“現場(Field)可編程(Programmable)邏輯陣列(Gate Array)”。該芯片的“可編程性”是針對“數字電路”而言,與CPU中軟件的可編程是完全不同的。采用該芯片,工程師可以根據需要進行靈活編程,添加各種新功能,以滿足不斷發展的協議標準或規范,工程師們甚至可以在設計的最后階段對它進行修改和升級。低成本、高靈活性的FPGA是各種應用中定制芯片的絕佳替代品。 而至于FPGA到底是什么,能夠干什么,又有什么過人之處?下面我們就把它和它的“師兄師弟”們擺在一起,一一呈現這些問題的答案。 拋開FPGA不提,大家一定都很熟悉ASIC。所謂ASIC,即專用集成電路(Application Specific IntegratedCircuit)的簡稱。電子產品中,它們無所不在,還真是比FPGA普及得多得多。但是ASIC的功能相對固定,它是為了專一功能或專一應用領域而生,希望對它進行任何的功能和性能的改善往往是無濟于事的。打個淺顯的比喻,如圖1.2所示,如果說ASIC是布滿鉛字的印刷品,那么FPGA就是可以自由發揮的白紙一張。 ![]() 圖1.2 ASIC和FPGA就如同印刷品和白紙 使用了FPGA器件的電子產品,在產品發布后仍然可以對產品設計作出修改,大大方便了產品的更新以及針對新的協議標準作出的相應改進,從而可以加速產品的上市時間,并降低產品的失敗風險和維護成本。相對于無法對售后產品設計進行修改的ASIC來說,這是FPGA特有的一個優勢。由于FPGA可編程的靈活性以及近年來電子技術領域的快速發展,FPGA也正在向高集成、高性能、低功耗、低價格的方向發展,并且逐漸具備了與ASIC相當的性能,使其被廣泛地應用在各行各業的電子及通信設備中。 FPGA與ASIC最大的區別就是功能的可編程性不同,我們再舉一個實際的例子說明FPGA與常見ASIC的這個最大區別。門電路芯片NC7SZ08是單路的邏輯與門,如圖1.3所示,該芯片除了需要電源(VCC和GND)外,輸入A和B經過芯片內部的“邏輯與”后,輸出結果Y。 ![]() 圖1.3單通道邏輯與門芯片 若是我們在電路板中設計了一顆NC7SZ08芯片,那么毫無疑問,我們只有可憐的3個IO引腳可用,并且它的功能非常單一,就是2個輸入芯片“邏輯與”后輸出結果,僅此而已。但是,如圖1.4所示,無任何功能的FPGA其實什么也不是,一片空白,但是這一片空白中卻潛藏著萬千種可能,這萬千種可能就把握在你我手中,FPGA的可編程性可以讓它實現我們希望實現的任意數字電路功能,譬如這個實例中,我們就在FPGA中編程實現了與門邏輯,那么它就等同于我們的NC7SZ08芯片。當然了,這只是非常簡單的一個FPGA可編程應用實例,工程實踐中也沒有人會因為僅僅為了一個與門電路動用FPGA。換句話說,真正需要動用FPGA的應用,往往是一般的ASIC所實現不了的功能(實際情況也許并不是實現不了,而是這樣的應用太小眾,沒有市場和利益可圖,也就沒有芯片廠商愿意花代價設計這樣的芯片),那么此時用FPGA編程實現這樣的定制化數字電路就能解燃眉之急了。 ![]() 圖1.4 FPGA中編程實現與門功能 當然,FPGA與ASIC的開發過程有一些共通之處(當然并不完全一樣,區別也是有的),例如它們都可以使用硬件編程語言Verilog或VHDL,它們在時序設計、仿真驗證方面的基本原理、方法或優化技巧基本是相通的。ASIC開發通常分為前端和后端,前端是后端的輸入,前端最終的產出是一個能夠描述所實現功能的邏輯門電路及其連接的網表,FPGA在綜合后也是得到一個類似的網表;ASIC設計后端的任務是把前端得到的網表通過布局布線(需要人工參與)映射到具體的物理結構上,而FPGA上與此類似的映射過程通常完全由開發工具包辦了,它并不需要設計者太多的參與。當然了,從這樣簡單的開發對比也可以多少體會到ASIC和FPGA在成本、功耗或性能上為何存在差異。 與ASIC相比,FPGA、ARM和DSP都具備與生俱來的可編程特性。或許身處開發第一線的底層工程師要說No了,很多ASIC不是也開放了一些可配置選項,實現“可編程”特性嗎?是的,但相比于FPGA、ARM、DSP可以通過編程實現嵌入式系統的大多數功能,ASIC的那點“可編程”性的確擺不上臺面。當然,換個角度來看,FPGA、ARM和DSP都或多或少集成了一些ASIC功能,正是這些ASIC功能,加上“可編程”特性,使得它們相互區別開了,并且各自獨霸一方。 ARM(Advanced RISCMachines)是微處理器行業的一家知名企業,設計了大量高性能、廉價、耗能低的RISC處理器、相關技術及軟件。由ARM公司設計的處理器風靡全球,大有嵌入式系統無處不ARM的趨勢。我們通常所說的ARM,更多的是指ARM公司的處理器,即ARM處理器。ARM通常包含一顆強大的處理器內核,并且為這顆處理器量身配套了很多成熟的軟件工具以及高級編程語言,這也是它倍受青睞的原因之一。當然了,ARM不只是一顆處理器而已,因為在ARM內核處理器周邊,各種各樣精于控制的外設比比皆是,什么GPIO、PWM、AD/DA、UART、SPI、IIC……一列一籮筐。ARM的長處在控制和管理,在很多工業自動化中大有用武之地。 ![]() 圖1.5 ARM處理器 DSP(digital singnalprocessor),即數字信號處理器,是一種獨特的微處理器,有自己的完整指令系統,能夠進行高速、高吞吐量的數字信號運算處理。它不像ARM那么“胡里花俏”,它更“專”。它只專注一件事,就是對各種語音、數據和視頻做運算處理;或者也可以這么說,DSP是為各種數學運算量身打造的。 ![]() 圖1.6 DSP處理器 相比之下,套用近些年Xilinx提出的一句很經典的廣告詞“All Programmable”來形容FPGA再合適不過了。ARM雖然有很多外設,DSP雖然具備強大的信號運算能力,但是FPGA眼里,這些都不過是“小菜一碟”。或許說得有些過了,但是,毫不夸張的講,ARM能做的,DSP能做的,FPGA一定也都能做;而FPGA可以做的,ARM不一定行,DSP也不一定行。這就是很多原型產品設計過程中,時不時的有人會提出基于FPGA的方案了。在一些靈活性要求高、定制化程度高、性能要求也特別高的場合,FPGA再合適不過了,甚至有時會是設計者別無選擇的選擇;當然了,客觀的來看,FPGA固然強大,它高高在上的成本、功耗和開發復雜性還是會讓很多潛在的目標客戶望而卻步,而在這些方面,ARM和DSP正好彌補了FPGA所帶來的缺憾。 ![]() 圖1.7 FPGA器件 之所以會有ARM、DSP和FPGA的存在,和實際應用情景是非常相關的。對于ARM,它的主要應用情景常常是有一些低速數據的采集、簡單的處理和傳輸,也還需要一些人機交互手段的存在。前面提到,ARM處理器周邊通常外設豐富,且它本身就精于控制,所以就很適合此類應用。對于DSP,有無人機交互就無所謂了,它的應用情景最主要的特點一定是高速數據的實時采集、較復雜的運算處理和傳輸。那么對此作過專門優化的DSP就能輕松勝任。而FPGA,可以這么說,它是可以補前面二者的“缺”和“漏”,FPGA可以在ARM和DSP之外滿足各種定制化的需求。筆者在參觀過一家專門為航空、醫療和工控行業做小批量電路板代工的企業后,印象最深的就是在琳瑯滿目的電路板中,往往都能找到一顆FPGA器件,而這在大批量生產、成本敏感的消費電子領域中,是不可想象的。換句話說,ARM和DSP在大批量、低成本的應用中較為常見;而FPGA則更多的在小批量、定制化、成本不敏感的行業中應用。 總而言之,在嵌入式系統設計領域,FPGA、ARM和DSP互有優劣,各有所長。很多時候它們所實現的功能無法簡單的相互替代,否則我們就不會見到如TI的達芬奇系列ARM中有DSP、Xilinx的Zynq或Altera的Soc FPGA中有ARM的共生現象了。FPGA、ARM和DSP,它們將在未來很長的一段時間內呈現三足鼎立的局面。 說到FPGA,我們一定關心它的開發方式。FPGA開發本質上就是一些邏輯電路的實現而已,因此早期的FPGA開發通過繪制原理圖(和現在的硬件工程師繪制原理圖的方式大體相仿)完成。而隨著FPGA規模和復雜性的不斷攀升,這種落后的設計方式幾乎已經被大家遺忘了,取而代之的是能夠實現更好的編輯性和可移植性的代碼輸入方式。 說到FPGA的設計代碼,經過近三十年的發展,只有Verilog和VHDL二者最終脫穎而出,成為了公認的行業標準。這兩種語言都是通過一系列分層次的模塊來表示復雜的數字系統,逐個模塊的仿真驗證后,再集成各個模塊交由綜合工具生成門級的網表,最后由布局布線工具將其映射到最終的FPGA器件上。 大家在學習這兩種語言時,一定發現VHDL完全是一門“異類”語言,在我們已有的各種編程語言中,應該是找不出語法、格式都類似的“兄弟”,所以學習起來也一定非常痛苦。但是反觀Verilog語言,大家一定會產生莫名的好感,為啥?你可能一激動就喊出來了“這基本就一C語言變種吧”,沒錯,Verilog語言就是在C語言的基礎上,增加一些特殊的約定而產生的。 Verilog是在1983年由Gateway Automation公司的Philip Moorby發明,此人也是目前EDA行業鼎鼎有名的Cadence公司的第一合伙人。時隔10年,1993年,幾乎所有的ASIC廠商都開始支持Verilog,當然FPGA廠商也不例外,此時,IEEE(電氣和電子工程師協會)正式將當時的Verilog2.0作為標準的提案。1995年,IEEE制定了Verilog的標準IEEE1364-1995,即稱之為Verilog-95的標準。2001年,在進行了一番修正和擴展之后,發布了IEEE 1364-2001標準,即Verilog-2001。2005年,Verilog再次做出了細微的修正,發布了IEEE1364-2005標準,即Verilog-2005。 ![]() 圖1.8 Verilog代碼 VHDL是Very High Speed Integrated Circuit Hardware Description Language的縮寫,也是誕生于上世紀80年代初期,但它與Verilog的民間背景不同,VHDL則是美國軍方研發,且早在1987年就被IEEE和美國國防部確認為標準硬件描述語言,并公布了VHDL的標準版本IEEE-1076-1987(簡稱87版)。1993年,IEEE對VHDL進行了修訂,從更高的抽象層次和系統描述能力上擴展VHDL的內容,公布了新版本的VHDL,即IEEE標準的1076-1993版本(簡稱93版)。 ![]() 圖1.9 VHDL代碼 大多數工科生在大一或大二基本都已經接觸過C語言了,多少已經有了一些先入為主的觀念,所以學習起Verilog語言來會更容易一些。換句話說,Verilog相對VHDL有著快速上手、易于使用的特點,所以博得了更多工程師的青睞。而VHDL雖然有著天生的不惹人愛的特點,但是話說“存在即是合理”,VHDL最大的特點是語法“嚴謹”,只要你上手了,基本它能“嚴謹”到你不容易在語言本身上隨便犯錯,這就是VHDL的厲害之處。所以,還是有不少公司或組織會毅然決然的選擇VHDL。 無論如何,語言只是FPGA開發的一個手段或方式,它本身并不存在好壞優劣之分,就看設計者怎么使用。而對于一個合格的FPGA工程師而言,無論是Verilog還是VHDL,一定要精通其中的一門語言,能夠“信手捻來”的服務于開發設計工作;但也絕不能對另一門語言一竅不通,畢竟在實際工作中,很多情況下也會涉及到另一門語言的使用。因此,兩門語言都不能落下,精通一門是必須的,也能夠熟練的使用另一門語言那是最好不過。 相比于互聯網的那些“暴發戶”,半導體行業則更講究歷史底蘊,“今天丑小鴨,明天白天鵝”的故事要少得多,因此兩家歷史最為久遠的FPGA供應商Altera和Xilinx憑著一直以來的專注,確保了它們在這個行業的統治地位。當然了,很大程度上也是由于FPGA技術相對于一般的半導體產品有著更高的門檻,從器件本身到一系列配套的工具鏈,再到終端客戶的技術支持——這一籮筐的麻煩事,讓那些行業大佬們想想就頭疼,更別提插足搗騰一下了。 目前FPGA器件的主流廠商Altera公司(已被Intel公司收購)和Xilinx公司,它們的可編程邏輯器件在全球市場上占到了將近90%。從明面上的“競爭對手”到今天暗地里還客氣的互稱“友商”,不難看出兩家公司走過歷史長河,雖然有“明爭暗斗”,但確也不經意間的彼此促進,互相激勵。的確,翻看FPGA的發展史,往往充斥著這兩家公司不斷上演的“你方唱罷我登場”的情節,并且偶爾也會有第三者如Microsemi或Lattice小弟的“插足”戲份。不過這好在新千年過后,各方重新定位,Altera和Xilinx便牢牢把持住象征統治地位的中高端市場;Microsemi 高度聚焦于 FPGA 的安全應用領域,比如國防和航空;而Lattice也只能在低端市場找找“山中無老虎,猴子稱大王”的感覺了。 ![]() 圖1.10 四大FPGA廠商 不論是Altera、Xilinx、Microsemi還是Lattice,甚至一些后來者,如筆者接觸過的國內FPGA廠商京微雅格(目前處于苦苦掙扎之中),它們的FPGA器件內部結構雖然略有差異,但在開發流程、開發工具乃至原廠提供的各種支持上,都是“換湯不換藥”的。所以,這對對用戶而言,絕對是一個福音,只要好好的掌握一套方法論,任何廠商的器件都可以通吃。 更多資料共享 鏈接:https://share.weiyun.com/53UnQas |