2020年1月23日 星期四

FPGA的開發基本流程與注意事項

FPGA的開發基本流程與注意事項
源自於  https://kknews.cc/news/xlzk5r9.html

FPGA的開發相對於傳統PC、單片機的開發有很大不同。FPGA以並行運算為主,以硬體描述語言來實現;相比於PC或單片機(無論是馮諾依曼結構還是哈佛結構)的順序操作有很大區別,也造成了FPGA開發入門較難。FPGA開發需要從頂層設計、模塊分層、邏輯實現、軟硬體調試等多方面著手。
一、開發基本流程
FPGA的設計流程就是利用EDA開發軟體和編程工具對FPGA晶片進行開發的過程。典型FPGA的開發流程一般如圖所示,包括功能定義/器件選型、設計輸入、功能仿真、綜合優化、綜合後仿真、實現、布線後仿真、板級仿真以及晶片編程與調試等主要步驟。


圖 FPGA典型設計流程
1.功能定義/器件選型
在FPGA設計項目開始之前,必須有系統功能的定義和模塊的劃分,另外就是要根據任務要求,如系統的功能和複雜度,對工作速度和器件本身的資源、成本、以及連線的可布性等方面進行權衡,選擇合適的設計方案和合適的器件類型。一般都採用自頂向下的設計方法,把系統分成若干個基本單元,然後再把每個基本單元劃分為下一層次的基本單元,一直這樣做下去,直到可以直接使用EDA元件庫為止。
2.設計輸入
設計輸入是將所設計的系統或電路以開發軟體要求的某種形式表示出來,並輸入給EDA工具的過程。常用的方法有硬體描述語言(HDL)和原理圖輸入方法等。原理圖輸入方式是一種最直接的描述方式,在可編程晶片發展的早期應用比較廣泛,它將所需的器件從元件庫中調出來,畫出原理圖。這種方法雖然直觀並易於仿真,但效率很低,且不易維護,不利於模塊構造和重用。更主要的缺點是可移植性差,當晶片升級後,所有的原理圖都需要作一定的改動。目前,在實際開發中應用最廣的就是HDL語言輸入法,利用文本描述設計,可以分為普通HDL和行為HDL。普通HDL有ABEL、CUR等,支持邏輯方程、真值表和狀態機等表達方式,主要用於簡單的小型設計。而在中大型工程中,主要使用行為HDL,其主流語言是Verilog HDL和VHDL。這兩種語言都是美國電氣與電子工程師協會(IEEE)的標準,其共同的突出特點有:語言與晶片工藝無關,利於自頂向下設計,便於模塊的劃分與移植,可移植性好,具有很強的邏輯描述和仿真功能,而且輸入效率很高。除了這IEEE標準語言外,還有廠商自己的語言。也可以用HDL為主,原理圖為輔的混合設計方式,以發揮兩者的各自特色。
3.功能仿真
功能仿真也稱為前仿真是在編譯之前對用戶所設計的電路進行邏輯功能驗證,此時的仿真沒有延遲信息,僅對初步的功能進行檢測。仿真前,要先利用波形編輯器和HDL等建立波形文件和測試向量(即將所關心的輸入信號組合成序列),仿真結果將會生成報告文件和輸出信號波形,從中便可以觀察各個節點信號的變化。如果發現錯誤,則返回設計修改邏輯設計。常用的工具有Model Tech公司的ModelSim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等軟體。
4.綜合優化
所謂綜合就是將較高級抽象層次的描述轉化成較低層次的描述。綜合優化根據目標與要求優化所生成的邏輯連接,使層次設計平面化,供FPGA布局布線軟體進行實現。就目前的層次來看,綜合優化(Synthesis)是指將設計輸入編譯成由與門、或門、非門、RAM、觸發器等基本邏輯單元組成的邏輯連接網表,而並非真實的門級電路。真實具體的門級電路需要利用FPGA製造商的布局布線功能,根據綜合後生成的標準門級結構網表來產生。為了能轉換成標準的門級結構網表,HDL程序的編寫必須符合特定綜合器所要求的風格。由於門級結構、RTL級的HDL程序的綜合是很成熟的技術,所有的綜合器都可以支持到這一級別的綜合。常用的綜合工具有Synplicity公司的Synplify/Synplify Pro軟體以及各個FPGA廠家自己推出的綜合開發工具。
5.綜合後仿真
綜合後仿真檢查綜合結果是否和原設計一致。在仿真時,把綜合生成的標準延時文件反標註到綜合仿真模型中去,可估計門延時帶來的影響。但這一步驟不能估計線延時,因此和布線後的實際情況還有一定的差距,並不十分準確。目前的綜合工具較為成熟,對於一般的設計可以省略這一步,但如果在布局布線後發現電路結構和設計意圖不符,則需要回溯到綜合後仿真來確認問題之所在。在功能仿真中介紹的軟體工具一般都支持綜合後仿真。
6.實現與布局布線
布局布線可理解為利用實現工具把邏輯映射到目標器件結構的資源中,決定邏輯的最佳布局,選擇邏輯與輸入輸出功能連結的布線通道進行連線,並產生相應文件(如配置文件與相關報告),實現是將綜合生成的邏輯網表配置到具體的FPGA晶片上,布局布線是其中最重要的過程。布局將邏輯網表中的硬體原語和底層單元合理地配置到晶片內部的固有硬體結構上,並且往往需要在速度最優和面積最優之間作出選擇。布線根據布局的拓撲結構,利用晶片內部的各種連線資源,合理正確地連接各個元件。目前,FPGA的結構非常複雜,特別是在有時序約束條件時,需要利用時序驅動的引擎進行布局布線。布線結束後,軟體工具會自動生成報告,提供有關設計中各部分資源的使用情況。由於只有FPGA晶片生產商對晶片結構最為了解,所以布局布線必須選擇晶片開發商提供的工具。
7.時序仿真
時序仿真,也稱為後仿真,是指將布局布線的延時信息反標註到設計網表中來檢測有無時序違規(即不滿足時序約束條件或器件固有的時序規則,如建立時間、保持時間等)現象。時序仿真包含的延遲信息最全,也最精確,能較好地反映晶片的實際工作情況。由於不同晶片的內部延時不一樣,不同的布局布線方案也給延時帶來不同的影響。因此在布局布線後,通過對系統和各個模塊進行時序仿真,分析其時序關係,估計系統性能,以及檢查和消除競爭冒險是非常有必要的。在功能仿真中介紹的軟體工具一般都支持綜合後仿真。
8.板級仿真與驗證
板級仿真主要應用於高速電路設計中,對高速系統的信號完整性、電磁干擾等特徵進行分析,一般都以第三方工具進行仿真和驗證。
9.晶片編程與調試
設計的最後一步就是晶片編程與調試。晶片編程是指產生使用的數據文件(位數據流文件,Bitstream Generation),然後將編程數據下載到FPGA晶片中。其中,晶片編程需要滿足一定的條件,如編程電壓、編程時序和編程算法等方面。邏輯分析儀(Logic Analyzer,LA)是FPGA設計的主要調試工具,但需要引出大量的測試管腳,且LA價格昂貴。目前,主流的FPGA晶片生產商都提供了內嵌的在線邏輯分析儀(如Xilinx ISE中的ChipScope、Altera QuartusII中的SignalTapII以及SignalProb)來解決上述矛盾,它們只需要占用晶片少量的邏輯資源,具有很高的實用價值。


