器的復制(set_register_replication命令))
相關閱讀Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482目錄簡介手動觸發(fā)器復制指定觸發(fā)器列表/集合指定最大扇出數(shù)量指定復制后數(shù)量指定復制包含扇入邏輯指定復制包含扇出邏輯指定由原始觸發(fā)器驅(qū)動指定是否啟動觸發(fā)器復制自動觸發(fā)器復制邊界優(yōu)化不進行觸發(fā)器復制的情況寫在最后簡介其實在下面這篇關于Formality的文章中筆者已經(jīng)介紹了觸發(fā)器的復制但僅提了一句“在某些情況下Design Compiler可能為了性能而復制觸發(fā)器”本文旨在詳細討論Design Compiler對觸發(fā)器復制的優(yōu)化方式。Formality時序變換五觸發(fā)器復制https://chenzhang.blog.csdn.net/article/details/145521510復制觸發(fā)器可以提高時序結果質(zhì)量(QoR)、擁塞和扇出問題要在線負載模式或拓撲模式下啟用手動觸發(fā)器復制可以使用set_register_replication命令該命令會在指定的時序單元上設置register_splitting屬性和register_replication屬性從而允許對這些對象進行觸發(fā)器復制要在拓撲模式下啟用自動觸發(fā)器復制可以使用compile_register_replication變量默認值為false。手動觸發(fā)器復制set_register_replication命令的BNF范式有關BNF范式可以參考以往文章為set_register_replication object_list [-max_fanout max_fanout_value | -num_copies copy_value] [-include_fanin_logic cell] [-include_fanout_logic cell] [-driven_by_original_register end_points_list] [-replicate replicate_switch] //注該命令的選項和參數(shù)順序任意指定觸發(fā)器列表/集合指定一個觸發(fā)器列表/集合包含觸發(fā)器對象。對于列表而言如果有多于一個對象需要使用引號或大括號包圍對使用集合無效關于列表和集合的區(qū)別可以參考下面的博客。SDC命令詳解使用集合(Collection)而不是字符串(String)/列表(List)作為命令參數(shù)https://chenzhang.blog.csdn.net/article/details/147144571指定最大扇出數(shù)量-max_fanout選項指定了觸發(fā)器復制后每個觸發(fā)器如果使用了-include_fanout_logic選項選項則還包括組合邏輯單元的最大扇出數(shù)量是一個大于等于1的整數(shù)值。需要注意的是這里的扇出數(shù)量與set_max_fanout命令中扇出負載的概念是不一樣的扇出負載可以是小數(shù)而扇出數(shù)量只由引腳/輸出端口數(shù)量決定。Design Compiler會盡量均衡每個觸發(fā)器的扇出數(shù)量例如指定-max_fanout為8而原始觸發(fā)器的扇出數(shù)量為17則復制后觸發(fā)器的扇出數(shù)量為6, 6, 5。-max_fanout選項和-num_copies選項不能同時使用。下面以圖1為例展示了該選項的基本使用方式。圖1 綜合前設計dcnxt_shell set_register_replication -max_fanout 3 [get_cells t_reg]圖2展示了這種情況下的綜合結果。圖2 綜合后設計對應圖1register_replication_naming_style變量默認值為%s_rep%d決定了新增觸發(fā)器/組合邏輯單元的名字字符串值必須包含%d表示原始觸發(fā)器/組合邏輯單元的名字可以包含%s表示編號。指定復制后數(shù)量-num_copies選項指定了觸發(fā)器復制后的數(shù)量是一個大于等于2的整數(shù)值。需要注意的是如果觸發(fā)器復制后的數(shù)量超過了讓每個觸發(fā)器的扇出數(shù)量為1的限制則以實際情況為準例如指定-num_copies為10但原始觸發(fā)器的扇出數(shù)量為6則觸發(fā)器只會復制5次而不是9次。Design Compiler會盡量均衡每個觸發(fā)器的扇出數(shù)量例如指定-num_copies為3而原始觸發(fā)器的扇出數(shù)量為17則復制后觸發(fā)器的扇出數(shù)量為6, 6, 5。-max_fanout選項和-num_copies選項不能同時使用。下面以圖1為例展示了該選項的基本使用方式。dcnxt_shell set_register_replication -num_copies 2 [get_cells t_reg]圖3展示了這種情況下的綜合結果。圖3 綜合后設計對應圖1從2018版本開始手動觸發(fā)器復制得到了增強考慮圖4所示的情況。圖4 綜合前設計dcnxt_shell set_register_replication -num_copies 2 [get_cells t_reg x1_reg] // 如果使用兩條命令分別設置兩個觸發(fā)器結果是一樣的且與命令的前后順序無關圖5展示了這種情況下的綜合結果。圖5 綜合后設計對應圖4在之前的版本中只有觸發(fā)器t_reg會得到復制因為對于原始觸發(fā)器而言x1_reg的扇出數(shù)量為1現(xiàn)在的Design Compiler可以先完成觸發(fā)器t_reg的復制再完成觸發(fā)器x1_reg的復制。指定復制包含扇入邏輯-include_fanin_logic選項用于指定觸發(fā)器復制過程中同時復制觸發(fā)器以指定組合邏輯單元為起點的扇入邏輯錐。需要注意的是只能指定一個組合邏輯單元且該組合邏輯單元只擁有唯一一條通向觸發(fā)器的路徑否則會報錯。如果使用了-include_fanin_logic選項則觸發(fā)器列表/集合中只能指定一個觸發(fā)器。下面以圖6為例展示了該選項的基本使用方式。圖6 綜合前設計dcnxt_shell set_register_replication -num_copies 2 -include_fanin_logic [get_cells x1] [get_cells t_reg]圖7展示了這種情況下的綜合結果。圖7 綜合后設計對應圖6如果使用了-include_fanin_logic選項扇入邏輯錐中的組合邏輯單元及新增/原始觸發(fā)器會被設置size only屬性確保其不會在綜合過程中被優(yōu)化掉需要注意的是此時的size_only屬性是隱式設置的這與使用set_size_only命令顯式設置不同無法使用report_attribute命令或get_attribute命令直接查看而只能使用report_cell命令或report_size_only命令間接查看隱式size_only屬性的優(yōu)先級高于顯式size_only屬性使用list_size_only_types命令可以列出葉單元被設置size_only屬性的原因顯式或隱式。指定復制包含扇出邏輯-include_fanout_logic選項用于指定觸發(fā)器復制過程中同時復制觸發(fā)器以指定組合邏輯單元為終點的扇出邏輯錐這是因為有些情況下扇出瓶頸點(chokepoint)不是觸發(fā)器的輸出而是其扇出邏輯錐中的某個組合邏輯單元。需要注意的是只能指定一個組合邏輯單元且觸發(fā)器只擁有唯一一條通向該組合邏輯單元的路徑否則會報錯。下面以圖8為例展示了該選項的基本使用方式。圖8 綜合前設計dcnxt_shell set_register_replication -num_copies 2 -include_fanout_logic [get_cells x1] [get_cells t_reg]圖9展示了這種情況下的綜合結果。圖9 綜合后設計對應圖8從2019版本開始-include_fanout_logic選項得到了增強觸發(fā)器列表/集合中可以指定多個觸發(fā)器要求觸發(fā)器都只擁有唯一一條通向該組合邏輯單元的路徑考慮圖10所示的情況。圖10 綜合前設計dcnxt_shell set_register_replication -num_copies 2 -include_fanout_logic [get_cells x2] [get_cells t_reg x1_reg]圖11展示了這種情況下的綜合結果。圖11 綜合后設計對應圖10需要注意的是使用該功能要求在觸發(fā)器列表/集合中同時指定多個觸發(fā)器而不能先后指定如下所示。dcnxt_shell set_register_replication -num_copies 2 -include_fanout_logic [get_cells x2] [get_cells t_reg] dcnxt_shell set_register_replication -num_copies 2 -include_fanout_logic [get_cells x2] [get_cells x1_reg]圖12展示了這種情況下的綜合結果。圖12 綜合后設計對應圖10如果使用了-include_fanout_logic選項扇出邏輯錐中的組合邏輯單元及新增/原始觸發(fā)器會被設置size only屬性確保其不會在綜合過程中被優(yōu)化掉需要注意的是此時的size_only屬性是隱式設置的這與使用set_size_only命令顯式設置不同無法使用report_attribute命令或get_attribute命令直接查看而只能使用report_cell命令或report_size_only命令間接查看隱式size_only屬性的優(yōu)先級高于顯式size_only屬性使用list_size_only_types命令可以列出葉單元被設置size_only屬性的原因顯式或隱式。指定由原始觸發(fā)器驅(qū)動從2018版本開始-driven_by_original_register選項可以指定一個路徑終點列表/集合包含觸發(fā)器對象或輸出端口對象只有這些對象在寄存器復制后將由原始觸發(fā)器驅(qū)動因此原始觸發(fā)器可能不滿足最大扇出數(shù)量的要求下面以圖1為例展示了該選項的基本使用方式。dcnxt_shell set_register_replication -max_fanout 3 -driven_by_original_register [get_ports q1 q2 q3 q4][get_cells t_reg]圖13展示了這種情況下的綜合結果。圖13 綜合后設計對應圖1-driven_by_original_register選項不能與-include_fanin_logic選項或-include_fanout_logic選項一起使用。指定是否啟動觸發(fā)器復制從2022版本開始-replicate選項指定是否開啟觸發(fā)器復制默認為true當其設置為false時將忽略其它選項并刪除觸發(fā)器列表/集合中指定觸發(fā)器的register_replication屬性并將register_splitting屬性設置為false經(jīng)過筆者測試該選項和-include_fanin_logic選項或-include_fanout_logic選項似乎又不兼容的問題這可能是個bug。自動觸發(fā)器復制拓撲模式的Design Compiler可以進行布局感知的自動觸發(fā)器復制有助于減少擁塞兩種方法可以啟用該功能。1、將compile_register_replication變量默認值為default設置為true后使用compile_ultra命令進行綜合。2、保持compile_register_replication變量為默認值default并使用compile_ultra -spg命令進行綜合。register_replication_naming_style變量默認值為%s_rep%d決定了新增觸發(fā)器/組合邏輯單元的名字字符串值必須包含%d表示原始觸發(fā)器/組合邏輯單元的名字可以包含%s表示編號。邊界優(yōu)化手動觸發(fā)器復制和自動觸發(fā)器復制默認情況下不能跨越層次結構因為這會導致子設計引腳增加如果在開啟邊界優(yōu)化的基礎上將compile_register_replication_across_hierarchy變量默認值為false設置為true則觸發(fā)器復制可以跨越層次結構下面給出了一個例子。圖14 綜合前設計如果使用compile_ultra -no_boundary_optimization命令進行綜合禁止邊界優(yōu)化則觸發(fā)器復制不會發(fā)生如果使用compile_ultra -no_autoungroup命令進行綜合禁止自動解組且將compile_register_replication_across_hierarchy變量設置為true則綜合結果如圖15所示。圖15 綜合后設計對應圖14不進行觸發(fā)器復制的情況1、被設置dont_touch屬性的觸發(fā)器不進行觸發(fā)器復制。2、重定時(Retiming)觸發(fā)器不進行觸發(fā)器復制。3、掃描單元已連接的設計不進行觸發(fā)器復制。4、多比特(Multibit)觸發(fā)器不進行觸發(fā)器復制。5、使用set_register_replication命令時使用了-include_fanin_logic選項或-include_fanout_logic選項且邏輯錐中存在被設置了dont_touch屬性的組合邏輯單元不進行觸發(fā)器復制如果是先使用set_register_replication命令后設置dont_touch屬性則觸發(fā)器復制可以進行這可能是個bug。6、使用set_register_replication命令時使用了-include_fanin_logic選項或-include_fanout_logic選項且邏輯錐跨越了層次結構不進行觸發(fā)器復制。7、當compile_register_replication_do_size_only變量默認值為true被設置為false時如果觸發(fā)器被設置顯式size_only屬性通過set_size_only命令時不進行觸發(fā)器復制。8、當compile_enable_register_replication_without_reset_pin變量默認值為true被設置為false時該變量在2024版本引入不帶復位/置位端的觸發(fā)器不會被復制因為原始觸發(fā)器和新增觸發(fā)器的初始狀態(tài)可能會不同可能導致仿真問題。寫在最后Design Compiler NXT在2022版本推出了report_transformed_registers命令該命令可以報告工具在優(yōu)化過程中對寄存器包括觸發(fā)器和鎖存器進行的所有變換詳細內(nèi)容可以參考下面的博客。SDC命令詳解使用report_transformed_registers命令進行報告https://blog.csdn.net/weixin_45791458/article/details/158101563?sharetypeblogdetailsharerId158101563sharereferPCsharesourceweixin_45791458spm1011.2480.3001.8118