本文討論fpga的構建過程,由於fpga的過程太多了,恐怕會有歧義,這個過程,不是開發過程,不是開發流程,而是實實在在的fpga編譯的過程,使用編譯恐怕不是太合適,但是大家都叫習慣了,也知道fpga的編譯過程就是指的是fpga實現的中間一系列過程,例如綜合,實現以及最後生成位元流程式設計檔案。
這篇文章中:fpga的設計藝術(2)fpga開發流程,我們討論了建立fpga設計的過程。一旦證明了我們的設計工作成功,我們便將功能性hdl**轉移到實際的fpga中。我們通常在三個單獨的階段中執行此操作-綜合,布局佈線以及生成程式設計檔案。
本文首發
下面我們將更詳細地討論每個步驟。
構建fpga的第一階段稱為綜合。此過程將功能性rtl設計轉換為門級巨集的陣列。這具有建立實現rtl設計的平面分層電路圖的效果。
在這種情況下,巨集實際上是內部fpga單元的模型。這可以是fpga中的任何數字元素,例如觸發器,ram或查詢表(lut)。
我們可以使用許多不同的工具來執行綜合過程。
兩個主要的fpga**商(xilinix 和 intel)都提供適用於大多數專案的免費綜合工具。
除此之外,還有許多 我們可以使用的開源綜合工具。這些工具中最流行的是 yosys ,它經常與 lattice fpga一起使用。
也有用於此目的的付費工具。這些工具中最著名的是synopsys的synplify pro 和mentor graphics的leonardo spectrum。
與免費工具相比,付費工具通常能夠提供更多優化的網表。通常,對於大型或高速設計,我們只需要付費工具即可。
綜合過程至少需要兩個輸入。
其中第乙個是我們設計的源**。
我們還需要乙個指令碼或專案檔案,用於定義綜合工具的配置。該指令碼通常告訴工具目標為哪個fpga,設計的引腳以及在執行綜合時使用哪種策略。
除此之外,優良作法是建立乙個檔案,該檔案定義設計的時序約束,我們稱之為約束檔案。
我們使用時序約束來定義有關fpga的細節,而這些細節無法在源**中指定。
這包括諸如時鐘頻率,時鐘域數和外部介面的時序之類的資訊。
這些細節決定了綜合器為優化fpga內的時序投入了多少精力。
邏輯利用率
作為綜合過程的一部分,我們還可以對設計進行一些分析。但是,在布局和佈線過程之後,此資訊通常更可靠。
這些分析中的第乙個是設計的邏輯利用率。該分析詳細說明了我們設計使用的每種不同型別的fpga單元有多少個。
裝置中的各個單元隨晶元的不同以及**商之間的不同而不同。
幾乎所有現代晶元都將包括ram,某種形式的lut和觸發器。
高階晶元還可以包括專用的dsp核心,時鐘管理模組(例如pll)以及其他外圍介面(例如adc)或專用的高速介面。
完成綜合過程後,我們可以生成報告,以絕對值和器件中所有可用單元的百分比告訴我們設計中使用了多少個單元。
在執行綜合過程之後,經常會發現我們的設計對我們的裝置而言太大了。發生這種情況時,我們有很多選擇。
通常可以通過更改綜合工具的配置來降低利用率。這樣的示例可以是更改fsm編碼或選擇其他綜合演算法。
如果我們的設計僅比我們選擇的fpga大一點,那麼這種減少就足夠了。
如果這還不能充分降低利用率,那麼我們必須選擇乙個新的fpga或提高原始**的效率。
時序分析
執行綜合後,我們還可以分析fpga的時序。
我們使用該分析來確定fpga是否可以以所需的頻率執行我們的設計。
當我們的設計不能以所需的頻率執行時,我們不能確定內部觸發器將不會有時序違規。因此,我們無法保證我們的裝置能夠按預期執行。
我們通常會在布局和佈線過程之後詳細分析設計的時序。由於時序取決於fpga中單元的位置,因此經過此過程,結果將更加準確。
綜合後**
在綜合過程中,我們可以要求該工具以vhdl或verilog生成網表。
此過程還生成一組時序延遲,該時序延遲可對訊號通過fpga的傳播進行建模。
然後,我們可以使用此資訊來執行我們的綜合網表的**。
由於這些**還可以對我們的設計時序進行建模,因此它們可以為最終裝置的行為提供更準確的模型。
無論我們在設計中使用哪種語言,我們通常都使用verilog生成綜合後**模型。
這樣做的原因是基於verilog的模型比其vhdl等效模型的**速度更快。這對於綜合後**尤其重要,因為它們通常執行時間較長。
執行綜合後**有兩個主要優點。
儘管執行後綜合**有很多優點,但是我們通常不會在設計流程中這樣做。
由於這些網表更能代表最終的晶元方案,因此最好使用該網表進行任何時序**。
完成綜合後,我們需要將網表對映到fpga中的實際資源。此過程稱為「布局佈線」,實際上包含幾個不同的步驟。
我們使用構建過程的這一部分來定義所選fpga中不同單元之間的互連。
為了滿足設計的時序要求,我們通常會執行此過程的幾次執行。但是,布局佈線工具負責根據我們的配置安排這些多次執行。
當我們難以使設計滿足時序要求時,通常會增加允許工具執行的執行次數和型別。
布局佈線工具
這些工具也有付費版本可用,儘管通常只有針對高階fpga的設計才需要它們。
對於萊迪思的fpga,開源的nextpnr軟體是一種流行的布局佈線工具。
根據我們設計的大小,布局和佈線過程可能需要幾個小時才能完成。
與綜合過程一樣,布局佈線工具需要大量輸入才能正確執行。
我們使用綜合工具生成的網表是最重要的輸入。該網表通常是.edf檔案,儘管這在工具之間有所不同。
通常,我們還使用專案檔案或指令碼來確定布局和佈線工具的配置。
我們使用它來定義重要資訊,例如fpga零件號和封裝。除此之外,我們使用此指令碼定義布局和路線工具的配置。
我們還需要向工具提供乙個約束檔案,以定義我們設計的時序特徵。該檔案通常與我們在綜合過程中使用的檔案相同,該檔案定義了有關時鐘頻率和域的資訊。
我們還使用約束檔案來定義我們的設計的物理特性,而這些特性在hdl**中無法描述。至少,這將包括輸入和輸出到裝置物理引腳的對映。
流程圖顯示了綜合網表,約束和專案檔案作為布局和佈線工具的輸入,網表作為輸出。
時序與利用率
與綜合過程一樣,在布局和路線完成之後,我們可以生成許多報告。這使我們可以進一步分析設計以確保其正常工作。
我們通常會在完成布局和佈線過程後執行實用程式報告。
該報告詳細介紹了我們用於通過fpga實現設計的不同單元的數量。
該報告與我們在綜合過程中可以生成的報告完全相同。但是,當我們在完成布局佈線過程後生成此報告時,該報告會更準確。
我們通常在完成布局和佈線過程後執行的另一項分析是靜態時序分析(sta)。
我們使用此過程來計算設計中所有邏輯鏈的延遲時間。通過計算此資訊,布局佈線工具可以確定晶元是否能夠以指定的時鐘頻率執行。
布局佈線工具會在最壞情況和最佳情況下的定時條件下執行此分析。但是,最常見的情況是在矽**現最壞情況下的延遲會導致時序問題。
我們通常將sta報告用作設計驗證的關鍵部分。
如果我們的設計使sta失敗,那麼我們將無法保證fpga能夠可靠地工作。發生這種情況時,我們要麼必須使用不同的設定再次執行實施過程,要麼必須更改設計。
fpga設計實現的最後階段是生成程式設計檔案。
通常,我們使用布局和佈線工具來生成我們的程式設計檔案。
但是,我們通常將其作為單獨的過程執行。
僅當布局和佈線過程生成其輸出後,才能執行此過程。我們只需要告訴工具生成該輸出所需的檔案型別即可。
完成此過程後,我們可以使用生成的檔案對fpga進行程式設計。
FPGA的設計藝術(2)FPGA開發流程
現場可程式設計門陣列 fpga 是一種半導體器件,包含邏輯塊,這些邏輯塊被程式設計為執行一組特定的功能。這些可程式設計邏輯塊在互連矩陣的幫助下相互連線。這些互連負責連線邏輯塊並促進訊號在晶元上的流動。該結構以二維陣列的形式排列,該二維陣列由將其與輸入和輸出訊號連線的邏輯塊,互連和i o塊組成。邏輯塊...
FPGA之道(42)FPGA設計的分類
本文摘自 fpga之道 一看來學習下作者的看法。拋開應用背景 科研領域不談,單從fpga設計本身的一些特性出發,就可以將它劃分成若干個基本類別。在動手用hdl 實現fpga設計之前,最好先分析一下待實現的fpga設計具有哪乙個或者哪幾個基本類別的特徵,從而採用更加適合的程式設計思路來編寫hdl 按功...
FPGA設計 180104 FPGA器件選型相關
fpga器件選擇中,有乙個考慮因素是封裝大小,封裝大小也限制了可用管腳個數以及可用serdes的數目,舉例如下 以3cg為例,不同的封裝型別,對應器件的hd埠 hp埠以及serders gth,gty 個數是不一樣的,另外可以看到3cg目前是沒有serders埠的。bank一般分為hp,hr,hd,...