二、注意事項
1.基礎問題
FPGA的基礎就是數字電路和VHDL語言,想學好FPGA的人,建議床頭都有一本數字電路的書,不管是哪個版本的,這個是基礎,多了解也有助於形成硬體設計的思想。在語言方面,建議初學者學習Verilog語言,VHDL語言語法規範嚴格,調試起來很慢,Verilog語言容易上手,而且,一般大型企業都是用Verilog語言,VHDL語言規範,易讀性強,所以一般軍工都用VHDL。
2.工具問題
熟悉幾個常用的就可以的,開發環境Quartus II,或ISE就可以了,這兩個基本是相通的,會了哪一個,另外的那個也就很Easy了。功能仿真建議使用Modelsim,如果你是做晶片的,就可以學學別的仿真工具,做FPGA的Modelsim就足夠了。綜合工具一般用Synplify,初學先不用太關心這個,用Quartus綜合就OK了。
3.思想問題
對於初學者,特別是從軟體轉過來的,設計的程序既費資源又速度慢,而且很有可能綜合不了,這就要求我們熟悉一些固定模塊的寫法,可綜合的模塊很多書上都有,語言介紹上都有,不要想當然的用軟體的思想去寫硬體。在學習FPGA開發過程,首先要對電路設計熟悉,明白電路的工作過程:電路是並行執行。
4.習慣問題
FPGA學習要多練習,多仿真,signaltapII是很好的工具,可以看到每個信號的真實值,建議初學者一定要自己多動手,光看書是沒用的。關於英文文檔問題,如果要學會Quartus II的所有功能,只要看它的handbook就可以了,很詳細,對於IT行業的人,大部分知識來源都是英文文檔,一定要耐心看,會從中收穫很多的。
5.算法問題
做FPGA的工程師,最後一般都是專攻算法了,這些基礎知識都是順手捏來的,如果你沒有做好搞理論的準備,學FPGA始終只能停留在初級階段上。對於初學者,數位訊號處理是基礎,應該好好理解,往更深的方向,不用什麼都學,根據你以後從事的方向,比如說通信、圖像處理,雷達、聲納、導航定位等。


最後,不管你是一名邏輯設計師、硬體工程師或系統工程師,甚或擁有所有這些頭銜,只要你在任何一種高速和多協議的複雜系統中使用了FPGA,你就很可能需要努力解決好器件配置、電源管理、IP集成、信號完整性和其他的一些關鍵設計問題。不過,你不必獨自面對這些挑戰,因為在當前業內領先的FPGA公司里工作的應用工程師每天都會面對這些問題,而且他們已經提出了一些將令你的設計工作變得更輕鬆的設計指導原則和解決方案。

沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...