愛伊米

FPGA 的佈局規劃藝術

FPGA 的佈局規劃藝術

佈局規劃是為設計增加布局佈線約束的過程。一個大型高速設計的佈局規劃是實現時序收斂的關鍵。好的佈局規劃可以大大提高設計效能,並確保設計結果的質量。差的佈局規劃具有相反的效果,使其無法滿足時序約束,並導致設計結果與預期不符。

有效的FPGA佈局規劃是一項要在實踐中獲得的技能。它需要優秀的設計知識和對效能目標、工具選擇、FPGA結構和功能的深刻理解,以及基於時序分析結果必要的程式碼修改和設計約束能力。

佈局規劃能讓設計者直接觀察到設計綜合後產生的結果適配到了FPGA器件的哪些地方,在ASIC領域這是一項專業化工程。有一個或多個工程師專門從事大的晶片的佈局規劃。相對來說,FPGA的佈局規劃簡單得多,它通常由一個工程師設計完成。

佈局規劃不僅為大型、高利用、高速的設計所採用,小型的設計也採用佈局規劃。小型設計的佈局規劃可以簡單到就指定一個佈局約束。即使有的設計時鐘頻率低,並且滿足時序,往往也需要工程師來做佈局規劃。

佈局規劃是與時序收斂、一定程度上又與邏輯設計緊密聯絡在一起的任務。建議在設計週期的早期開始準備。例如,佈局規劃的考慮在模組化設計過程中具有一定的份量。

Xilinx Plan Ahead是一個用於佈局規劃的主流工具。高階使用者可以將佈局約束直接新增到設計約束檔案中,從而進行手動佈局規劃。Plan Ahead還支援自動佈局規劃。然而,經驗表明,大型設計使用手動佈局規劃能產生更好的效果。

FPGA佈局規劃流程

FPGA設計佈局規劃一般包括如圖1所示的步驟。

FPGA 的佈局規劃藝術

IO分配

FPGA設計中需要進行IO分配。鎖定設計的所有IO是確定任何其他佈局佈線約束前的第一個需要完成的任務。如果不這樣做可能會導致結果不夠理想,同時也浪費時間。之後IO可能需要根據佈局規劃的改變而改變。

佈局規劃錨樁模組

所有IO分配完成後,下一步是佈局規劃所有的錨樁模組。這些模組的位置是不能改變的,如連線到IO的模組、與嵌入式FPGA元件介面的使用者邏輯模組(如PCI Express介面)、乙太網MAC或收發器。很多如復位控制器、儲存器控制器、CPU這樣的模組都可在FPGA晶片中心的附近佈局。

佈局規劃剩餘模組

對設計中其他模組的佈局規劃是增加布局佈線約束、進行設計、分析時序報告、做出必要調整的迭代過程,一直要到時序收斂時才停止。這是花費時間最長的步驟,大型的高速設計需要花費幾周時間。在此過程中,設計者可能需要更改現有的佈局規劃:佈局規劃區域的移動、增加或減少它們的面積,或在較低層對模組進行佈局規劃以改善間隔大小。

鎖定核心元件

為儲存結果,當設計滿足時序要求且預計沒有重大的設計變更時,建議鎖定所有的BRAM、DSP和時鐘管理模組,主要是為了改善後面設計中的一致性和執行時間。

佈局規劃微調

一些小的佈局規劃微調可能會發生在設計的後期,主要是由於時序約束的變化、提高或降低邏輯利用而增加的新特徵或修復缺陷。

佈局佈線約束

佈局佈線約束作為輸人提供給物理實現工具。Xilinx的物理實現工具使用專用使用者約束檔案(UCF\XDC)格式。下面的例子是最常用的佈局佈線約束語法。

佈局佈線約束

AREA_GROUP約束

AREA_GROUP用於佈局約束一組FPGA資源,如邏輯片、BRAM、DSP、MMCM等。它允許佈局約束在FPGA的特定範圍的區域內。AREA_GROUP的基本語法如下例所示。

這個例子定義了一個名為“ag_data_out_0”的組,將暫存器data_out_0約束到邏輯片範圍SLICE_X44Y40~SLICE_X45Y42。該組裡的GROUP和PLACE屬性確定組裡的邏輯是否與組外邏輯相結合。使用GROUP和PLACE屬性可提高編譯的一致性,但由於仍閒置了一些邏輯資源未用,因此邏輯利用將更高。

定向佈線約束

