前言
vivado自帶很多命令幫助編譯器更好的實現設計者的想法,用得好會變成開發利器。比如,max_fanout命令,本身是用來約束扇出,減少布線擁塞的常用命令。然而很多讀者向我反映,使用這個命令之后發現沒有任何事情發生,完全沒有任何效果。這里我就帶大家理一理這個命令的使用方法。
max_fanout 起作用的條件
打算降低扇出的網絡必須是reg驅動。因為降低扇出的原理就是reg驅動超過N(設置參數)條網絡的時候,就復制一個同樣的reg驅動其他N條網絡,如果復制2個還不夠就一直復制到足夠為止,見圖1。
-flatten_hierarchy不能設置為none。圖形界面設置位置見圖2。
如果需要優化的信號在IP核內部那么在布局完成后使用下面的命令phys_opt_design -force_replication_on_nets [get_nets net_name]來保證IP核取消對內部網絡的保護,能夠正常復制高扇出網絡。
圖1.寄存器復制示意圖
圖2.flatten_hierarchy設置位置
max_fanout 的使用形式
1. verilog綜合屬性設置:(*MAX_FANOUT = 50 *) reg test;
這里的綜合屬性必須設置在要降低扇出的寄存器前面,否則一定不會按照設計者意圖綜合。這種方法缺點是不能作用于IP核內部的某個信號。
2.set_property MAX_FANOUT 50 [get_nets {test}]或者
set_property MAX_FANOUT 50 [get_cells {test_r}]
注意get_cells選中的必須是要求編譯器復制它來降低扇出的寄存器,因為verilog代碼里面和最終實現的電路里面的寄存器名字很可能不一樣,所以建議綜合完成后在原理圖里面去找到對應寄存器,然后復制他的名字,這樣就不會弄錯。很多時候讀者使用命令的時候cells的名字就弄錯了!用get_nets命令也一樣最好去原理圖里面找對應的網絡,復制名字。xdc約束可以作用于IP核內部的某個信號。
max_fanout 的參數意義
(*MAX_FANOUT = 50 *) reg test;里面的參數就只有一個——50,網絡扇出超過50就會復制一個,保證每個復制的寄存器下面的扇出都不超過此參數。xdc約束也一樣,不再敖述。
注意,圖1的綜合設置里面有-fanout_limit這個參數,并且默認是10000。這里是約束全局扇出的,但是max_fanout命令的優先級會高于這里的設置參數。所以編譯器會優先按照你的綜合屬性或者XDC約束來進行優化。
-
寄存器
+關注
關注
31文章
5317瀏覽量
120007 -
編譯器
+關注
關注
1文章
1618瀏覽量
49051
原文標題:max_fanout命令的正確打開方式
文章出處:【微信號:HaveFunFPGA,微信公眾號:玩兒轉FPGA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論