<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文解讀FPGA設計者的5項基本功及設計流程

姚小熊27 ? 來源:網絡整理 ? 2018-05-31 09:35 ? 次閱讀

FPGA發展由來

數字集成電路的發展歷史,經歷了從電子管、晶體管、小規模集成電路到大規模以及超大規模集成電路等不同的階段。發展到現在,主要有3類電子器件:存儲器、處理器和邏輯器件。

存儲器保存隨機信息(電子數據表或數據庫的內容);處理器執行軟件指令,以便完成各種任務(運行數據處理程序或視頻游戲);而邏輯器件可以提供特殊功能(器件之間的通信和系統必須執行的其他所有功能)。

邏輯器件分成兩類:

1.固定的或定制的。

2.可編程的或可變的。

其中,固定的或定制的邏輯器件通常稱為專用芯片ASIC)。ASIC是為了滿足特定的用途而設計的芯片,例如MP3解碼芯片等。其優點是通過固化的邏輯功能和大規模的工業化生產,降低了芯片的成本,同時提高了產品的可靠性。隨著集成度的提高,ASIC的物理尺寸也在不斷的縮小。

FPGA的硬件設計技巧

FPGA的硬件設計不同于DSPARM系統,比較靈活和自由,只要設計好專用管腳的電路,通用I/O的連接可以自己定義,下面給大家介紹一些FPGA電路設計中會用到的特殊技巧做參考。

1、管腳兼容性設計

前面的內容提到過,FPGA在芯片選項的時候要盡量選擇兼容性好的封裝。那么,在硬件電路設計時,就要考慮如何兼容多種芯片的問題。

例如,紅色颶風II代-Altera的開發板就是兼容了EP1C6Q240和EP1C12Q240兩個型號的FPGA。這兩個芯片有12個I/O管腳定義是不同的。在EP1C6Q240芯片上,這12個I/O是通用I/O管腳,而在EP1C12Q240芯片上,它們是電源和地信號。

為了能保證兩個芯片在相同的電路板上都能工作,我們就必須按照EP1C12Q240的要求來把對應管腳連接到電源和地平面。因為,通用的I/O可以連接到電源或者地信號,但是電源或者地信號卻不能作為通用I/O。

在相同封裝、兼容多個型號FPGA的設計中,一般的原則就是按照通用I/O數量少的芯片來設計電路。

2、根據電路布局來分配管腳功能

FPGA的通用I/O功能定義可以根據需要來指定。在電路圖設計的流程中,如果能夠根據PCB的布局來對應的調整原理圖中FPGA的管腳定義,就可以讓后期的布線工作更順利。

例如,如圖2.1所示,SDRAM芯片在FPGA的左側。在FPGA的管腳分配的時候,應該把與SDRAM相關的信號安排在FPGA的左側管腳上。這樣,可以保證SDRAM信號的布線距離最短,實現最佳的信號完整性。

3、預留測試點

目前FPGA提供的I/O數量越來越多,除了能夠滿足設計需要的I/O外,還有一些剩余I/O沒有定義。這些I/O可以作為預留的測試點來使用。

例如,在測試與FPGA相連的SDRAM工作時序狀態的時候,直接用示波器測量SDRAM相關管腳會很困難。而且SDRAM工作頻率較高,直接測量會引入額外的阻抗,影響SDRAM的正常工作。

如果FPGA有預留的測試點,那么可以將要測試的信號從FPGA內部指定到這些預留的測試點上。這樣既能測試到這些信號的波形,又不會影響SDRAM的工作。

如果電路測試過程中發現需要飛線才能解決問題,那么這些預留的測試點還可以作為飛線的過渡點。

FPGA設計者的5項基本功介紹

在小編看來,成為一名說得過去的FPGA設計者,需要練好5項基本功:仿真、綜合、時序分析、調試、驗證。

需要強調的一點是,以上基本功是針對FPGA設計者來說的,不是針對IC設計者的。對于IC設計,不太懂,所以不敢妄言。

對于FPGA設計者來說,練好這5項基本功,與用好相應的EDA工具是同一過程,對應關系如下:

1.、仿真:Modelsim, Quartus II(Simulator Tool)

2.、綜合:Quartus II (Compiler Tool, RTL Viewer, Technology Map Viewer, Chip Planner)