佈線約束具有鎖定特定路線的能力,只適用於少數高速佈線場合。使用定向佈線的一個例子是在儲存器控制器中鎖定與10引腳介面的佈線,以控制延遲。詳細布線約束的語法未有文件介紹。需要時使用FPGA編輯器來產生約束,具體方法是選擇一個線網(net)訊號,然後在Tools->Directed Routing Constraints dialog中選擇合適的選項。

PROHIBIT約束

PROHIBIT約束不允許佈局佈線工具使用特定的FPGA資源,如邏輯片、BRAM、DSP、IO等。下面是禁止使用特定的IO引腳和一系列邏輯片的例子。

PROHIBIT約束對於保留特定的邏輯區以供將來使用是非常必要的,對於簡單的設計來說,它與AREA_GR0UP約束相反。

儲存線網標號

儲存線網標號(S)可以約束某些線網或訊號不被移除,它用於設計的初始階段,以防止未連線的模組輸人和無負載的輸出被移除。下面的例子中給出了其語法。

位置約束

L0C是將特定元件放人FPGA中的位置約束。例如在每一個設計中幾乎都會使用IO的位置。

瞭解佈線延遲

瞭解佈線延遲是進行有效佈局規劃的一部分。佈線延遲與FPGA系列和速度等級有關,還取決於資源在FPGA晶片上的佈局方式。Xilinx的FPGA Virtex-6和Spartan-6具有柱狀結構:IO、BRAM和DSP塊組織成柱狀。邏輯資源具有類似“瓷磚”的結構,在水平和垂直方向排列成網格。FPGA也可以包含無任何邏輯資源的區域,或者只包含一個大的嵌入式塊,如PCI Express介面核。所有這些都可能影響到佈線的訊號延遲。

下面的例子用以說明最壞情況下的佈線延遲。

IO佈局

該設計用於Spartan6 LX25FPGA該器件有一個不包含邏輯資源的區域,有一個訊號被佈線在這一區域周圍。圖2是在FPGA編輯器中看到的佈線。

FPGA編輯器報告以下佈線延遲:

在上面的例子中,佈線延遲範圍從7。267ns到13。724ns。例如,如果設計中採用了200MHz的時鐘,某個佈線延遲會超過時鐘週期。如果這樣的設計與兩個模組相連線,並被佈局在FPGA的不同角落,將不可能滿足時序約束。復位控制器工作在200MHz,為設計的其餘部分提供同步復位訊號,即使佈局在FPGA晶片的中間位置,也可能在滿足時序上岀現問題。

穿過FPGA的“瓷磚”

由於訊號穿越FPGA的“瓷磚”(tile)增加了佈線延遲,因此降低了效能。下面舉例進行說明,其中包含了4個16位的CRC32校驗模組例項,彼此完全獨立。每個例項有單獨的資料、使能、時鐘輸人和輸出。例項以這樣一種方式佈局:每個區域的面積都完全相同,但佈局不同。區域大小的選擇要使得每個例項的邏輯利用率大約是70%左右。此外,所有區域都是封閉的,它們只包含屬於相應例項的邏輯。

以下是頂層模組的程式碼。

面積和週期約束

圖 3 說明了 4 個例項是如何在 Spartan-6 LX9 FPGA 上佈局規劃的。

FPGA 的佈局規劃藝術

例項crcl僅被佈局在一個“瓷磚”中。

例項CrC2被佈局為包含幾個水平“瓷磚”的細長矩形。

例項crc3被佈局為包含幾個垂直“瓷磚”的細長矩形。

例項crc4被佈局為包含幾個水平和垂直“瓷磚”的區域。

表1是4個例項的效能測試結果。

FPGA 的佈局規劃藝術

crcl的效能最好,crc2和crc3的效能非常類似,crc4的效能最差。這個例子透過精心挑選設計和佈局約束,僅用於說明穿越“瓷磚”對效能的影響。大多數實際設計包含的模組都可以適配到一個“瓷磚”中。不過,通常建議佈局規劃時模組適配的“瓷磚”應儘可能少。

其他佈局規劃技巧

避免佈局規劃區域重疊。

使用AREA。GROUP約束的GROUP和PLACE屬性,防止區外邏輯被佈局到規劃區裡。

佈局規劃區域的邏輯利用率限制在75%以下。

對於流水線資料,佈局規劃水平走。

對於長進位鏈,佈局規劃縱向走。

對於佈局規劃區域邊界上的模組,所有輸入和輸出都要寄存。

參考文獻

[1] Xilinx Constraints User Guide

[2]FPGA高手設計實戰100則真經

FPGA 的佈局規劃藝術

UltraScale時鐘資源和時鐘管理模組

FPGA 的佈局規劃藝術

Verilog數字系統基礎設計-CRC