電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 43|回復(fù): 0
收起左側(cè)

【芯片設(shè)計(jì)】從RTL到GDS(五):時(shí)序分析

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
匿名  發(fā)表于 2024-9-6 12:02:00 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本篇文章將給大家?guī)?lái)時(shí)序分析相關(guān)的東西。

課程大綱如下所示:

1、Sequential Clocking對(duì)于絕大部分?jǐn)?shù)字電路而言,其都采用同步電路的設(shè)計(jì)方法。這種設(shè)計(jì)方法基于寄存器為主體,描述數(shù)據(jù)在寄存器和寄存器之間的傳輸。因此描述其的語(yǔ)言也被稱(chēng)為RTL,即寄存器傳輸級(jí)。同步電路可以消除組合邏輯中的競(jìng)爭(zhēng)冒險(xiǎn),此外設(shè)計(jì)相對(duì)簡(jiǎn)單,EDA工具支持良好,因此目前普遍采用該方式。我們假定所有的寄存器都是D-Flip Flops,時(shí)鐘上升沿觸發(fā)。其有以下幾個(gè)關(guān)鍵的指標(biāo)。

首先就是tcq。其描述了在時(shí)鐘上升沿到達(dá)以后,數(shù)據(jù)多久才可以從D端到達(dá)Q端,為什么不叫tdq呢?因?yàn)镃LK實(shí)際上才是數(shù)據(jù)的開(kāi)關(guān),其上升沿以后數(shù)據(jù)才開(kāi)始從D端流動(dòng)到Q端。
學(xué)過(guò)數(shù)字電路都知道,實(shí)際的電路不是理想的,不可能時(shí)鐘上升沿一到來(lái),出口數(shù)據(jù)就發(fā)生了變化。具體的時(shí)序如下圖所示。

我們?cè)賮?lái)看一下什么是建立時(shí)間。大家可以簡(jiǎn)單的這么理解,對(duì)于寄存器而言,其有兩個(gè)工作狀態(tài),一個(gè)是高電平,一個(gè)是低電平。在低電平的時(shí)候,其入口是開(kāi)啟的,一旦進(jìn)入高電平,其會(huì)關(guān)閉自己的入口。
因此就需要你在入口開(kāi)啟之前將數(shù)據(jù)維持穩(wěn)定。同樣電路不是理想的,不可能說(shuō)你一穩(wěn)定,馬上就把你的數(shù)據(jù)采樣進(jìn)寄存器了,其需要一個(gè)時(shí)間,這個(gè)時(shí)間我們就可以理解成建立時(shí)間,其時(shí)序圖如下圖所示。

同樣的,當(dāng)電平為高電平的時(shí)候,入口會(huì)關(guān)閉。其關(guān)閉也不是馬上的,大家可以理解為開(kāi)門(mén)關(guān)門(mén),都是需要一個(gè)時(shí)間的。所以在關(guān)門(mén)的這段時(shí)間你的數(shù)據(jù)應(yīng)該維持不變,如果你的數(shù)據(jù)變了,那可以采樣到的數(shù)據(jù)就不是你希望的數(shù)據(jù)了。這個(gè)上升沿之后還需要維持?jǐn)?shù)據(jù)的時(shí)間,就是所謂的保持時(shí)間了。