3、 時序:Quartus II (TimeQuest Timing Analyzer, Technology Map Viewer, Chip Planner)

4、調試:Quartus II (SignalTap II Logic Analyzer, Virtual JTAG, Assignment Editor)

5、驗證:Modelsim, Quartus II(Test Bench Template Writer)

掌握HDL語言雖然不是FPGA設計的全部,但是HDL語言對FPGA設計的影響貫穿于整個FPGA設計流程中,與FPGA設計的5項基本功是相輔相成的。

對于FPGA設計者來說,用好“HDL語言的可綜合子集”可以完成FPGA設計50%的工作——設計編碼。練好仿真、綜合、時序分析這3項基本功,對于學習“HDL語言的可綜合子集”有如下幫助:

1. 通過仿真,可以觀察HDL語言在FPGA中的邏輯行為。

2. 通過綜合,可以觀察HDL語言在FPGA中的物理實現形式。

3. 通過時序分析,可以分析HDL語言在FPGA中的物理實現特性。

對于FPGA設計者來說,用好“HDL語言的驗證子集”,可以完成FPGA設計另外50%的工作——調試驗證。

1. 搭建驗證環境,通過仿真的手段可以檢驗FPGA設計的正確性。

2. 全面的仿真驗證可以減少FPGA硬件調試的工作量。

3.把硬件調試與仿真驗證方法結合起來,用調試解決仿真未驗證的問題,用仿真保證已經解決的問題不在調試中再現,可以建立一個回歸驗證流程,有助于FPGA設計項目的維護。

FPGA設計者的這5項基本功不是孤立的,必須結合使用,才能完成一個完整的FPGA設計流程。反過來說,通過完成一個完整的設計流程,才能最有效地練習這5項基本功。對這5項基本功有了初步認識,就可以逐個深入學習一些,然后把學到的知識再次用于完整的設計流程。如此反復,就可以逐步提高設計水平。采用這樣的循序漸進、螺旋式上升的方法,只要通過培訓入了門,就可以自學自練,自我提高。

市面上出售的有關FPGA設計的書籍為了保證結構的完整性,對FPGA設計的每一個方面分開介紹,每一方面雖然深入,但是由于缺少其他相關方面的支持,讀者很難付諸實踐,只有通讀完全書才能對FPGA設計獲得一個整體的認識。這樣的書籍,作為工程培訓指導書不行,可以作為某一個方面進階的參考書。如何使用現有的書籍進行自學,這是后話。

對于新入職的員工來說,他們往往對FPGA的整體設計流程有了初步認識,5項基本功的某幾個方面可能很扎實。但是由于某個或某幾個方面能力的欠缺,限制了他們獨自完成整個設計流程的能力。入職培訓的目的就是幫助他們掌握整體設計流程,培養自我獲取信息的能力,通過幾個設計流程來回的訓練,形成自我促進、自我發展的良性循環。在這一過程中,隨著對工作涉及的知識的廣度和深度的認識逐步清晰,新員工的自信心也會逐步增強,對個人的發展方向也會逐步明確,才能積極主動地參與到工程項目中來。

FPGA的設計流程

FPGA的設計流程就是利用EDA開發軟件和編程工具對FPGA芯片進行開發的過程。典型FPGA的開發流程一般如圖4.1.1所示,包括功能定義/器件選型、設計輸入、功能仿真、綜合優化、綜合后仿真、實現、布線后仿真、板級仿真以及芯片編程與調試等主要步驟。

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、 綜合后仿真

綜合后仿真檢查綜合結果是否和原設計一致。在仿真時,把綜合生成的標準延時文件反標注到綜合仿真模型中去,可估計門延時帶來的影響。但這一步驟不能估計線延時,因此和布線后的實際情況還有一定的差距,并不十分準確。目前的綜合工具較為成熟,對于一般的設計可以省略這一步,但如果在布局布線后發現電路結構和設計意圖不符,則需要回溯到綜合后仿真來確認問題之所在。在功能仿真中介紹的軟件工具一般都支持綜合后仿真。

一文解讀FPGA設計者的5項基本功及設計流程

圖4-1 FPGA典型設計流程

6、 實現與布局布線

