上面已經(jīng)把DAC7512控制器中所有的時鐘都創(chuàng)建好了,。下面我們再額外討論一下關(guān)于時鐘屬性方面的一些問題和在做時序分析時的處理方法,。 對于具有單一時鐘的系統(tǒng),設(shè)計和時序分析都相對簡單,。但是現(xiàn)在很多設(shè)計都有多個甚至幾十個時鐘乃至更多的時鐘,。比如說DAC7512控制器,在設(shè)計中用到的時鐘實際上是有3個,,CLK25M,,CLK50M和DA_SCLK。在對多時鐘設(shè)計進行時序分析的時候,,我們首先要搞清楚各時鐘之間的關(guān)系,。 當設(shè)計中有多個時鐘時,時鐘之間可能存在三種關(guān)系,,分別是同步,,異步和互斥,。 如果兩個或者多個時鐘具有相同的source和固定的相位差,,那么這些時鐘是同步時鐘。在DAC7512的控制器里,,CLK25M,,CLK50M和DA_SCLK的source都是CLK_IN,所以可以認為他們?nèi)齻€是同步的,。 如果兩個或者多個時鐘之間沒有任何關(guān)系,,則稱之為異步時鐘,。比如說CLKA來源于晶振A,而CLKB來源于其他系統(tǒng)的輸入,,CLKA和CLKB就為異步時鐘,。對于異步時鐘來講,兩個時鐘域的時鐘沿有可能在任意時刻出現(xiàn),,相互之間不會有任何關(guān)系,。如果一條timing path的起始點是在CLKA,而終點在CLKB,,即這條timing path跨越了CLKA和CLKB兩個時鐘域,,那么STA軟件是不會對該timing path做分析的。實際上這等同于在這兩個時鐘之間設(shè)定了一條false path,。 如果兩個時鐘不會相互作用,,那么稱這兩個時鐘為互斥的。舉個例子來講,,PCIE GEN2可以工作在GEN1和GEN2兩種模式,,在GEN1模式下,時鐘為125MHz,,在GEN2的模式下,,時鐘為250MHz,但在某一個特定時間里,,時鐘只可能為125MHz或者250MHz,,這兩個頻率的時鐘不會共存,相互之間也不會有相互作用,。 下圖給出了時鐘的三種關(guān)系的例子,。 做時序分析時,在創(chuàng)建好所有的時鐘后,,需要定義這些時鐘之間的關(guān)系,。我們可以把同步時鐘放到一個group中,然后在定義時鐘之間的關(guān)系時,,可以使用group來定義,。在默認情況下,TimeQuest認為設(shè)計中所有的時鐘都是同步的,,并把所有的時鐘都放在同一個group里,。如果設(shè)計中有異步時鐘,就需要用命令把異步時鐘分組并定義出來,。 在TimeQuest里,,我們用set_clock_groups來定義時鐘的group。下面是命令的語法,更詳細的說明請參照quartusII的幫助系統(tǒng),。
在DAC7512控制器里,,CLK25M,CLK50M和DA_SCLK三個時鐘是同步時鐘,。默認情況下,,它們已經(jīng)被軟件放到了同一個group里,所以我們不需要對其做任何的處理,。 但假設(shè)CLK25M屬于一個group,,而CLK50M和DA_SCLK屬于另外一個group,我們就要用set_clock_groups命令把二者設(shè)為異步時鐘,,命令如下: set_clock_groups -asynchronous -group {CLK25M} -group {CLK50M DA_SCLK} 我們對比一下把CLK25M設(shè)定為CLK50M的異步時鐘前后TimeQuest對時序分析的處理情況來看這個命令的作用,。下面是在添加這個命令前后TimeQuest中Report clock transfer的結(jié)果。 在沒有添加這個命令前,,軟件默認三個時鐘都是同步時鐘,,所以會分析并報告出三個時鐘之間所有的timing path。 在添加這個命令以后,,軟件認為CLK25M和CLK50M/DA_SCLK是異步時鐘,,所以就直接將CLK25M和CLK50M/DA_SCLK之間的timing path設(shè)為false path。不再做更多的分析,。 那如果我們假設(shè)CLK25M和CLK50M是互斥時鐘的話,,又會是什么情況呢?用下面的命令將CLK25M和CLK50M設(shè)為互斥時鐘: set_clock_groups -exclusive -group {CLK25M} -group {CLK50M} 還是看TimeQuest中Report clock transfer的結(jié)果,,可以發(fā)現(xiàn)CLK25M和CLK50M之間的timing path都被設(shè)定為false path了,。 再看一下關(guān)于Clock uncertainty的知識 簡單的說,Clock uncertainty是指時鐘邊沿實際到達時間與理論到達時間之間的差異和變化,。在做時序分析的時候,,是需要加上clock uncertainty來計算timing path的延時的。Clock uncertainty的大小是比較難確定的,,在ASIC設(shè)計中,,clock uncertainty的值往往要根據(jù)所使用的工藝,以往項目的經(jīng)驗等各種因素來決定,。但在FPGA的設(shè)計中,,我們能參考的資料不多,特別是對于PLL輸出的時鐘,,因為我們對PLL本身的參數(shù)并不是非常的了解,,所以很難給出合適的clock uncertainty的值。 在FPGA設(shè)計中定義PLL的時候,,我們要定義參考時鐘的精度,,這會直接影響到PLL輸出時鐘的clock uncertainty的值,。如下圖所示,,25.000MHz即為輸入基準時鐘的精度,。 有了輸入時鐘的精度,TimeQuest會根據(jù)PLL本身的屬性,,自動計算出各輸出時鐘的uncertainty值,。如果要在設(shè)計中由軟件加入clock uncertainty的值,可以使用下面的命令: derive_clock_uncertainty 除非你對系統(tǒng)的時鐘有充分的理解并確切知道時鐘的屬性,,否則不建議使用set_clock_uncertainty命令直接定義FPGA中各時鐘的uncertainty屬性,。推薦使用derive_clock_uncertainty命令由軟件自動計算并添加。 |
|