基于上述的分析我們可以發(fā)現(xiàn)。在時(shí)鐘上升沿之前和上升沿之后,我們都需要數(shù)據(jù)維持在我們希望的那個(gè)數(shù)據(jù)上。這就引入了兩個(gè)概念,Max Delay和Min Delay。
什么是Max Delay呢?根據(jù)上面的描述我們知道,電路需要在時(shí)鐘上升沿的建立時(shí)間之前,將數(shù)據(jù)穩(wěn)定下來(lái)。那又為什么會(huì)出現(xiàn)數(shù)據(jù)不穩(wěn)定呢?那就是你在一個(gè)時(shí)鐘周期內(nèi),結(jié)果還沒(méi)算出來(lái),或者是還沒(méi)有傳到寄存器的入口處,這樣就出現(xiàn)了建立時(shí)間違例。
可以看到,建立時(shí)間違例和時(shí)鐘周期是緊密相關(guān)的。這就好比,你需要每個(gè)時(shí)鐘周期從一個(gè)門(mén)到另外一個(gè)門(mén),這里的一個(gè)個(gè)的門(mén)就是寄存器。你如果沒(méi)有在規(guī)定時(shí)間趕到,門(mén)就關(guān)上了,那自然也就出錯(cuò)了。
而什么是保持時(shí)間違例呢?那就是上面說(shuō)的數(shù)據(jù)沒(méi)有維持住,在時(shí)鐘上升沿以后過(guò)了一下下就變了。為什么沒(méi)有維持。恳?yàn)閿?shù)據(jù)更新的太快了,這就好比你和另外一個(gè)人都需要從一個(gè)門(mén)到另外一個(gè)門(mén)。按理來(lái)說(shuō)你始終比他領(lǐng)先一個(gè)門(mén),但你趕在關(guān)門(mén)之前到了某一個(gè)門(mén),他突然一下就到了你面前,這個(gè)時(shí)候你們誰(shuí)過(guò)去呢?這就出現(xiàn)了數(shù)據(jù)亞穩(wěn)態(tài)。
為什么會(huì)有上述的原因?可能是因?yàn)槟愫竺婺莻(gè)人走了捷徑,或者是跑的太快了。對(duì)應(yīng)到數(shù)字電路就是其data path太短了?梢钥吹,建立時(shí)間違例跟時(shí)鐘周期沒(méi)有關(guān)系。

我們結(jié)合實(shí)際的電路去理解上述的概念。在時(shí)鐘上升沿到來(lái)以后,經(jīng)過(guò)tcq" role="presentation" style="display: inline-block;line-height: normal;word-spacing: normal;overflow-wrap: normal;float: none;direction: ltr;max-width: none;max-height: none;min-width: 0px;min-height: 0px;border-width: 0px;border-style: initial;border-color: initial;">???的時(shí)間,數(shù)據(jù)呈現(xiàn)在寄存器的Q端,然后又需要經(jīng)過(guò)組合邏輯,到達(dá)另外一個(gè)寄存器的D端。其本質(zhì)上我們可以看作一個(gè)跑步競(jìng)賽。
數(shù)據(jù)必須在下一個(gè)時(shí)鐘上升沿的建立時(shí)間之前,到達(dá)下一個(gè)寄存器的D端。我們將其稱(chēng)為發(fā)射和捕獲。

我們?cè)偌?xì)化一下上面的概念,根據(jù)下面的電路圖,很顯然可以劃分為兩條路徑。一個(gè)是Capture Path即捕獲路徑,一個(gè)是Launch Path即發(fā)射路徑。下一個(gè)時(shí)鐘上升沿到來(lái)之前,這個(gè)寄存器的輸入端必須是已經(jīng)穩(wěn)定了的數(shù)據(jù)。大家可以類(lèi)比上面的關(guān)門(mén)例子。
通常來(lái)說(shuō),如果發(fā)生建立時(shí)間違例,通常都是組合邏輯太長(zhǎng)導(dǎo)致的,組合邏輯太長(zhǎng),導(dǎo)致數(shù)據(jù)沒(méi)辦法在下一個(gè)時(shí)鐘上升沿之前到達(dá)R2寄存器的D端,數(shù)據(jù)走的太慢了!因此用了一只烏龜作為示例,根據(jù)下圖我們也可以得出這個(gè)結(jié)論。