布局布線可理解為利用實現工具把邏輯映射到目標器件結構的資源中,決定邏輯的最佳布局,選擇邏輯與輸入輸出功能鏈接的布線通道進行連線,并產生相應文件(如配置文件與相關報告),實現是將綜合生成的邏輯網表配置到具體的FPGA芯片上,布局布線是其中最重要的過程。布局將邏輯網表中的硬件原語和底層單元合理地配置到芯片內部的固有硬件結構上,并且往往需要在速度最優和面積最優之間作出選擇。布線根據布局的拓撲結構,利用芯片內部的各種連線資源,合理正確地連接各個元件。目前,FPGA的結構非常復雜,特別是在有時序約束條件時,需要利用時序驅動的引擎進行布局布線。布線結束后,軟件工具會自動生成報告,提供有關設計中各部分資源的使用情況。由于只有FPGA芯片生產商對芯片結構最為了解,所以布局布線必須選擇芯片開發商提供的工具。

7、 時序仿真

時序仿真,也稱為后仿真,是指將布局布線的延時信息反標注到設計網表中來檢測有無時序違規(即不滿足時序約束條件或器件固有的時序規則,如建立時間、保持時間等)現象。時序仿真包含的延遲信息最全,也最精確,能較好地反映芯片的實際工作情況。由于不同芯片的內部延時不一樣,不同的布局布線方案也給延時帶來不同的影響。因此在布局布線后,通過對系統和各個模塊進行時序仿真,分析其時序關系,估計系統性能,以及檢查和消除競爭冒險是非常有必要的。在功能仿真中介紹的軟件工具一般都支持綜合后仿真。

8、 板級仿真與驗證

板級仿真主要應用于高速電路設計中,對高速系統的信號完整性、電磁干擾等特征進行分析,一般都以第三方工具進行仿真和驗證。

9、 芯片編程與調試

設計的最后一步就是芯片編程與調試。芯片編程是指產生使用的數據文件(位數據流文件,Bitstream Generation),然后將編程數據下載到FPGA芯片中。其中,芯片編程需要滿足一定的條件,如編程電壓、編程時序和編程算法等方面。邏輯分析儀(Logic Analyzer,LA)是FPGA設計的主要調試工具,但需要引出大量的測試管腳,且LA價格昂貴。目前,主流的FPGA芯片生產商都提供了內嵌的在線邏輯分析儀(如Xilinx ISE中的ChipScope、Altera QuartusII中的SignalTapII以及SignalProb)來解決上述矛盾,它們只需要占用芯片少量的邏輯資源,具有很高的實用價值。

FPGA設計心得

工作過的朋友肯定知道,公司里是很強調規范的,特別是對于大的設計(無論軟件還是硬件),不按照規范走幾乎是不可實現的。邏輯設計也是這樣:如果不按規范做的話,過一個月后調試時發現有錯,回頭再看自己寫的代碼,估計很多信號功能都忘了,更不要說檢錯了;如果一個項目做了一半一個人走了,接班的估計得從頭開始設計;如果需要在原來的版本基礎上增加新功能,很可能也得從頭來過,很難做到設計的可重用性。在邏輯方面,我覺得比較重要的規范有這些:

1.設計必須文檔化。要將設計思路,詳細實現等寫入文檔,然后經過嚴格評審通過后才能進行下一步的工作。這樣做乍看起來很花時間,但是從整個項目過程來看,絕對要比一上來就寫代碼要節約時間,且這種做法可以使項目處于可控、可實現的狀態。

2.代碼規范。如果在另一個設計中的時鐘是40ns,復位周期不變,我們只需對CLK_PERIOD進行重新例化就行了,從而使得代碼更加易于重用。

3.信號命名要規范化。

a.信號名一律小寫,參數用大寫。

b.對于低電平有效的信號結尾要用_n標記,如rst_n。

c.端口信號排列要統一,一個信號只占一行,最好按輸入輸出及從哪個模塊來到哪個模塊去的關系排列,這樣在后期仿真驗證找錯時后方便很多。

d.一個模塊盡量只用一個時鐘,這里的一個模塊是指一個module或者是一個entity。在多時鐘域的設計中涉及到跨時鐘域的設計中最好有專門一個模塊做時鐘域的隔離。這樣做可以讓綜合器綜合出更優的結果。

e.盡量在底層模塊上做邏輯,在高層盡量做例化,頂層模塊只能做例化,禁止出現任何膠連邏輯(gluelogic),哪怕僅僅是對某個信號取反。理由同上。

