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