我們?cè)賮?lái)看一下保持時(shí)間帶來(lái)的約束。我們也將其稱(chēng)為Min Delay。值得注意的是,此時(shí)兩個(gè)寄存器看到的都是同一個(gè)時(shí)鐘上升沿,出現(xiàn)保持時(shí)間違例的關(guān)鍵在于數(shù)據(jù)到的太快了,B寄存器還沒(méi)有把門(mén)關(guān)上,你就到了,這不是希望看到的。我們可以結(jié)合下面的時(shí)序圖和電路圖來(lái)理解。
為什么會(huì)造成這個(gè)原因呢?基本上是因?yàn)椴季植季(xiàn)沒(méi)做的特別好,兩個(gè)寄存器太近了,中間也沒(méi)有什么組合邏輯。數(shù)據(jù)嗖的一下就到了另外一個(gè)寄存器。因?yàn)橛昧艘粋(gè)人跑步來(lái)做示例。Hold Violation其實(shí)很好解決。既然你走的太快了,那就中間插入一點(diǎn)不影響邏輯功能的邏輯,讓你走慢一點(diǎn),就好像插入一個(gè)緩沖帶;蛘呔妥屜乱患(jí)的時(shí)間到的早一點(diǎn),可以理解為讓門(mén)早點(diǎn)關(guān)上。(使用該方法要慎重,其相當(dāng)于人為引入clock skew,什么是clock skew后面再解釋?zhuān)?br />
綜上分析,我們可以得到下面的公式,其本質(zhì)就是描述數(shù)據(jù)到D的時(shí)間和時(shí)鐘到CLK的時(shí)間的關(guān)系。

我們來(lái)做一個(gè)總結(jié),其實(shí)簡(jiǎn)單來(lái)說(shuō)。關(guān)鍵是看兩個(gè)路徑,一個(gè)是數(shù)據(jù)什么時(shí)候到寄存器D端,一個(gè)是時(shí)鐘上升沿什么時(shí)候到寄存器的時(shí)鐘端口。

2、Static Timing Analysis接下來(lái)我們看一個(gè)非常重要的概念,靜態(tài)時(shí)序分析即STA。

靜態(tài)時(shí)序分析會(huì)將路徑視為一條一條的向量,如下圖的箭頭所示。然后檢查相應(yīng)的時(shí)間是否出現(xiàn)違例。其不會(huì)分析功能的正確性,其判斷的僅僅是時(shí)序。

我們來(lái)給時(shí)序路徑做一個(gè)定義。時(shí)序路徑包括一個(gè)起始點(diǎn),一個(gè)結(jié)束點(diǎn)。起始點(diǎn)有兩種情況,一個(gè)是整個(gè)設(shè)計(jì)的輸入端口,另外一個(gè)就是寄存器的Clock pin。而結(jié)束點(diǎn)的話(huà)為寄存器的輸入pin(不包括clock pins),或者是整個(gè)設(shè)計(jì)的輸出端口。因此一共就有2x2=4種情況。具體的我們往后接著看。

我們直接看下圖,靜態(tài)時(shí)序分析的路徑被劃分為四種。最最常見(jiàn)的是reg2reg。即從一個(gè)寄存器的CLK pin到另外一個(gè)寄存器的D(或者en) pin。

我們來(lái)看一下靜態(tài)時(shí)序分析的目標(biāo);诩s束條件,檢查max delay和min delay是否都符合規(guī)則。這里PPT講的不太清楚,我們往下接著看幾個(gè)實(shí)際的例子,就清楚了。


我們假定一個(gè)非常簡(jiǎn)單的邏輯,從ab到e。對(duì)于STA工具,會(huì)將其轉(zhuǎn)換為圖去分析。因此我們有很多節(jié)點(diǎn)和邊,如下圖所示。我們假設(shè)這個(gè)模塊就是整個(gè)設(shè)計(jì)了。從原始輸入到每個(gè)SP,我們認(rèn)為消耗時(shí)間為0。從EP到輸出,我們認(rèn)為消耗時(shí)間也是0。

對(duì)于時(shí)序分析而言,我們采用基于節(jié)點(diǎn)的分析方式,我們不會(huì)把每一條路徑都羅列出來(lái)。這樣當(dāng)節(jié)點(diǎn)增大的時(shí)候,會(huì)出現(xiàn)數(shù)據(jù)爆炸。相對(duì)的,我們基于節(jié)點(diǎn)分析,找到相對(duì)于該節(jié)點(diǎn)最差的路徑。
由此引出了兩個(gè)概念,一個(gè)是數(shù)據(jù)到達(dá)節(jié)點(diǎn)的時(shí)間,一個(gè)是數(shù)據(jù)應(yīng)該需要什么時(shí)候到達(dá)節(jié)點(diǎn)。如果到達(dá)節(jié)點(diǎn)的時(shí)間晚于需要到達(dá)的時(shí)間,則會(huì)出現(xiàn)時(shí)序違例。(我們?cè)谶@里只分析max delay,min delay暫時(shí)不談)