f.在FPGA的設計上禁止用純組合邏輯產生latch,帶D觸發器的latch的是允許的,比如配置寄存器就是這種類型。

g.一般來說,進入FPGA的信號必須先同步,以提高系統工作頻率(板級)。

h.所有模塊的輸出都要寄存器化,以提高工作頻率,這對設計做到時序收斂也是極有好處的。

i.除非是低功耗設計,不然不要用門控時鐘,這會增加設計的不穩定性,在要用到門控時鐘的地方,也要將門控信號用時鐘的下降沿打一拍再輸出與時鐘相與。

j.禁止用計數器分頻后的信號做其它模塊的時鐘,而要用改成時鐘使能的方式,否則這種時鐘滿天飛的方式對設計的可靠性極為不利,也大大增加了靜態時序分析的復雜性。如FPGA的輸入時鐘是25M的,現在系統內部要通過RS232與PC通信,要以rs232_1xclk的速率發送數據。

時序是設計出來的

我的boss有在華為及峻龍工作的背景,自然就給我們講了一些華為及altera做邏輯的一些東西,而我們的項目規范,也基本上是按華為的那一套去做。在工作這幾個月中,給我感觸最深的是華為的那句話:時序是設計出來的,不是仿出來的,更不是湊出來的。在我們公司,每一個項目都有很嚴格的評審,只有評審通過了,才能做下一步的工作。以做邏輯為例,并不是一上來就開始寫代碼,而是要先寫總體設計方案和邏輯詳細設計方案,要等這些方案評審通過,認為可行了,才能進行編碼,一般來說這部分工作所占的時間要遠大于編碼的時間。

總體方案主要是涉及模塊劃分,一級模塊和二級模塊的接口信號和時序(我們要求把接口信號的時序波形描述出來)以及將來如何測試設計。在這一級方案中,要保證在今后的設計中時序要收斂到一級模塊(最后是在二級模塊中)。什么意思呢?我們在做詳細設計的時候,對于一些信號的時序肯定會做一些調整的,但是這種時序的調整最多只能波及到本一級模塊,而不能影響到整個設計。記得以前在學校做設計的時候,由于不懂得設計時序,經常因為有一處信號的時序不滿足,結果不得不將其它模塊信號的時序也改一下,搞得人很郁悶。

在邏輯詳細設計方案這一級的時候,我們已經將各級模塊的接口時序都設計出來了,各級模塊內部是怎么實現的也基本上確定下來了。由于做到這一點,在編碼的時候自然就很快了,最重要的是這樣做后可以讓設計會一直處于可控的狀態,不會因為某一處的錯誤引起整個設計從頭進行。

如何提高電路工作頻率

對于設計者來說,當然希望我們設計的電路的工作頻率(在這里如無特別說明,工作頻率指FPGA片內的工作頻率)盡量高。我們也經常聽說用資源換速度,用流水的方式可以提高工作頻率,這確實是一個很重要的方法,今天我想進一步去分析該如何提高電路的工作頻率。

先來分析下是什么影響了電路的工作頻率。

電路的工作頻率主要與寄存器到寄存器之間的信號傳播時延及clock skew有關。在FPGA內部如果時鐘走長線的話,clockskew很小,基本上可以忽略, 在這里為了簡單起見,只考慮信號的傳播時延的因素。信號的傳播時延包括寄存器的開關時延、走線時延、經過組合邏輯的時延(這樣劃分或許不是很準確,不過對分析問題來說應該是沒有可以的),要提高電路的工作頻率,就要在這三個時延中做文章,使其盡可能的小。先來看開關時延,這個時延是由器件物理特性決定的,沒有辦法去改變,所以只能通過改變走線方式和減少組合邏輯的方法來提高工作頻率。

1.通過改變走線的方式減少時延。

以 Altera的器件為例,在quartus里面的timing closure floorplan 可以看到有很多條條塊塊,我們可以將條條塊塊按行和按列分,每一個條塊代表1個LAB,每個LAB里有8個或者是10個LE。它們的走線時延的關系如下:同一個LAB中(最快) 同列或者同行 不同行且不同列。

