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