我們將逐級(jí)的分析ATs和RATs。下面這個(gè)圖還不是特別直觀,我們直接看個(gè)例子。


假設(shè)我們已經(jīng)有了下面的模型,時(shí)鐘周期是12的話(huà),下面這個(gè)電路是否滿(mǎn)足要求呢?我們基于上面的概念進(jìn)行分析。

首先,我們構(gòu)建好圖。下面的數(shù)字代表AT,即數(shù)據(jù)到達(dá)時(shí)間。從SRC到a,b,c時(shí)間為0,這個(gè)前面已經(jīng)談過(guò)。從a到d的時(shí)間為1,從d到g的時(shí)間為3,則g的AT為3+1=4。對(duì)于f,其可以從d過(guò)來(lái),也可以從b過(guò)來(lái)。從d過(guò)來(lái)到達(dá)時(shí)間為5+1=6,從b過(guò)來(lái)時(shí)間為0+4=4,我們選最晚到達(dá)的時(shí)間,所以f的AT為6。
基于此,可以逐步得到到達(dá)SNK的AT為15。

對(duì)于RAT,我們要從右向左看,SNK的RAT為12,則j,k,h的RAT也都為12。對(duì)于h而言,如果要滿(mǎn)足k的要求,則其RAT應(yīng)該為10,如果要滿(mǎn)足n的要求,則其RAT應(yīng)該為12-5=7。我們?nèi)≥^小的值,則h的RAT為7。基于此規(guī)則,我們可以填上所有的RAT。

很顯然,此時(shí)我們可以得到關(guān)鍵路徑是哪一條,并且發(fā)現(xiàn)這個(gè)關(guān)鍵路徑是違例的。

我們?cè)賮?lái)看一個(gè)概念,F(xiàn)alse Path。即虛假路徑,為什么這么叫呢?因?yàn)檫@條路徑實(shí)際上是不會(huì)經(jīng)過(guò)的。比如下圖,兩個(gè)MUX一個(gè)用SEL,一個(gè)用~SEL。那么這樣的話(huà),其不可能做出同樣的選擇(比如左邊圖的都選擇SEL=0的情況)。
左邊那條路徑實(shí)際上是肯定不會(huì)走的,這種路徑就是False Path。但STA工具不知道這一點(diǎn),因此我們需要自己手動(dòng)設(shè)置。

3、Design Constraints我們?cè)賮?lái)看一個(gè)非常重要的概念,設(shè)計(jì)約束。

上一篇文章已經(jīng)提到了,綜合工具是基于約束條件去做綜合。而不是漫無(wú)目的的去做綜合。這個(gè)約束條件需要我們自己提供,通常我們采用SDC語(yǔ)法。該語(yǔ)法是TCL語(yǔ)言的超集。
通過(guò)約束我們給芯片一個(gè)指定的工作環(huán)境。告訴芯片工作在什么頻率啊,時(shí)鐘信號(hào)怎么樣啊,你面積應(yīng)該有多大啊等等。然后綜合工具就會(huì)往這個(gè)方向去努力綜合,讓芯片可以在這個(gè)約束條件工作起來(lái)。

這里提一個(gè)重要的概念,集合。SDC中的collection和TCL中的列表不一樣。collection的元素本質(zhì)上是一個(gè)個(gè)的指針,指向你想要的元素。想使用具體的元素,應(yīng)該用下面的語(yǔ)法。這里其實(shí)就需要大家自己去看相應(yīng)的視頻教程和官方文檔了。

我們來(lái)看一些設(shè)計(jì)目標(biāo)的一些名稱(chēng)。在寫(xiě)設(shè)計(jì)約束的時(shí)候,這些名詞會(huì)被反復(fù)調(diào)用,比如get_ports 等。對(duì)于一個(gè)模塊,其頂層名稱(chēng)就是我們的design。其對(duì)外引出的端口叫做port。調(diào)用的模塊稱(chēng)為reference,例化的實(shí)例叫做cell。具體的大家看一下下面的代碼和對(duì)應(yīng)的概念即可。

