關於Pblock的8個必知問題
- 2019 年 10 月 30 日
- 筆記
1. 一個Pblock為什麼會顯示內外兩個矩形?

外層矩形,對應圖中的粗紫色矩形,是Pblock的邊界,顯示了該Pblock所覆蓋的FPGA面積。內層矩形,對應圖中的細橙色矩形,表明了分配給該Pblock的資源與整個FPGA資源的比率。因此,我們只能調整外層矩形的大小來改變Pblock所佔用的FPGA資源。
2. 如何用不同顏色顯示嵌套的Pblock?
對於嵌套的Pblock,可以用不同的顏色顯示。具體方法是:依次點擊Tools -> Settings -> Colors -> Device,如下圖所示。最多可修改三層嵌套的Pblock的顏色。

例如,將第二層Pblock用綠色顯示,點擊Apply之後,效果如下圖所示。

3. 如何修改Pblock所包含的FPGA資源類型?
選中一個Pblock,在Pblock Property窗口的General子卡中會顯示該Pblock的資源類型與範圍,如下圖所示。通過勾選其中的資源類型,可改變該Pblock是否包含這類資源。

例如,不勾選DSP48,一旦選中該Pblock,包含在該Pblock中的資源會以灰色顯示,而未被包含的資源,也就是這裡的DSP48則仍然是常規亮度。如下圖所示,左側為包含DSP48的Pblock,右側為不包含DSP48的Pblock。

4. 能否讓工具自動設置Pblock的位置和大小?
在Vivado中,如果已經創建了Pblock,依次選擇Tools -> Floorplanning -> Place Pblocks,會彈出如下圖所示對話框。這個界面顯示了需要自動設置的Pblock,點擊OK,工具就會自動調整Pblock的大小和位置。

5. 如何分析Pblock的資源利用率?
實際上,Pblock的資源利用率與整個工程的資源利用率分析方法是一致的,都可以用命令report_failfast來實現,只是一些選項設置不同而已。對於Pblock,可採用如下圖所示方式。

生成報告如圖所示,顯示了Pblock資源利用率的指導值和實際值,Status為Review的需要格外關注。

6. 如何使得Pblock內部資源僅供Pblock對應的模塊使用?
如果模塊A分配給pblock_A,那麼A只能使用pblock_A內部資源,但這並不能保證其他模塊使用pblock_A內部資源。為了使得pblock_A中資源僅供模塊A使用,可以設置屬性EXCLUDE_PLACEMENT為true來達到此目的。但需注意,Pblock框住的只是邏輯資源而非布線資源,所以即使使用了該屬性,其他模塊也是可以使用該Pblock內的布線資源的。

7. 如何保證Pblock內部邏輯僅僅使用Pblock內部的布線資源?
默認情形下,一旦給某一模塊分配了Pblock,就保證了該模塊只能使用Pblock內部的FPGA邏輯資源,但並不能保證該模塊只使用該Pblock內部的布線資源。換言之,Pblock框住的只是邏輯資源,不包括布線資源。這樣,相應的模塊還是有可能使用Pblock外部的布線資源。為了增強設計的復用性,尤其在層次化設計中,應保證模塊只使用Pblock內部的布線資源,這可通過屬性CONTAIN_ROUTING實現。具體方式如下:

8. 在只有布局或布線後的DCP的情況下,如何獲取Pblock的範圍?
每個Pblock都有一個屬性GRID_RANGES,查詢該屬性即可獲得Pblock的具體範圍,同時也可獲知其位置信息。具體方法如下圖所示。可以看到,這裡的GRID_RANGES的值與命令resize_pblock的設置相對應。