通過給綜合器加適當的約束(不可貪心,一般以加5%裕量較為合適,比如電路工作在100Mhz,則加約束加到105Mhz就可以了,貪心效果反而不好,且極大增加綜合時間)可以將相關的邏輯在布線時盡量布的靠近一點,從而減少走線的時延。(注:約束的實現不完全是通過改進布局布線方式去提高工作頻率,還有其它的改進措施)

2.通過減少組合邏輯的減少時延。

上面講了可以通過加約束來提高工作頻率,但是在做設計之初可萬萬不可將提高工作頻率的美好愿望寄托在加約束上,我們要通過合理的設計去避免出現大的組合邏輯,從而提高電路的工作頻率,這才能增強設計的可移植性,才可以使得設計在移植到另一同等速度級別的芯片時還能使用。

我們知道,目前大部分FPGA都基于4輸入LUT的,如果一個輸出對應的判斷條件大于四輸入的話就要由多個LUT級聯才能完成,這樣就引入一級組合邏輯時延,我們要減少組合邏輯,無非就是要輸入條件盡可能的少,,這樣就可以級聯的LUT更少,從而減少了組合邏輯引起的時延。

平時聽說的流水就是一種通過切割大的組合邏輯(在其中插入一級或多級D觸發器,從而使寄存器與寄存器之間的組合邏輯減少)來提高工作頻率的方法。比如一個32位的計數器,該計數器的進位鏈很長,必然會降低工作頻率,我們可以將其分割成4位和8位的計數,每當4位的計數器計到15后觸發一次8位的計數器,這樣就實現了計數器的切割,也提高了工作頻率。

在狀態機中,一般也要將大的計數器移到狀態機外,因為計數器這東西一般是經常是大于4輸入的,如果再和其它條件一起做為狀態的跳變判據的話,必然會增加LUT的級聯,從而增大組合邏輯。以一個6輸入的計數器為例,我們原希望當計數器計到111100后狀態跳變,現在我們將計數器放到狀態機外,當計數器計到111011后產生個enable信號去觸發狀態跳變,這樣就將組合邏輯減少了。

上面說的都是可以通過流水的方式切割組合邏輯的情況,但是有些情況下我們是很難去切割組合邏輯的,在這些情況下又該怎么做呢?

狀態機就是這么一個例子,我們不能通過往狀態譯碼組合邏輯中加入流水。如果我們的設計中有一個幾十個狀態的狀態機,它的狀態譯碼邏輯將非常之巨大,毫無疑問,這極有可能是設計中的關鍵路徑。那該怎么做呢?還是老思路,減少組合邏輯。我們可以對狀態的輸出進行分析,對它們進行重新分類,并根據這個重新定義成一組組小狀態機,通過對輸入進行選擇(case語句)并去觸發相應的小狀態機,從而實現了將大的狀態機切割成小的狀態機。在ATA6的規范中(硬盤的標準),輸入的命令大概有20十種,每一個命令又對應很多種狀態,如果用一個大的狀態機(狀態套狀態)去做那是不可想象的,可以通過case語句去對命令進行譯碼,并觸發相應的狀態機,這樣做下來這一個模塊的頻率就可以跑得比較高了。

總結:提高工作頻率的本質就是要減少寄存器到寄存器的時延,最有效的方法就是避免出現大的組合邏輯,也就是要盡量去滿足四輸入的條件,減少LUT級聯的數量。我們可以通過加約束、流水、切割狀態的方法提高工作頻率。

做邏輯的難點在于系統結構設計和仿真驗證

剛去公司的時候boss就和我講,做邏輯的難點不在于RTL級代碼的設計,而在于系統結構設計和仿真驗證方面。目前國內對可綜合的設計強調的比較多,而對系統結構設計和仿真驗證方面似乎還沒有什么資料,這或許也從一個側面反映了國內目前的設計水平還比較低下吧。以前在學校的時候,總是覺得將RTL級代碼做好就行了,仿真驗證只是形式而已,所以對HDL的行為描述方面的語法不屑一顧,對testbench也一直不愿意去學--因為覺得畫波形圖方便;對于系統結構設計更是一點都不懂了。到了公司接觸了些東西才發現完全不是這樣。

其實在國外,花在仿真驗證上的時間和人力大概是花在RTL級代碼上的兩倍,現在仿真驗證才是百萬門級芯片設計的關鍵路徑。