有了上述的概念,就可以做很多事了,比如下面的語(yǔ)法。這里舉個(gè)例子,想要獲取所有的叫做clk的端口,設(shè)置成為理想始終網(wǎng)絡(luò),便可以使用下面的語(yǔ)法。更加具體的用途大家可以找?guī)讉(gè)sdc看一看,有了這篇文章的說(shuō)明,大家結(jié)合查資料。大概可以搞清楚到底是在約束什么。
set_ideal_network [get_ports clk]


我們?cè)賮?lái)看一下時(shí)鐘定義,時(shí)鐘定義可以說(shuō)是綜合最重要的東西了。涉及到時(shí)鐘的信號(hào)一定要聲明好,否則會(huì)被視為普通信號(hào),從而不會(huì)進(jìn)行相應(yīng)的時(shí)序分析,后果很?chē)?yán)重。
我們來(lái)看一下怎么創(chuàng)建時(shí)鐘,如下圖所示。
下面這個(gè)generated clock稍微復(fù)雜一點(diǎn),我解釋一下,其中create_generated_clock是SDC中的一個(gè)命令,用于定義一個(gè)由設(shè)計(jì)中某個(gè)現(xiàn)有的時(shí)鐘信號(hào)生成的派生時(shí)鐘(derived clock)。這個(gè)命令通常用于以下幾種情況:
當(dāng)設(shè)計(jì)中存在時(shí)鐘分頻器時(shí),需要為分頻后的時(shí)鐘定義派生時(shí)鐘。
當(dāng)時(shí)鐘網(wǎng)絡(luò)中存在時(shí)鐘樹(shù)時(shí),需要為時(shí)鐘樹(shù)的分支定義派生時(shí)鐘。
整個(gè)命令的意思是:創(chuàng)建一個(gè)名為gen_clock的派生時(shí)鐘,其源時(shí)鐘是設(shè)計(jì)中的clk端口,該派生時(shí)鐘是源時(shí)鐘的一半頻率,并且這個(gè)派生時(shí)鐘用于作用名為FF1的觸發(fā)器的輸出引腳Q。

有關(guān)時(shí)鐘的定義還有以下一些語(yǔ)法,我這里分別解釋一下。

set_ideal_network命令是用來(lái)指定一個(gè)網(wǎng)絡(luò)(通常是時(shí)鐘或復(fù)位信號(hào))應(yīng)該被綜合工具視為理想網(wǎng)絡(luò)。這意味著這個(gè)網(wǎng)絡(luò)被假設(shè)為沒(méi)有延遲和抖動(dòng),并且具有無(wú)限的能力來(lái)驅(qū)動(dòng)負(fù)載。在實(shí)際的硬件實(shí)現(xiàn)中,時(shí)鐘網(wǎng)絡(luò)總是會(huì)有一定的延遲和抖動(dòng),因此set_ideal_network命令不適用于描述真實(shí)世界的時(shí)鐘行為。隨著設(shè)計(jì)流程的進(jìn)展,會(huì)用更準(zhǔn)確的時(shí)鐘模型來(lái)替換這個(gè)理想模型,以便進(jìn)行更精確的時(shí)序分析和優(yōu)化。
set_clock_transition命令用于指定時(shí)鐘信號(hào)在邏輯電平之間轉(zhuǎn)換的時(shí)間。這個(gè)轉(zhuǎn)換時(shí)間通常被稱(chēng)為時(shí)鐘的邊沿斜率(edge slope),它表示時(shí)鐘信號(hào)從低電平跳變到高電平或從高電平跳變到低電平時(shí)所需的時(shí)間。

set_clock_uncertainty命令用于指定時(shí)鐘信號(hào)的不確定性。時(shí)鐘不確定性是由于時(shí)鐘信號(hào)在傳播過(guò)程中的各種因素(如時(shí)鐘偏斜、時(shí)鐘抖動(dòng)、環(huán)境噪聲等)導(dǎo)致的時(shí)鐘邊沿到達(dá)時(shí)間的不確定性。當(dāng)考慮不確定性的時(shí)候,自然會(huì)讓綜合變得更加困難,如果考慮不確定性都能PASS,那在理想時(shí)鐘下更加會(huì)PASS。

