在常規(guī)非DFX(DynamicFunction eXchange)的Vivado設(shè)計(jì)中,我們可能會(huì)碰到給某一個(gè)指定的模塊添加特定的約束。這時(shí)一個(gè)簡(jiǎn)單的方法就是將這些約束單獨(dú)寫(xiě)在一個(gè).xdc或.tcl文件中,然后將其添加到Vivado工程中,并將該約束文件的屬性SCOPE_TO_CELLS設(shè)定為目標(biāo)模塊。如果該模塊在設(shè)計(jì)中被多次實(shí)例化,不管這些實(shí)例化模塊在設(shè)計(jì)中的層次如何,此時(shí)可設(shè)置該約束文件的屬性SCOPE_TO_REF,如下圖所示。這里我們就能理解對(duì)于一個(gè)cell其屬性NAME和REF_NAME的區(qū)別:前者是實(shí)例化后的名字,后者為引用名(可以理解為Verilog的module name或VHDL的entityname)。另外,需要特別注意的是使用上述方法時(shí),在.xdc或.tcl文件中的約束其施加的對(duì)象是以該指定模塊作為頂層的而不是以實(shí)際工程的頂層作為頂層。如果采用Non-Project模式,那么可以通過(guò)read_xdc讀入約束文件,然后通過(guò)set_property命令指定約束文件的屬性SCOPE_TO_CELLS或者SCOPE_TO_REF。
在DFX設(shè)計(jì)中,我們也會(huì)碰到類(lèi)似的情形,即給同一個(gè)RP(Reconfigurable Partition)下的不同RM(Reconfigurable Module)添加不同的約束。這時(shí)要考慮幾個(gè)因素:同一個(gè)RP下不管有幾個(gè)RM,在設(shè)計(jì)中均對(duì)應(yīng)同一個(gè)實(shí)例化的名字。這意味著不能僅僅通過(guò)SCOPE_TO_CELLS將這些約束對(duì)應(yīng)到不同的RM上。另外,每個(gè)RM只有在自身對(duì)應(yīng)的configuration上才有效,所以要保證在這個(gè)configuration上對(duì)應(yīng)的RM的約束也要有效。從下圖可以看到,當(dāng)前這個(gè)DFX設(shè)計(jì)中有一個(gè)RP,名字為圖中紅色方框所示,該RP下有兩個(gè)RM,分別為rp1rm1和rp1rm2。
基于上圖所示DFX設(shè)計(jì),現(xiàn)在我們要分別對(duì)rp1rm1和rp1rm2添加不同的約束。這里我們先介紹一下DFX設(shè)計(jì)的約束管理模式。在DFX設(shè)計(jì)中,約束是按configuration分組的。這是因?yàn)椴煌腸onfiguration對(duì)應(yīng)不同的RM。但不管有幾個(gè)configuration,都會(huì)有主約束,也就是ParentRun對(duì)應(yīng)的約束,默認(rèn)在constrs_1下。主約束包括:頂層IO約束(管腳分配/電平設(shè)置/input delay/output delay)、全局時(shí)鐘周期約束和每個(gè)RP的Pblock信息。主約束在運(yùn)行Parent Run時(shí)生效,并在運(yùn)行結(jié)束之后鎖定靜態(tài)區(qū)時(shí)一同被鎖定,因此,后續(xù)的ChildRun會(huì)直接獲得這些約束信息不需要重寫(xiě)一遍。默認(rèn)情況下,Child Run并沒(méi)有單獨(dú)的ConstraintSet,也就沒(méi)有單獨(dú)的約束文件。如果要針對(duì)RM施加約束,而RM又出現(xiàn)在Child Run,就要建立新的Constraint Set,這需要如下幾個(gè)步驟完成。
第一步:創(chuàng)建與指定RM相關(guān)的約束,這些約束應(yīng)放在單獨(dú)的.xdc文件中。
第二步:創(chuàng)建新的Constraint Set,并將第一步創(chuàng)建的約束文件添加到該Constraint Set下。
除了Parent Run之外,有幾個(gè)ChildRun,如果這些Child Run里的RM又需要單獨(dú)約束,那么就要?jiǎng)?chuàng)建幾個(gè)Constraint Set。創(chuàng)建ConstraintSet的方法如下圖所示。
第三步:運(yùn)行DFX Wizard到EditConfiguration Runs界面,如下圖所示。在對(duì)應(yīng)的Constraints列選擇相應(yīng)的Constraint Set,如圖中紅色方框所示。
在Design Run窗口中就能看到相應(yīng)的ChildRun對(duì)應(yīng)的Constraint Set,如下圖中的紅色方框所示。如果沒(méi)生效,要確保ChildRun的Property APPLY_CONSTRSET被勾選。
上述過(guò)程針對(duì)的是Vivado Project模式。在Non-Project模式下,當(dāng)運(yùn)行rp1rm2對(duì)應(yīng)的Configuration時(shí),要先打開(kāi)鎖定靜態(tài)區(qū)布線信息的dcp(在這個(gè)dcp中,RP均為黑盒子),然后加載對(duì)rp1rm2OOC綜合生成的dcp,這個(gè)過(guò)程結(jié)束之后即可通過(guò)read_xdc讀入針對(duì)rp1rm2的約束文件。
針對(duì)RM的約束文件,通常要設(shè)定以下幾個(gè)屬性:PROCESSING_ORDER,SCOPED_TO_CELLS和USED_IN,如圖中紅色方框所示。
-
文件
+關(guān)注
關(guān)注
1文章
561瀏覽量
24671 -
命令
+關(guān)注
關(guān)注
5文章
676瀏覽量
21965 -
約束
+關(guān)注
關(guān)注
0文章
82瀏覽量
12708 -
Vivado
+關(guān)注
關(guān)注
19文章
804瀏覽量
66224
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論