仿真驗證的難點主要在于怎么建模才能完全和準確地去驗證設計的正確性(主要是提高代碼覆蓋),在這過程中,驗證速度也是很重要的。

驗證說白了也就是怎么產生足夠覆蓋率的激勵源,然后怎么去檢測錯誤。我個人認為,在仿真驗證中,最基本就是要做到驗證的自動化。這也是為什么我們要寫testbench的原因。在我現在的一個設計中,每次跑仿真都要一個小時左右(這其實算小設計)由于畫波形圖無法做到驗證自動化,如果用通過畫波形圖來仿真的話,一是畫波形會畫死(特別是對于算法復雜的、輸入呈統計分布的設計),二是看波形圖要看死,三是檢錯率幾乎為零。那么怎么做到自動化呢?我個人的水平還很有限,只能簡單地談下BFM(bus function model,總線功能模型)。

以做一個MAC的core為例(背板是PCI總線),那么我們需要一個MAC_BFM和PCI_BFM及PCI_BM(PCI behavior model)。MAC_BFM的主要功能是產生以太網幀(激勵源),隨機的長度和幀頭,內容也是隨機的,在發送的同時也將其復制一份到PCI_BM中;PCI_BFM的功能則是仿PCI總線的行為,比如被測收到了一個正確幀后會向PCI總線發送一個請求,PCI_BFM則會去響應它,并將數據收進來;PCI_BM的主要功能是將MAC_BFM發送出來的東西與PCI_BFM接收到的東西做比較,由于它具有了MAC_BFM的發送信息和PCI_BFM的接收信息,只要設計合理,它總是可以自動地、完全地去測試被測是否工作正常,從而實現自動檢測。 華為在仿真驗證方面估計在國內來說是做的比較好的,他們已建立起了比較好的驗證平臺,大部分與通信有關的BFM都做好了,聽我朋友說,現在他們只需要將被測放在測試平臺中,并配置好參數,就可以自動地檢測被測功能的正確與否。

在功能仿真做完后,由于我們做在是FPGA的設計,在設計時已經基本保證RTL級代碼在綜合結果和功能仿真結果的一致性,只要綜合布局布線后的靜態時序報告沒有違反時序約束的警告,就可以下到板子上去調試了。事實上,在華為中興,他們做FPGA的設計時也是不做時序仿真的,因為做時序仿真很花時間,且效果也不見得比看靜態時序分析報告好。

當然了,如果是ASIC的設計話,它們的仿真驗證的工作量要大一些,在涉及到多時鐘域的設計時,一般還是做后仿的。不過在做后仿之前,也一般會先用形式驗證工具和通過靜態時序分序報告去查看有沒有違反設計要求的地方,這樣做了之后,后仿的工作量可以小很多。

在HDL語言方面,國內語言很多人都在爭論VHDL和verilog哪個好,其實我個人認為這并沒有多大的意義,外面的大公司基本上都是用verilog在做RTL級的代碼,所以還是建議大家盡量學verilog。在仿真方面,由于VHDL在行為級建模方面弱于verilog,用VHDL做仿真模型的很少,當然也不是說verilog就好,其實verilog在復雜的行為級建模方面的能力也是有限的,比如目前它還不支持數組。在一些復雜的算法設計中,需要高級語言做抽象才能描述出行為級模型。在國外,仿真建模很多都是用System C和E語言,用verilog的都算是很落后的了,國內華為的驗證平臺好像是用System C寫。

在系統結構設計方面,由于我做的設計還不夠大,還談不上什么經驗,只是覺得必須要具備一些計算機系統結構的知識才行。

劃分的首要依據是功能,之后是選擇合適的,總線結構、存儲結構和處理器架構,通過系統結構劃分要使各部分功能模塊清晰,易于實現。這一部分我想過段時間有一點體會了再和大家分享,就先不誤導大家了。

最后簡單說一下體會吧,歸結起來就多實踐、多思考、多問。實踐出真知,看100遍別人的方案不如自己去實踐一下。實踐的動力一方面來自興趣,一方面來自壓力,我個人覺得后者更重要。有需求會容易形成壓力,也就是說最好能在實際的項目開發中鍛煉,而不是為了學習而學習。在實踐過程中要多思考,多想想問題出現的原因,問題解決后要多問幾個為什么,這也是經驗積累的過程,如果有寫項目日志的習慣更好,把問題及原因、解決的辦法都寫進去。最后還要多問,遇到問題思索后還得不到解決就要問了,畢竟個人的力量是有限的,問同學同事,問搜索引擎,問網友,都可以,一篇文章、朋友們的點撥都可能幫助自己快速解決問題。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1608

    文章

    21367

    瀏覽量

    594696