set_propagated_clock命令用于指定一個(gè)時(shí)鐘信號(hào)是一個(gè)已傳播的時(shí)鐘。已傳播的時(shí)鐘通常是指在設(shè)計(jì)中通過(guò)時(shí)鐘網(wǎng)絡(luò)傳播后的時(shí)鐘信號(hào),它可能包含了時(shí)鐘樹(shù)綜合(clock tree synthesis)后的延遲。
談完了時(shí)鐘的約束以后,我們?cè)賮?lái)看一下IO的約束。其實(shí)把時(shí)鐘約束好以后,reg2reg的路徑都已經(jīng)解決了,但我們還有三種路徑?jīng)]有解決,因此我們要定義好輸入輸出約束,簡(jiǎn)單來(lái)說(shuō)就是要定義好輸入延遲和輸出延遲。

此外還有一種替代方式,如下所示。

上述概念的具體圖示如下所示,這里簡(jiǎn)單解釋一下。
首先是input delay,該概念非常簡(jiǎn)單,之前我們認(rèn)為輸入進(jìn)來(lái)的時(shí)候剛好對(duì)應(yīng)時(shí)鐘的上升沿,沒(méi)有任何的延遲,但實(shí)際上肯定不現(xiàn)實(shí),肯定是過(guò)了一會(huì)才來(lái)的。這個(gè)值如果設(shè)的很高的話(huà),則意味著輸入信號(hào)要很久才到來(lái),那后面能做邏輯的時(shí)間就很短了。
然后是output delay,這個(gè)稍微難理解一點(diǎn)。其描述了模塊輸出到下一級(jí)模塊需要多少延遲,也可以理解為在捕獲沿到來(lái)時(shí),數(shù)據(jù)已經(jīng)存在的時(shí)間。我們想一想,這個(gè)延遲如果設(shè)的很大,那么我們數(shù)據(jù)就應(yīng)該提前很久已經(jīng)算出來(lái)了,能做的邏輯又減少了。因此對(duì)于這兩個(gè)delay,一般不要設(shè)的太大,否則布局布線(xiàn)會(huì)很困難,當(dāng)然也不可能亂設(shè)置,具體還是取決于上級(jí)模塊和下級(jí)模塊。此外我們還要考慮min delay path,這個(gè)大家可以自己思考。
除此之外輸入驅(qū)動(dòng)和輸出負(fù)載,可以視為電阻或電容模型。

