我們先看UG949中舉的例子:
時(shí)序場(chǎng)景如下圖所示,clk0和clk1兩個(gè)時(shí)鐘輸入,經(jīng)過(guò)BUFGMUX后,輸出到后面的邏輯,但同時(shí)clk0和clk1還分別驅(qū)動(dòng)了其他邏輯。
此時(shí),如果路徑A/B/C都不存在,其中A路徑表示clk0與選擇器輸出的時(shí)鐘之間的數(shù)據(jù)交互,B路徑表示clk1與選擇器輸出的時(shí)鐘之間的數(shù)據(jù)交互,C路徑表示clk0和clk1之間的數(shù)據(jù)交互,那么使用下面的約束就可以了:
set_clock_groups-logically_exclusive-groupclk0-groupclk1
如果clk0和clk1之間有數(shù)據(jù)交互,則需要使用下面的約束:
create_generated_clock-nameclk0mux-divide_by1 -source[get_pinsmux/I0][get_pinsmux/O] create_generated_clock-nameclk1mux-divide_by1 -add-master_clockclk1 -source[get_pinsmux/I1][get_pinsmux/O] set_clock_groups-physically_exclusive-groupclk0mux-groupclk1mux
這里我們解釋一下logically_exclusive和physically_exclusive的區(qū)別:
-logical_exclusive
logical_exclusiveisusedfortwoclocksthataredefinedondifferentsourceroots. Logicallyexclusiveclocksdonothaveanyfunctionalpathsbetweenthem,butmighthavecouplinginteractionswitheachother. Anexampleoflogicallyexclusiveclocksismultipleclocks,whichareselectedbyaMUXbutcanstillinteractthroughcouplingupstreamoftheMUXcell. Whentherearephysicallyexistingbutlogicallyfalsepathsbetweenthetwoclocks,use"set_clock_groups-logical_exclusive".
-physical_exclusive
physical_exclusiveisusedfortwoclocksthataredefinedonthesamesourcerootby"create_clock-add". Timingpathsbetweenthesetwoclocksdonotphysicallyexist. Asaresultyouwillneedtouse"set_clock_groups-physical_exclusive"tosetthemasfalsepaths.
簡(jiǎn)而言之,logical_exclusive用于選擇器的電路,兩個(gè)時(shí)鐘的source不一樣;而physical_exclusive兩個(gè)時(shí)鐘的source是一樣,比如在同一個(gè)時(shí)鐘輸入口,但可能會(huì)輸入兩個(gè)不同的時(shí)鐘。
下面我們來(lái)看下為什么要這樣約束。
我們先來(lái)復(fù)習(xí)一下set_clock_groups的用法,set_clock_groups后面可以加的參數(shù)有三個(gè),除了logically_exclusive和physically_exclusive,還有我們最常用的-asynchronous,無(wú)論后面是哪個(gè)參數(shù),set_clock_groups就是讓工具不去分析我們后面約束的時(shí)鐘組,只是這三個(gè)參數(shù)的應(yīng)用場(chǎng)景略有不同。
在第一個(gè)場(chǎng)景中,clk0和clk1之間沒(méi)有數(shù)據(jù)交互,因此工具不需要分析它們之間的路徑,而且它們后面有時(shí)鐘選擇器,符合logical_exclusive的使用場(chǎng)景,因此約束是
set_clock_groups-logically_exclusive-groupclk0-groupclk1
在第二個(gè)場(chǎng)景中,clk0和clk1之間是有數(shù)據(jù)交互的,就不能直接把這個(gè)時(shí)鐘設(shè)置clock group,但經(jīng)過(guò)MUX之后的時(shí)鐘,只會(huì)有一個(gè)存在,這兩個(gè)時(shí)鐘之間肯定是不存在交互的,所以這兩個(gè)時(shí)鐘需要設(shè)置clock group,而這兩個(gè)時(shí)鐘有same source root,因此使用的參數(shù)是physical_exclusive。
有同學(xué)可能會(huì)問(wèn),對(duì)于第一個(gè)場(chǎng)景,MUX之后的時(shí)鐘也是只存在一個(gè),為什么不需要再分別generate clock,然后設(shè)置physical_exclusive呢?
我個(gè)人理解,這就跟時(shí)鐘傳播有關(guān)系,什么情況下時(shí)鐘不向后傳播:
Thesourcelatencypathsdonotflowthroughsequentialelementclockpins,transparentlatchdatapins,orsourcepinsofothergeneratedclocks.
選擇器既不是sequential element,也不是latch,因此只要我們后面沒(méi)有create generated clock,那么時(shí)序路徑就可以繼續(xù)向后傳播,我們已經(jīng)設(shè)置了前面的兩個(gè)時(shí)鐘的logically_exclusive,因此后面的電路,只要時(shí)鐘路徑?jīng)]有斷,那就都存在logically_exclusive。
需要注意一點(diǎn):create_clock或者create_generated_clock之后,原來(lái)在當(dāng)前點(diǎn)傳播的clk不在向后傳播
因此,針對(duì)上面的電路,假設(shè)clk0和clk1之間有數(shù)據(jù)交互,我們還可以用下面的方法約束:
在pinI0和pinI1處,我們create一個(gè)generated_clock,這樣clk0和clk1就不再向mux傳播,但FD0和FD1仍然是clk0和clk1所在的時(shí)鐘路徑。(下面默認(rèn)clk0和clk1已經(jīng)create)
create_generated_clock-nameclk_I0 [get_pinsmux/I0] -master_clockclk0 -divide_by1 -source[get_portspinclk0] -add create_generated_clock-nameclk_I1 [get_pinsmux/I1] -master_clockclk1 -divide_by1 -source[get_portspinclk1] -add set_clock_groups-logically_exclusive-groupclk_I0-groupclk_I1
在網(wǎng)上還看到有個(gè)說(shuō)法,而且已經(jīng)經(jīng)過(guò)了DC工具的驗(yàn)證:set_clock_groups的三個(gè)參數(shù)asynchronous、logically_exclusive和physically_exclusive的實(shí)際作用是一樣的,都是設(shè)成異步,因此上面的約束中,這三個(gè)參數(shù)可以隨便用。
但是既然工具給出了三種參數(shù)的使用場(chǎng)景,那我們就應(yīng)該按照?qǐng)鼍皝?lái)使用這三個(gè)參數(shù)。
審核編輯:湯梓紅
-
時(shí)鐘
+關(guān)注
關(guān)注
10文章
1720瀏覽量
131364 -
約束
+關(guān)注
關(guān)注
0文章
82瀏覽量
12718 -
選擇器
+關(guān)注
關(guān)注
0文章
106瀏覽量
14523
原文標(biāo)題:經(jīng)過(guò)BUFGMUX的時(shí)鐘該如何約束(更新)
文章出處:【微信號(hào):傅里葉的貓,微信公眾號(hào):傅里葉的貓】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論