收藏 人收藏

    評論

    相關推薦

    FPGA入門:FPGA設計者入門必備!

    電子發燒友網: 在我看來,想要成為一名合格的 FPGA 設計者,需要掌握很多知識和技巧。本文就針對FPGA設計入門者需要掌握的基本功及設計原則展開分析,希望對大家有幫助。 一.5大
    發表于 06-26 15:26 ?1.4w次閱讀
    <b class='flag-5'>FPGA</b>入門:<b class='flag-5'>FPGA</b><b class='flag-5'>設計者</b>入門必備!

    FPGA設計者的五項必知必會

    在我看來,成為一名說得過去的FPGA設計者,需要練好5項基本功:仿真、綜合、時序分析、調試、驗證。需要強調的一點是,以上基本功是針對FPGA
    發表于 12-10 16:47 ?665次閱讀

    學好FPGA要掌握的五基本功

    。 3. 把硬件調試與仿真驗證方法結合起來,用調試解決仿真未驗證的問題,用仿真保證已經解決的問題不在調試中再現,可以建立個回歸驗證流程,有助于FPGA設計項目的維護。 FPGA
    發表于 02-28 14:04

    FPGA設計者5基本功

    FPGA設計者5基本功
    發表于 08-20 15:24

    學好LABVIEW都需要哪些基本功?

    學好LABVIEW都需要哪些基本功!
    發表于 05-24 14:01

    PGA設計者5基本功

    Planner)4. 調試:[sub]Quartus II (SignalTap II Logic Analyzer, Virtual JTAG, Assignment Editor)[/sub]5
    發表于 10-10 10:10

    FPGA設計者5基本功

    設計項目的維護。 FPGA設計者的這5基本功不是孤立的,必須結合使用,才能完成個完整的
    發表于 05-16 18:58

    FPGA設計者5基本功

    設計項目的維護。 FPGA設計者的這5基本功不是孤立的,必須結合使用,才能完成個完整的
    發表于 08-26 09:43

    FPGA設計者5基本功

    設計項目的維護。 FPGA設計者的這5基本功不是孤立的,必須結合使用,才能完成個完整的
    發表于 09-14 11:02

    FPGA設計者的五基本功

    回歸驗證流程,有助于FPGA設計項目的維護。 FPGA設計者的這5
    發表于 03-19 10:44

    FPGA設計者5基本功

    回歸驗證流程,有助于FPGA設計項目的維護。 FPGA設計者的這5
    發表于 10-14 14:53

    FPGA基本開發流程概述

    的提上議程開始,設計者需要進行FPGA/CPLD器件功能的需求分析,然后進行模塊的劃分,比較復雜和龐大的設計,則會通過模塊劃分把工作交給個團隊的多人協作完成。各個模塊的具體任務和功能劃分完畢(通常
    發表于 01-28 02:29

    【微信精選】個死磕FPGA 9年的大齡工程師的肺腑之言

    調試解決仿真未驗證的問題,用仿真保證已經解決的問題不在調試中再現,可以建立個回歸驗證流程,有助于FPGA設計項目的維護。FPGA設計者的這
    發表于 08-07 07:00

    輕松實現高速串行I/O (FPGA應用設計者指南)

    輕松實現高速串行I/OFPGA應用設計者指南輸入/輸出(I/O)在計算機和工業應用中直扮演著關鍵角色。但是,隨著信號處理越來越復雜,I/O通信會變得不可靠。在早期的并行I/O總線中,接口的數據對齊
    發表于 01-02 12:12

    一文解讀FPGA設計者的5項基本功及設計流程資料下載

    電子發燒友網為你提供一文解讀FPGA設計者的5項基本功及設計流程資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英
    發表于 04-24 08:46 ?38次下載
    一文<b class='flag-5'>解讀</b><b class='flag-5'>FPGA</b><b class='flag-5'>設計者</b>的5項<b class='flag-5'>基本功</b>及設計<b class='flag-5'>流程</b>資料下載
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>