我們回顧一下false path,其語(yǔ)法設(shè)置如下所示。這里我詳細(xì)解釋一下。set_false_path命令用于指定設(shè)計(jì)中某些路徑不會(huì)影響時(shí)序分析的結(jié)果。這通常用于那些不依賴(lài)于時(shí)鐘周期或不需要滿(mǎn)足特定時(shí)序要求的路徑,例如復(fù)位路徑、異步信號(hào)路徑或某些測(cè)試路徑。
命令set_false_path through [get_pins mux1/I0] through [get_pins mux2/I0]的含義如下:
set_false_path:用于標(biāo)記一些路徑為“假路徑”(false paths),即這些路徑上的時(shí)序違例不會(huì)被報(bào)告為設(shè)計(jì)錯(cuò)誤。
  • through [get_pins mux1/I0]:這指定了假路徑的第一個(gè)點(diǎn),即mux1的輸入引腳I0。get_pins是一個(gè)SDC函數(shù),用于選擇設(shè)計(jì)中的特定引腳。
    through [get_pins mux2/I0]:這指定了假路徑的第二個(gè)點(diǎn),即mux2的輸入引腳I0。
    綜合以上,這個(gè)命令告訴時(shí)序分析工具,從mux1的輸入引腳I0到mux2的輸入引腳I0的路徑是一個(gè)假路徑。這意味著在這兩個(gè)引腳之間的任何時(shí)序違例都不會(huì)被視為設(shè)計(jì)錯(cuò)誤,時(shí)序分析工具在分析時(shí)序時(shí)會(huì)忽略這條路徑。

    上面講的是不會(huì)走的路徑。此外還有跨時(shí)鐘域的時(shí)鐘約束。這里我重點(diǎn)解釋一下最后那個(gè)。
    set_multicycle_path命令用于指定某些特定的時(shí)序路徑可以超過(guò)一個(gè)時(shí)鐘周期來(lái)完成數(shù)據(jù)的建立(setup)或保持(hold)。
    命令set_multicycle_path setup from F1/CP to F2/D 2的含義如下:
    set_multicycle_path:用于設(shè)置多周期路徑約束。
    setup:這指定了約束的類(lèi)型是建立時(shí)間,即數(shù)據(jù)必須在時(shí)鐘邊沿到達(dá)之前在輸入端穩(wěn)定的時(shí)間。
    from F1/CP:這指定了路徑的起始點(diǎn),即從觸發(fā)器F1的時(shí)鐘引腳CP開(kāi)始。
    to F2/D:這指定了路徑的終點(diǎn),即到觸發(fā)器F2的數(shù)據(jù)引腳D結(jié)束。
    2:這指定了允許的最大時(shí)鐘周期數(shù)。在這個(gè)例子中,它表示從F1到F2的路徑可以有最多兩個(gè)時(shí)鐘周期的延遲。
    綜合以上,這個(gè)命令告訴時(shí)序分析工具,從F1的時(shí)鐘引腳到F2的數(shù)據(jù)引腳的路徑是一個(gè)多周期路徑,并且在建立時(shí)間分析中允許有最多兩個(gè)時(shí)鐘周期的延遲。這意味著F2可以在F1的時(shí)鐘邊沿之后的第二個(gè)時(shí)鐘周期內(nèi)采樣到穩(wěn)定的數(shù)據(jù)。
    這種約束通常用于以下情況:
    長(zhǎng)路徑:在某些情況下,由于路徑過(guò)長(zhǎng),數(shù)據(jù)無(wú)法在一個(gè)時(shí)鐘周期內(nèi)到達(dá)目的地,因此需要多個(gè)時(shí)鐘周期。
    特殊邏輯:某些復(fù)雜的邏輯操作可能需要多個(gè)時(shí)鐘周期來(lái)完成。
    [/ol]使用set_multicycle_path命令可以幫助時(shí)序分析工具更準(zhǔn)確地評(píng)估設(shè)計(jì)的時(shí)序性能,并確保在允許的時(shí)鐘周期內(nèi)數(shù)據(jù)能夠穩(wěn)定。

    很多時(shí)候,設(shè)計(jì)中的某些值會(huì)是一個(gè)常數(shù),用于表示特定的工作狀態(tài)。一旦這樣設(shè)置,很多路徑就是false path了。比如0送到mux的sel端。為了解決這種情況,使用下面的方法。
    set_case_analysis命令用于指定一個(gè)信號(hào)或端口在綜合或時(shí)序分析期間的固定邏輯值。這個(gè)命令通常用于模擬某些特定的設(shè)計(jì)狀態(tài),例如測(cè)試模式或配置模式,而不需要實(shí)際改變硬件的物理連接。
    命令set_case_analysis 0 [get_ports TEST_MODE]的含義如下:
  • set_case_analysis:這是SDC命令,用于設(shè)置案例分析約束。
    0:這指定了信號(hào)或端口的固定邏輯值。在這里,它表示TEST_MODE端口被固定為邏輯0。
    [get_ports TEST_MODE]:這是一個(gè)SDC函數(shù),用于選擇設(shè)計(jì)中的特定端口。在這里,它指定了TEST_MODE端口。
    綜合以上,這個(gè)命令告訴綜合或時(shí)序分析工具,在進(jìn)行分析時(shí),將TEST_MODE端口視為固定為邏輯0。這意味著在分析過(guò)程中,工具會(huì)假設(shè)TEST_MODE端口始終輸出邏輯0,而不管實(shí)際電路中的信號(hào)如何變化。
    這種約束通常用于以下情況:
    測(cè)試模式:在設(shè)計(jì)驗(yàn)證期間,可能需要模擬某些測(cè)試條件,通過(guò)固定某些測(cè)試模式控制信號(hào)的值來(lái)簡(jiǎn)化測(cè)試過(guò)程。
    安全性分析:在某些安全性關(guān)鍵的系統(tǒng)中,可能需要分析在特定配置下的系統(tǒng)行為,例如在故障安全模式下的操作。
    配置設(shè)置:對(duì)于可配置的邏輯,可能需要分析不同的配置設(shè)置對(duì)性能的影響。
    [/ol]使用set_case_analysis命令可以幫助設(shè)計(jì)者在不同的設(shè)計(jì)狀態(tài)下進(jìn)行分析,而不需要對(duì)硬件進(jìn)行物理上的修改。這有助于提高設(shè)計(jì)的驗(yàn)證覆蓋率和確保在各種操作模式下設(shè)計(jì)的穩(wěn)定性。
    此外還有DRV約束,比如最大扇出啥的,具體的大家看下圖即可。

    本節(jié)課后面還有如何看報(bào)告以及MMMC講解。但講的比較粗略,并且報(bào)告是cadence的報(bào)告,我也沒(méi)接觸過(guò),這里就不寫(xiě)了,感興趣的可以自己看一下。
    下一篇文章將進(jìn)入芯片后端。

    系列文章入口——
    【芯片設(shè)計(jì)】SoC 101(一):緒論
    【芯片設(shè)計(jì)】FIFO漫談(零)從無(wú)處不在的FIFO開(kāi)始說(shuō)起
    【芯片設(shè)計(jì)】計(jì)算機(jī)體系結(jié)構(gòu)(一)虛擬內(nèi)存
    【芯片設(shè)計(jì)】深入理解AMBA總線(xiàn)(零)緒論
    【芯片設(shè)計(jì)】握手協(xié)議的介紹與時(shí)序說(shuō)明
    【芯片設(shè)計(jì)】復(fù)位那些小事 —— 復(fù)位消抖
    【芯片設(shè)計(jì)】快速入門(mén)數(shù)字芯片設(shè)計(jì)(一)Introduction
    【芯片驗(yàn)證】UVM源碼計(jì)劃(零)下定決心讀源碼前的自測(cè)環(huán)節(jié)
    【芯片設(shè)計(jì)】異步電路碎碎念(一) 到底什么是異步電路
    【芯片設(shè)計(jì)】從RTL到GDS(一):Introduction
    其他文章鏈接——
    【芯片驗(yàn)證】sva_assertion: 15道助力飛升的斷言練習(xí)
    【芯片驗(yàn)證】可能是RTL定向驗(yàn)證的巔峰之作
    【芯片驗(yàn)證】RTL仿真中X態(tài)行為的傳播 —— 從xprop說(shuō)起
    【芯片驗(yàn)證】年輕人的第一個(gè)systemVerilog驗(yàn)證環(huán)境全工程與解析
    【芯片設(shè)計(jì)】verilog中有符號(hào)數(shù)和無(wú)符號(hào)數(shù)的本質(zhì)探究
    【芯片設(shè)計(jì)】論RTL中always語(yǔ)法的消失術(shù)
    【芯片設(shè)計(jì)】代碼即注釋?zhuān)⑨尲创a
    【芯片設(shè)計(jì)】700行代碼的risc處理器你確實(shí)不能要求太多了
    入職芯片開(kāi)發(fā)部門(mén)后,每天摸魚(yú)之外的時(shí)間我們要做些什么呢
    如何計(jì)算系統(tǒng)的outstanding 和 burst length?
    芯片搬磚日!け扑缽(qiáng)迫癥的關(guān)鍵詞不對(duì)齊事件
    熟人社會(huì)里,一群沒(méi)有社會(huì)價(jià)值的局外人
  • 本帖子中包含更多資源

    您需要 登錄 才可以下載或查看,沒(méi)有賬號(hào)?立即注冊(cè)

    x
    回復(fù)

    使用道具

    發(fā)表回復(fù)

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表