Pblock可以這麼畫
- 2019 年 10 月 30 日
- 筆記
手工布局應該算是一項高級技能,在某些場合是不可或缺的,例如Partial Reconfiguration。同時,它也是實現時序收斂的一種可選方法。
首先,打開綜合後的設計,將Vivado切換到Floorplanning模式,如下圖所示。

一旦切換到Floorplanning模式,Vivado會自動打開Physical Constraints窗口(也可以通過Window -> Physical Constraints打開此窗口)和Device窗口,如下圖所示。至此,我們就可以開始手工布局。

手工布局的本質是對指定邏輯單元設定面積約束,在Vivado下就是對其畫一個Pblock。Pblock的大小限定了該邏輯單元所能使用的FPGA資源;Pblock的位置限定了該邏輯單元在FPGA中的位置;Pblock中所包含的FPGA資源類型限定了該邏輯單元所能使用的資源。
第二步,在Netlist窗口中選擇需要手工布局的邏輯單元,這裡我們選取了模組arnd1,如下圖所示。之後在Device窗口中點擊藍色橢圓標記的快捷鍵。

第三步,一旦點擊上圖標記2的按鈕,就可以開始畫Pblock,如下圖所示。圖中Grids顯示了該Pblock所包含的資源類型及數量。

一旦畫好一個Pblock,在Physical Constraints窗口中就會有所顯示,畢竟Pblock實質上就是一種物理約束。

Pblock的初始位置和大小並不重要。通常的做法是先給所有的需要手工布局的邏輯單元畫Pblock,然後再根據這些邏輯單元的資源利用率以及連接關係調整相應的Pblock的大小和位置。
選中Pblock,在其屬性窗口中,選擇Statistics,可看到Pblock所包含的資源類型和數量,同時顯示了對應邏輯單元需要用到的資源類型與數量,從而可以獲得該Pblock中的資源利用率,如下圖所示。

如前所述,Pblock本質上是一種物理約束,因此也可以通過相應的Tcl命令完成。上述操作對應的Tcl命令如下圖所示。

這裡主要使用了三條命令:
create_pblock: 創建Pblock
add_cells_to_pblock: 將邏輯單元分配給該Pblock
resize_pblock: 調整Pblock的大小和位置