引言
??FPGA 的詳細開發流程就是利用 EDA 開發工具對 FPGA 芯片進行開發的過程,所以 FPGA 芯片開發流程講的并不是芯片的制造流程,區分于 IC 設計制造流程喲(芯片制造流程多麻煩,要好幾十億的費用呢,而且國內也貌似沒有哪家像樣的 Foundry 廠,除了臺灣的 TSMC 在世界有立足之地,Fabless 的 IC 設計公司倒是挺強的如 Hisilicon,這也是它為什么會被 USA 針對的原因)。
??例如,基于標準單元與基于 FPGA 的 APR 自動布局布線的區別在于:FPGA 內部的邏輯單元以及走線資源都是固定的,布局布線工具只是完成如何使用這些資源以使得整個設計收斂;而基于標準單元的 APR 的標準單元位置以及走線資源都是自己設計調整的,所以靈活性更大,更加容易使得整個設計收斂。
??如下所示,主要包括電路設計、設計輸入、綜合(優化)、布局布線(實現與優化)、編程配置五大步驟,其中,還有功能仿真、靜態仿真、時序仿真三大仿真,以及綜合約束、布局布線約束(包括位置約束和時序約束)兩大約束等等。
FPGA 的詳細開發流程
一、電路設計(FPGA Design)
??Before FPGA Design:在電路設計之前,首先要進行的是算法的設計與驗證、方案論證、架構設計和 FPGA 芯片選型等等準備工作;算法工程師可以在 Python 或 Matlab 設計中完成,而至于算法是怎么來的,通常是根據市場需求來開發的,這個就不在本次討論之中了。系統工程師根據任務要求,如系統的指標和復雜度、成本、功能性和穩定性、性能、對工作速度(延時和工作頻率)和芯片本身的各種資源、功耗等等方面進行權衡(紅色加粗部分也是數字電子系統的五大設計目標),選擇合理的設計方案(浮點定點、設計優化)和合適的 FPGA 器件類型(如 Cylone、Spartan、Artix、Virtex、Kintex、還是 Zynq 或者是 Zynq UltraScale + 等等)。
??FPGA Design:電路設計方法分為自底向上和自頂向下的設計方法;通常都采用自頂向下的設計方法:從系統設計開始,逐漸向子系統設計、模塊設計、器件設計、版圖設計等等更加物理的層次推進,直到可以直接使用 EDA 元件庫為止,能夠先勾勒出來電路了,才開始 Coding(記住,Coding Style 也很重要喲)。
電路設計流程
二、設計輸入(Design Entry)
??設計輸入指的是將設計者所涉及的電路以開發軟件要求的某種形式表達出來,并輸入到相應的軟件中的過程。最常見的設計輸入的表達方式為 IP 核、原理圖(Schematic)和 HDL 文本輸入。
??這里的 IP 按照來源的不同可以分為三類,第一種是來自前一個設計創建的模塊(Design by Yourself),第二種是 FPGA 廠家,第三種就是來自 IP 廠商。而按照產品交付的形式,IP 核又分為軟核(HDL 或 Netlist 形式的功能塊,如 MicroBlaze 軟核)、硬核(版圖形式,提供設計的最終階段產品,即掩膜,如 Zedboard 的 ARM Cortex-A9)、固核(Netlist 形式,完成了綜合與布局布線的功能塊,只能基于特定芯片的 IP 核)。
??FPGA 廠家和 IP 廠商可以在 FPGA 開發的不同時期提供給我們不同的 IP,我們暫且知道他們分別是未加密的 RTL 級 IP、加密的 RTL 級 IP、未經布局布線的網表級 IP、布局布線后的網表級 IP。
三、綜合(Synthesis)
??無論是什么樣的設計輸入,最終都要通過綜合,生成統一的網表形式,從而與 FPGA 硬件資源互相匹配。例如,FPGA 是基于 LUT 結構的,那么就綜合出一個基于 LUT 的門級網表文件(不同于 IC 的綜合)。
??IC 綜合指的是將高級抽象層次的設計描述自動轉化為較低層次描述的過程,或者說,綜合器就是能夠將 Schematic 或者 HDL 文本語言描述的電路,編譯成由與或陣列、RAM、觸發器、寄存器等邏輯單元組成的電路結構的門級網表文件的工具,即 RTL - to - Netlist。
??綜合包括編譯、映射和優化,編譯就是 HDL → 門級網表,映射就是門級網表 → LUT,優化就是優化設計。
??在 Altera 的開發流程中,編譯和映射的過程叫做綜合,而在 Xilinx 的開發流程中,由設計輸入得到門級網表的過程叫做綜合。
??綜合的形式如下所示:
- 將算法、行為描述轉換到 RTL 級(Register Transfer Level)(寄存器傳輸級),即從行為描述到結構描述。
- 將 RTL 級描述轉換到邏輯門級(包括觸發器),稱為邏輯綜合。
- 將邏輯門表示轉換到版圖表示,或者 PLD 器件的配置網表表示;根據版圖信息能夠進行 ASIC 生產,有了配置網表可完成基于 PLD 器件的系統實現。
??數字系統設計器件如下所示:
- 數字系統器件的實現從以前的 PLA(可編程邏輯陣列)、PAL(可編程陣列邏輯)、GAL(通用陣列邏輯)發展到如今的 PLD(可編程邏輯器件 Programmable Logic Device)(包括現場可編程門陣列 FPGA(Field Programmable Gate Array)和復雜可編程邏輯器件 CPLD(Complex Programmable Logic Device))(半定制)、ASIC(專用集成電路 Application Specific Integrated Circuits)(全定制)。
- 軟件程序編譯器是將 C 或匯編語言等編寫的程序編譯為 0 1 代碼流,而硬件綜合器是將 Verilog HDL 等語言編寫的程序轉化為具體的電路門級網表。
- 在電路設計中,網表(Netlist)是用于描述電路元件相互之間連接關系的,一般來說是一個遵循某種比較簡單的標記語法的文本文件(百度百科 門級網表);綜合就是邏輯綜合器根據約束條件把 Verilog HDL 或 VHDL 描述的 RTL 級設計,轉換為可與 FPGA/CPLD 的門陣列基本結構相映射的網表文件。
四、布局布線(Place & Route)
??談及布局布線之前,首先要談到實現(Implementation)。實現就是將綜合生成的門級網表配置到具體的 FPGA 芯片上,而布局布線就是其中最重要的過程。Vivado 中的實現具體如下所示,分為設計初始化(Design Initialization)、優化設計(Opt Design)、功耗優化設計(Power Opt Design)、布局設計(Place Design)、后布局功耗優化設計(Post-Place Power Opt Design)、后布局物理優化設計(Post-Place Phys Opt Design)、布線設計(Route Design)、后布線物理優化設計(Post-Route Phys Opt Design)、生成比特流(Write Bitstream)。
布局布線流程
??布局布線指的是將綜合生成的電路門級網表映射到具體的目標器件中實現,并產生最終的可下載文件的過程。
- 布局是將已分割的邏輯小塊放到器件內部邏輯資源的具體位置,并使它們易于連線;
- 布線則是利用器件的布線資源完成各功能模塊之間和反饋信號之間的連接。
??布局布線完成之后將產生如下一些重要的文件:
- 芯片資源耗用情況報告;
- 面向其他 EDA 工具的輸出文件,如 EDIF 文件等;
- 產生延時網表結構,以便于進行精確的時序仿真,這時候的仿真結果能夠比較精確地預測未來芯片的實際性能。如果仿真結果達不到設計要求,就需要修改源代碼或者選擇不同速度的器件,直至滿足設計要求,例如普通加法器改為超前進位加法器,普通乘法器改為 Booth 乘法器等等,通過減少關鍵路徑來滿足時序要求;
- 器件編程文件:如用于 FPGA 配置的 SOF,JAM,BIT 等格式的文件,用于 CPLD 編程的 JEDEC,POF 等格式的文件。由于布局布線與芯片的物理結構直接相關,所以一般選擇芯片制造商提供的開發工具進行此項工作。
五、約束(Constraint)
??約束分為綜合約束(一級約束)和布局布線約束(二級約束),綜合約束如資源共享約束(不同的約束將會導致生成不同性能的電路),布局布線約束又可以分為位置約束、時序約束。
??約束,就是對這些操作環節定制規則,定制條件,比如引腳約束和時序約束;一般開發環境會對這些約束有個默認,這些默認的設置對大部分情況下還是適用的,但是通常布局布線約束中的 I/O 約束是我們每一個工程都必須給定的。
六、仿真(Simulation)
??仿真指的是對所設計電路功能的驗證。仿真包括(功能)RTL 仿真、(門級)靜態仿真和時序仿真。
- RTL 仿真:就是對你的 HDL 代碼仿真,對你的 RTL 級描述的設計進行測試;RTL 仿真,又叫功能仿真,也稱為前仿真,是在編譯之前對用戶所設計的電路進行邏輯功能驗證,此時的仿真沒有任何延遲信息,是處于理想化狀態的,例如對于一個寄存器(Register),它的輸出端(Q Port)相對它的時鐘輸入端(Clk Port)的延時為零延時(Delta Delay),是僅對初步的功能進行驗證的。
- 靜態仿真:指對綜合之后的 LUT 門級網表進行仿真;靜態仿真,又叫門級仿真,也稱為綜合后仿真,在仿真時,把綜合生成的標準延時文件 SDF 反標注到綜合仿真模型中去,可估計門延時帶來的影響,但不能估計線延時,此時的仿真也并不是十分準確,和布局布線后的實際情況還是有一定差距的。
- 時序仿真:在選擇具體器件并完成布局布線后進行的包含延時的仿真;時序仿真,又叫布局布線后仿真,是指將布局布線的延時信息反標注到設計網表中來檢測有無時序違規的現象(即是否滿足時序約束條件或器件固有的時序規則,如建立時間、保持時間等等;而此時,不同器件的內部延時都不太一樣,不同的布局、布線方案所生成的延時也不太一樣);時序仿真包含的延遲信息最全,也最精確,能較好地反映芯片的實際工作情況。
??從驗證完整性而言,前端仿真和后端仿真均需要在項目中實施,而它們側重的目標也有不同。前端仿真是為了檢測出功能邏輯的缺陷,而后端仿真是為了檢測出實際門級電路中由于延時問題可能導致采樣失敗進而產生的功能缺陷。
七、編程配置(Program & Configuration)
??編程配置就是生成比特流并載入 FPGA 芯片中的一個過程。
- 把布局布線后生成的編程文件裝入 PLD 器件中的過程稱為下載。
- 通常將對基于 EEPROM 工藝的非易失結構 CPLD 器件的下載稱為編程;一般芯片編程是指產生使用的數據文件(如比特流文件(.bit)),然后將編程數據下載到 FPGA 芯片中。
- 而將基于 SRAM 工藝結構的 FPGA 器件的下載稱為配置。
-
FPGA
+關注
關注
1630文章
21796瀏覽量
605998 -
電路設計
+關注
關注
6677文章
2464瀏覽量
205335 -
IC設計
+關注
關注
38文章
1302瀏覽量
104285 -
開發流程
+關注
關注
0文章
11瀏覽量
7907 -
時序仿真
+關注
關注
0文章
14瀏覽量
7457
發布評論請先 登錄
相關推薦
使用QUARTUS II做FPGA開發全流程,傻瓜式詳細教程
例說FPGA連載8:FPGA開發流程
FPGA開發流程詳細解析
FPGA的設計流程是怎么樣的?FPGA設計流程指南詳細資料免費下載
![<b class='flag-5'>FPGA</b>的設計<b class='flag-5'>流程</b>是怎么樣的?<b class='flag-5'>FPGA</b>設計<b class='flag-5'>流程</b>指南<b class='flag-5'>詳細</b>資料免費下載](https://file.elecfans.com/web1/M00/68/AD/pIYBAFvHCEaAd07jAABdf3HQJ_4848.png)
FPGA視頻教程之NIOS II開發流程的詳細資料說明
![<b class='flag-5'>FPGA</b>視頻教程之NIOS II<b class='flag-5'>開發</b><b class='flag-5'>流程</b>的<b class='flag-5'>詳細</b>資料說明](https://file.elecfans.com/web1/M00/8B/47/o4YBAFyUfVaAJ87CAAMVNODuSTM465.png)
評論