01
SPYGLASS CDC 簡(jiǎn)介
隨著技術(shù)的發(fā)展,數(shù)字電路的集成度越來(lái)越高,設(shè)計(jì)也越來(lái)越復(fù)雜。很少有系統(tǒng)會(huì)只工作在同一個(gè)時(shí)鐘頻率。一個(gè)系統(tǒng)中往往會(huì)存在多個(gè)時(shí)鐘,這些時(shí)鐘之間有可能是同步的,也有可能是異步的。如果一個(gè)系統(tǒng)中,異步時(shí)鐘之間存在信號(hào)通道,則就會(huì)存在CDC(clock domain crossing)問(wèn)題。
如下圖中,CLKA和CLKB之間沒(méi)有固定的相位關(guān)系,是異步時(shí)鐘。前半部分設(shè)計(jì)屬于時(shí)鐘域CLKA,后半部分設(shè)計(jì)屬于時(shí)鐘域CLKB。DA信號(hào)從時(shí)鐘域CLKA進(jìn)入到時(shí)鐘域CLKB,是一個(gè)跨時(shí)鐘域的信號(hào),這條path也會(huì)被稱(chēng)為CDC path。
CDC(Clock Domain Crossing)的前端設(shè)計(jì)中最常見(jiàn)的問(wèn)題, 在RTL中要恰當(dāng)?shù)奶幚砻總€(gè)異步的控制信號(hào)和數(shù)據(jù)信號(hào), 否則就會(huì)出現(xiàn)亞穩(wěn)態(tài),造成嚴(yán)重的function false.
SpyGalss是目前業(yè)界唯一可靠的RTL Sign off解決方案,可以幫助客戶(hù)在設(shè)計(jì)早期發(fā)現(xiàn)潛在問(wèn)題,保證產(chǎn)品質(zhì)量,極大的減少設(shè)計(jì)風(fēng)險(xiǎn),降低設(shè)計(jì)成本。
包含五大模塊:lint, CDC(跨時(shí)鐘域檢查), LP(低功耗),Constraint(約束),DFT(可測(cè)試性)。
SpyGlass CDC分析使你能夠識(shí)別設(shè)計(jì)中的CDC問(wèn)題。SpyGlass CDC tool是一種 Formal Check Methodology工具, 相比寫(xiě)case跑仿真來(lái)找CDC問(wèn)題, 靠SpgGlass能更早,更全,更快的發(fā)現(xiàn)CDC問(wèn)題. 它能夠:
1.管理是多時(shí)鐘域設(shè)計(jì)
2.系統(tǒng)地處理CDC問(wèn)題
3.檢查和報(bào)告任何不同步的信號(hào): 時(shí)鐘和復(fù)位
SpyGlass CDC與靜態(tài)時(shí)序分析相比:
1.STA對(duì)async interface不太好使,只適合sync模塊分析
2.CDC paths 總是需要設(shè)置成false paths
3.一般在design的后期在netlist level做才有意義
SpyGlass CDC與功能仿真相比:
1.黑盒測(cè)試很難窮舉(exhaust)
2.白盒測(cè)試需要assertions
3.需要覆蓋CDC的所有test branches
4.很難幸運(yùn)的覆蓋所有,一般只能發(fā)現(xiàn)部分問(wèn)題
5.一般在design后期才發(fā)現(xiàn)問(wèn)題
當(dāng)SOC design涉及的clock domain太多,用到很多第三方IP,及涉及人員水平參差不齊時(shí), 用SpyGlass CDC來(lái)做檢查來(lái)保證RTL質(zhì)量是十分必要的.
在工程的block-level和SOC 集成的兩個(gè)不同階段, 所適用的CDC Goal也是有所不同的. Block-Level關(guān)心的是模塊內(nèi)部, 只有模塊內(nèi)檢查沒(méi)問(wèn)題后才能做deliver. 而SOC集成主要關(guān)心的是模塊間interface的CDC問(wèn)題.
02
SpyGlass 的一些基本概念
一些基本的概率如下:
● Rule : 是SpyGlass 進(jìn)行RTL分析的最小單位.
● Goal : 是一系列相關(guān)Rule的集合,組合起來(lái)完成RTL分析的某個(gè)特定任務(wù). user可以用GuideWare定義好的Goal, 也可根據(jù)工程項(xiàng)目要求來(lái)選擇一系列rule的集合形成自定義Goal. GUI里面點(diǎn)Goal的button來(lái)選擇設(shè)定, 也可在Prj file 里定義.
● Sub-Methodology : 是一系列相關(guān)Goal的集合, 用以達(dá)成某方面特定目標(biāo), 如完成CDC check.
目前包括 SpyGlass CDC/Constraints/DFT/Power/TXV Methodology
其他術(shù)語(yǔ) :
●SGDC : Constraints 文件, 主要包含clock和reset等約束信息.
●Waiver : 用以過(guò)濾一些結(jié)果的文件.
●Severity : report結(jié)果中分Fatal, Error, Warning和INFO四等級(jí)信息.
● Parameter : 可以在進(jìn)行RTL分析之前設(shè)定某些參數(shù), 對(duì)檢查過(guò)程進(jìn)行一些約束
03
SpyGlass CDC流程簡(jiǎn)介
SpyGlass的功能模型總結(jié)如下圖:
Figure3.1 SpyGlass Functional Model
3.1
設(shè)置階段(setup stage)
在設(shè)計(jì)的設(shè)置階段你可以:
●添加設(shè)計(jì)文件、SGDC文件、預(yù)編譯文件和技術(shù)文件。
●指定影響SpyGlass運(yùn)行的各種設(shè)計(jì)讀取選項(xiàng)。例如,你可以在設(shè)計(jì)中指定頂層模塊、更改語(yǔ)言、指定宏等等。。
●運(yùn)行design-read流程來(lái)執(zhí)行第一級(jí)的HDL分析。在進(jìn)入下一階段之前,必須解決此階段報(bào)告的致命錯(cuò)誤(FATAL)。
Spyglass 可以運(yùn)行在BATCH 或者 GUI 模式。通常模式下是在batch模式下執(zhí)行分析,在GUI模式下進(jìn)行debug。
3.1.1 工程(Project)文件
采用BATCH模式,這些設(shè)置都會(huì)添加到工程(Project)文件中,Project一般定義了以下內(nèi)容:
下面是一個(gè)Project文件 training.prj的列子:
需要讀入的文件及命令如下:
3.1.2 約束(SGDC)文件
SDC文件可以直接被SpyGlass讀取,自動(dòng)轉(zhuǎn)換成SGDC,需要設(shè)置以下內(nèi)容完成sdc2sgdc的轉(zhuǎn)換:
set_option sdc2sgdc yes
sdc_data –file “test.sdc”
下面是一個(gè)SGDC文件的例子
3.2
目標(biāo)(Goal)設(shè)定和運(yùn)行階段
在此階段,你將選擇并運(yùn)行目標(biāo)。目標(biāo)是規(guī)則的集合。
你可以選擇規(guī)則,也可以指定規(guī)則執(zhí)行的順序。
在SpyGlass CDC分析期間,你可以在不同的階段運(yùn)行不同的SpyGlass CDC目標(biāo)。在每個(gè)階段中,修復(fù)所報(bào)告的違例并轉(zhuǎn)移到下一個(gè)階段。使用這種分步驟的方法可以幫助你了解一些需要考慮的CDC問(wèn)題。
如果不遵循這個(gè)分步驟的方法,你可能會(huì)看到大量違反CDC的情況,其中大多數(shù)是由于不正確的設(shè)置或沒(méi)有修復(fù)前幾個(gè)階段的違例引起的。
SpyGlass CDC 的目標(biāo)和規(guī)則如下圖所示
3.3
SpyGlass CDC 分析流程
SpyGlass CDC分析可以分為以下幾個(gè)階段:
1.創(chuàng)建SpyGlass CDC設(shè)置
2.修復(fù)時(shí)鐘和復(fù)位完整性問(wèn)題
3.執(zhí)行CDC驗(yàn)證
4.調(diào)試CDC問(wèn)題
在執(zhí)行SpyGlass CDC 分析之前,請(qǐng)檢查必要的先決條件。
進(jìn)行SpyGlass CDC分析的先決條件如下:
●成功運(yùn)行design-read流程
●確保設(shè)計(jì)包含最少數(shù)量的非預(yù)期的black box
●在設(shè)計(jì)中為實(shí)例化的技術(shù)庫(kù)單元提供相應(yīng)的技術(shù)庫(kù)(.lib)
●在設(shè)計(jì)中指定有關(guān)時(shí)鐘的信息,以及復(fù)位信息(如果可能的話(huà))
建議在開(kāi)始運(yùn)行SpyGlass CDC之前,從設(shè)計(jì)規(guī)范、IPs或芯片引線(xiàn)收集這些信息。如果你沒(méi)有這些信息,SpyGlass CDC也能夠提供自動(dòng)檢測(cè)時(shí)鐘和復(fù)位,但是會(huì)推斷出額外的時(shí)鐘和復(fù)位,最好是能夠預(yù)先明確所有的時(shí)鐘和復(fù)位信息。
04
創(chuàng)建SpyGlass CDC 設(shè)置
創(chuàng)建設(shè)置意味著在執(zhí)行CDC驗(yàn)證之前指定設(shè)計(jì)信息,例如時(shí)鐘、重置和停止模塊。設(shè)置的質(zhì)量決定了SpyGlass CDC分析的質(zhì)量。錯(cuò)誤或不完整的設(shè)置可能會(huì)導(dǎo)致許多違例或掩蓋一個(gè)真正的設(shè)計(jì)錯(cuò)誤。
可以通過(guò)以下流程建立SpyGlass CDC設(shè)置:
●將時(shí)鐘生成模塊指定為black box
●為設(shè)計(jì)指定時(shí)鐘和復(fù)位
●為設(shè)計(jì)生成時(shí)鐘和復(fù)位
●使用設(shè)置管理器
4.1
將時(shí)鐘生成模塊指定為black box
對(duì)時(shí)鐘生成模塊(比如PLL)的內(nèi)部執(zhí)行SpyGlass CDC分析非常復(fù)雜,而且對(duì)整體SpyGlass CDC分析幾乎沒(méi)有價(jià)值。
將這些塊標(biāo)記為黑盒子,除非你有詳細(xì)的SGDC約束來(lái)定義這些模塊的時(shí)鐘特性。
標(biāo)記PLL時(shí)鐘生成模塊為black boxes的方法是,在project file中設(shè)置如下命令:
set_option stop
一旦你設(shè)置這些模塊為black boxes:
●將時(shí)鐘約束定義在這些模塊的輸出pin上
●將輸出時(shí)鐘和輸入定義為同一個(gè)時(shí)鐘域,除非兩者之間沒(méi)有相位關(guān)系
如下面的列子所示:
FIGURE 1. Defining Clock Outputs as in the Same Domain
4.2
為設(shè)計(jì)指定時(shí)鐘和復(fù)位
如果知道設(shè)計(jì)中的時(shí)鐘和復(fù)位,可以執(zhí)行以下步驟來(lái)指定他們:
1.在SGDC中定義CLOCK和RESET的約束
clock -name “clk_sys”
reset -name “rst_n” –value 0
1.通過(guò)運(yùn)行SpyGlass CDC 方法的Goals來(lái)分析設(shè)計(jì)
2.檢查T(mén)he Clock-Reset-Summary Report.
3.在The Clock-Reset-Summary Report 的Section D: Cases not checked for clock domain crossings Section里面列出了unconstrained clocks.
4.修改SGDC來(lái)指定The Clock-Reset-Summary Report里列出的時(shí)鐘信號(hào);
5.修改SGDC后重復(fù)步驟2;
4.3
為設(shè)計(jì)生成時(shí)鐘和復(fù)位
如果不知道設(shè)計(jì)中的時(shí)鐘和復(fù)位,可以執(zhí)行以下步驟來(lái)生成:
1.運(yùn)行cdc_setup goal
這個(gè)步驟產(chǎn)生了autoclocks.sgdc和autoresets.sgdc兩個(gè)SGDC文件,包含了推斷的時(shí)鐘和復(fù)位。
2.檢查和修改生成的SGDC文件
這些文件可能包括一些除了真正的時(shí)鐘和復(fù)位的控制信號(hào)。因此,你必須檢查這些文件中的每個(gè)推斷的時(shí)鐘和復(fù)位,并刪除不是真正的時(shí)鐘和復(fù)位信號(hào)。
建議您查看Setup_clock01和Reset_info01規(guī)則信息,以查看這樣的推斷信號(hào)。
3.在SpyGlass中指定修改過(guò)的autoclocks.sgdc 和 autoresets.sgdc文件,并通過(guò)運(yùn)行相應(yīng)的Goal來(lái)分析你的設(shè)計(jì)。
4.3.1 在生成的SGDC 文件中修改時(shí)鐘域
默認(rèn)情況下,autoclocks.sgdc文件中生成的clock 假定為一個(gè)單獨(dú)的時(shí)鐘域。在這種情況下,CDC Verification Rules 報(bào)告了對(duì)每對(duì)時(shí)鐘信號(hào)之間的時(shí)鐘域交叉的違例。
但是,工具可能會(huì)將設(shè)計(jì)中的一些時(shí)鐘信號(hào)視為來(lái)自同一域。在這種情況下,工具會(huì)認(rèn)為觸發(fā)器之間的數(shù)據(jù)傳輸沒(méi)有同步問(wèn)題。
你可以通過(guò)約束中的clock 關(guān)鍵字來(lái)修改時(shí)鐘域的信息。通過(guò)修改clock的-domain參數(shù)為同一個(gè)值來(lái)指定所有相同時(shí)鐘域的clock到同一個(gè)時(shí)鐘域。注意-domain的參數(shù)可以是有效的字符串或者時(shí)鐘名。
例如,下面的例子中clk1和clk2是同一個(gè)時(shí)鐘域,clk3是不同的時(shí)鐘域。
current_design myDU
clock -name clk1 -domain A
clock -name clk2 -domain A
clock -name clk3 -domain B
選項(xiàng) –domain的參數(shù)是可選的,如果沒(méi)有設(shè)定,那么時(shí)鐘域的名字就是時(shí)鐘自己。所以下面的例子clk1和clk2是同一個(gè)時(shí)鐘域(clk1), clk3是不同的時(shí)鐘域(clk3):
current_design myDU
clock -name clk1
clock -name clk2 -domain clk1
clock -name clk3
05
修復(fù)時(shí)鐘和復(fù)位完整性問(wèn)題
這個(gè)步驟必須確保時(shí)鐘和復(fù)位被正確定義,并且它們沒(méi)有g(shù)litches、競(jìng)爭(zhēng)和其他故障。
你必須通過(guò)運(yùn)行clock_reset_integrity goal來(lái)修復(fù)時(shí)鐘和復(fù)位的完整性。
Setup的主要目標(biāo)是保證clock和reset被正確定義,必須保證所以error都被修復(fù)了,才能進(jìn)行下一步,不然后續(xù)會(huì)有很多意想不到的錯(cuò)誤。
06
執(zhí)行CDC驗(yàn)證
CDC驗(yàn)證是指在設(shè)計(jì)中檢測(cè)CDC問(wèn)題。
要執(zhí)行CDC驗(yàn)證,請(qǐng)執(zhí)行以下步驟:
1.設(shè)置所需的參數(shù)(parameters)
有關(guān)SpyGlass CDC解決方案的所有參數(shù)的詳細(xì)信息,請(qǐng)參閱Parameters in SpyGlass CDC.。
2.運(yùn)行Goals,例如cdc_verify和cdc_verify_struct,以檢測(cè)大量的CDC問(wèn)題。
最初你可能會(huì)發(fā)現(xiàn)大量違反CDC的情況。以一種系統(tǒng)的方式來(lái)處理它們是很重要的,這樣你就可以快速地處理一些需要考慮的問(wèn)題。
下列列出了大多數(shù)重要的違例種類(lèi):
●Unsynchronized Crossings Issues
●Convergence Issues
●Reset Synchronization Issues
●Glitch Issues
●Signal Width Errors in Synchronized Control Crossings
●Data Hold Issues in Synchronized Data Crossings
對(duì)于所有其他違規(guī)行為,請(qǐng)搜索SpyGlass CDC文檔以查找其規(guī)則名稱(chēng)的違例行為。
詳細(xì)的請(qǐng)參考 Rules in SpyGlass CDC.
6.1
未同步的跨時(shí)鐘域問(wèn)題 (Unsynchronized Crossings Issues)
首先,通過(guò)查看Ac_unsync01 和Ac_unsync02來(lái)檢查未同步的跨時(shí)鐘域問(wèn)題。
未同步就進(jìn)行跨時(shí)鐘域設(shè)計(jì)會(huì)產(chǎn)生亞穩(wěn)態(tài),這是最基本的CDC問(wèn)題。
下面的例子是一種未同步信號(hào)直接跨時(shí)鐘域的情況:
FIGURE 3. Unsynchronized crossing causing metastability problem
6.2
聚合問(wèn)題(Convergence Issues)
Convergence issues can occur when multiple signals cross from one domain to another but they are separately synchronized. For example, consider the following figures:
聚合問(wèn)題發(fā)生在多個(gè)信號(hào)(可能是同一個(gè)時(shí)鐘域也可以是不同的時(shí)鐘域)從一個(gè)時(shí)鐘域跨到另一個(gè)相同的時(shí)鐘域,但是這些信號(hào)是分開(kāi)同步的。這樣你在使用這些同步過(guò)的信號(hào)的時(shí)候,就不能確定他們是不是同時(shí)有效,這樣有可能就有問(wèn)題。幾種情況如下:
FIGURE 4. Convergence Issues
此外,當(dāng)將coherence _check_type參數(shù)設(shè)置為reset時(shí),Ac_conv規(guī)則會(huì)執(zhí)行復(fù)位控制同步器的收斂性和一致性檢查,如下圖所示。
FIGURE 5. Convergence Issues of Reset Control Synchronizers
有關(guān)此類(lèi)違規(guī)類(lèi)型的信息,請(qǐng)參見(jiàn)Ac_conv01、Ac_conv02、Ac_conv03、Ac_conv04和Ac_conv05。
有關(guān)調(diào)試此類(lèi)問(wèn)題的信息,請(qǐng)參閱Debugging CDC Issues.
6.3
復(fù)位同步問(wèn)題
對(duì)于此類(lèi)問(wèn)題,請(qǐng)檢查違反Ar_*規(guī)則的情況。這些rules報(bào)告同步異步復(fù)位信號(hào)的違規(guī)行為。
由于復(fù)位通常是單比特信號(hào),你可能希望在Ac_sync01下報(bào)告它們。但是復(fù)位的同步往往不同,比如常見(jiàn)的異步復(fù)位同步釋放,輸入是拉高的。
例如,下圖顯示了一個(gè)復(fù)位同步釋放:
FIGURE 6. Reset that Deasserts Synchronously
有關(guān)這些違規(guī)的信息,請(qǐng)參見(jiàn)Ar_asyncdeassert01、Ar_syncdeassert01、Ar_sync01和Ar_unsync01。有關(guān)調(diào)試此類(lèi)問(wèn)題的信息,請(qǐng)參閱 Debugging CDC Issues。Ar_cross_analysis01規(guī)則執(zhí)行crossing檢測(cè)和同步檢查,并在設(shè)計(jì)中報(bào)告reset路徑中的所有時(shí)鐘域crossing。用戶(hù)不需要像Ar_sync規(guī)則所要求的那樣在約束文件中指定reset定義。
6.4
毛刺問(wèn)題
檢查通過(guò)Ac_glitch或Clock_glitch規(guī)則報(bào)告的所有違例。
這些規(guī)則突出了容易出現(xiàn)毛刺的邏輯,這些邏輯可能導(dǎo)致與同步問(wèn)題非常類(lèi)似的問(wèn)題。
例如,下圖顯示了容易出現(xiàn)毛刺的重新聚合的組合邏輯:
FIGURE 7. Glitch-prone reconverging combinational logic
關(guān)于這個(gè)違例更多的信息可以參考:Ac_glitch01, Ac_glitch03, Clock_glitch02, Clock_glitch03, Clock_glitch04, Clock_converge01, and Reset_sync01.
6.5
跨時(shí)鐘信號(hào)寬度錯(cuò)誤(Signal Width Errors in Synchronized Control Crossings)
請(qǐng)檢查Ac_cdc01 rule 違例。
這種違例通常發(fā)生在信號(hào)從快時(shí)鐘穿越到慢時(shí)鐘,信號(hào)在慢時(shí)鐘還沒(méi)采樣到的時(shí)候已經(jīng)發(fā)生變化。
下圖是信號(hào)寬度問(wèn)題的例子:
FIGURE 8. Example of a signal width issue
6.6
數(shù)據(jù)跨時(shí)鐘的保持時(shí)間問(wèn)題
請(qǐng)檢查Ac_datahold01a 違例。
在使用同步器,但功能不正確的情況下,會(huì)出現(xiàn)此類(lèi)違規(guī)報(bào)告的信號(hào)??紤]如下的情況:
FIGURE 9. Incorrectly Synchronized Data Crossings
上圖是一種不正確的跨時(shí)鐘同步器的情況。這里,數(shù)據(jù)在enable有效的時(shí)候發(fā)生了變化。
07
調(diào)試CDC問(wèn)題
在調(diào)試CDC問(wèn)題之前,請(qǐng)保證setup是正確的。請(qǐng)參考Creating SpyGlass CDC Setup
在正常規(guī)模的設(shè)計(jì)上跑SpyGlass CDC,一般會(huì)有大量的違例。大部分違例是因?yàn)椋?/p>
●錯(cuò)誤或者不完備的setup
●配置信號(hào),通常不應(yīng)報(bào)告為CDC錯(cuò)誤
你可以系統(tǒng)的,有條理的來(lái)移除這些違例,只留下一些你需要考慮的潛在的實(shí)際問(wèn)題。
注意:千萬(wàn)不要通過(guò)waiving的方式解決CDC的問(wèn)題,這樣十分危險(xiǎn),可能wave掉了真正的CDC問(wèn)題。每一條waver都必須反復(fù)check。
你可以通過(guò)以下方式來(lái)調(diào)試CDC問(wèn)題:
●Using Spreadsheets
●Using Incremental Schematic
●Viewing Debug Data in Schematic
●Filtering Violations Based On Instances
●Solving CDC Issues Common to Multiple Violations
7.1
使用電子表(Using Spreadsheets)
當(dāng)存在許多違規(guī)行為時(shí),這些違規(guī)行為中的很大一部分是由一小部分的根本原因造成的。
分析它們的推薦方法是使用電子表格查看器。
執(zhí)行以下步驟來(lái)使用電子表格查看器調(diào)試大部分的違規(guī):
- 打開(kāi)電子表查看器
通過(guò)右鍵單擊違例標(biāo)題(rule的大類(lèi),比如Ar_unsync01)并從快捷菜單中選擇電子表格查看器選項(xiàng)來(lái)打開(kāi)電子表格。如下圖所示
- 篩選和排序數(shù)據(jù)
在電子表格視圖中使用篩選和排序來(lái)區(qū)分共同因素和違例。要過(guò)濾或排序數(shù)據(jù),右鍵單擊列標(biāo)題并從快捷菜單中選擇一個(gè)適當(dāng)?shù)倪x項(xiàng),如下圖所示:
每一列單擊可以排序,右鍵可以過(guò)濾:
FIGURE 10. Filtering and Sorting in the Spreadsheet
- 檢查常見(jiàn)原因或者來(lái)源
在電子表格中查找常見(jiàn)原因或常見(jiàn)來(lái)源。這些很可能指向一個(gè)單一的根本原因。
- 根據(jù)源來(lái)進(jìn)行過(guò)濾
如果您正在使用靜態(tài)信號(hào)的命名方法,請(qǐng)?jiān)陔娮颖砀裰邪丛疵Q(chēng)進(jìn)行篩選。比如篩選所有的配置寄存器。
例如,下圖顯示了如何為源指定過(guò)濾條件(_cfg):
FIGURE 11. The Custom Filter Dialo
查看過(guò)濾后的列表并解決根本原因,以消除大量違例。
7.2
使用增量示意圖(Incremental Schematic)
示意圖使你能夠理解和隔離沖突的根本原因。
你可以查看電子表格中出現(xiàn)的多個(gè)相關(guān)違規(guī)的示意圖。為此,請(qǐng)執(zhí)行以下步驟:
1.通過(guò)按下鍵盤(pán)鍵在電子表格中選擇違規(guī)。
2.執(zhí)行下列操作之一,打開(kāi)增量示意圖:
單擊電子表格中某一行的Schematic列中的鏈接。
單擊電子表格工具欄中的增量示意圖按鈕。
也可以右鍵直接選擇Incremental Schematic
下圖為增量示意圖:
FIGURE 12. The Incremental Schematic Window
使用增量示意圖的Tips:
●使用圖例了解用于標(biāo)識(shí)域和限定符的顏色;
●總是運(yùn)行Info_Case_Analysis規(guī)則來(lái)查看常量值(constant values)在示意圖中的傳播;
●右鍵單擊任何net(不是pin)并選擇Show Debug Data-> clock -reset選項(xiàng)來(lái)查看時(shí)鐘和域信息。
有關(guān)詳細(xì)信息,請(qǐng)參考Viewing Debug Data in Schematic.
●可以通過(guò)雙擊邊界邊來(lái)擴(kuò)展層次結(jié)構(gòu)邊界。
●通過(guò)雙擊需要traced的inout/output的對(duì)象來(lái)跟蹤輸入和輸出。
●通過(guò)使用示意圖中適當(dāng)?shù)挠益I菜單選項(xiàng)來(lái)跟蹤輸入和輸出,從而跟蹤到觸發(fā)器、鎖存器、輸入、輸出和模塊。
7.3
在示意圖中查看調(diào)試數(shù)據(jù)
在示意圖中調(diào)試SpyGlass CDC解決違例時(shí),以下信息非常有用:
●clock 路徑中的net的時(shí)鐘域信息
●reset 路徑中的net的復(fù)位域信息
●數(shù)據(jù)或者控制信號(hào)的時(shí)鐘域信息
●數(shù)據(jù)或者控制信息的準(zhǔn)靜態(tài)信息
注意:必須將enable_debug_data參數(shù)的值設(shè)置為yes,才能查看SpyGlass CDC解決方案規(guī)則的上述調(diào)試數(shù)據(jù)。
要查看示意圖中的調(diào)試數(shù)據(jù),右鍵單擊net并從快捷菜單中選擇Show debug data - >Clock-reset選項(xiàng)。當(dāng)您選擇此選項(xiàng)時(shí),將出現(xiàn)一個(gè)子菜單,顯示以下選項(xiàng):
●Clock
選擇此選項(xiàng)可以查看時(shí)鐘路徑中出現(xiàn)的net上的時(shí)鐘信息,如下圖所示:
FIGURE 13. The Clock Domain Data Dialog
Propagate_Clocks rule計(jì)算上述信息。此選項(xiàng)僅對(duì)出現(xiàn)在設(shè)計(jì)的時(shí)鐘路徑中的net起作用。
●Reset
選擇此選項(xiàng)可以查看reset路徑中出現(xiàn)的net的reset信息,如下圖所示:
FIGURE 14. The Reset Domain Data Dialog
Propagate_Resets rule計(jì)算上述信息。在上圖中,Type表示復(fù)位類(lèi)型,Active值表示復(fù)位源的初始值。此選項(xiàng)僅對(duì)在設(shè)計(jì)的reset路徑中出現(xiàn)的net起作用。
●Domain in data/control paths
選擇此選項(xiàng),可以在設(shè)計(jì)的數(shù)據(jù)或控制路徑中查看net上的時(shí)鐘域信息,如下圖所示:
FIGURE 15. The Data/Control Path Domain Data Dialog
在上圖中,Internal Domain Tag是指在執(zhí)行時(shí)鐘傳播時(shí)計(jì)算的內(nèi)部標(biāo)記,而Quasi static是指具有準(zhǔn)靜態(tài)屬性的路徑。數(shù)據(jù)/控制路徑可以有以下類(lèi)型的時(shí)鐘域:
●用戶(hù)指定的時(shí)鐘域: 這個(gè)類(lèi)別包括主時(shí)鐘、black box時(shí)鐘和派生時(shí)鐘。在這種情況下,SpyGlass會(huì)顯示用戶(hù)指定的時(shí)鐘名稱(chēng)。
●合并時(shí)鐘域: 如果一個(gè)門(mén)上匯聚了多個(gè)時(shí)鐘,則在內(nèi)部創(chuàng)建一個(gè)合并域。在這種情況下,SpyGlass會(huì)顯示用戶(hù)指定的時(shí)鐘列表。
●虛擬時(shí)鐘域: 如果一個(gè)虛擬時(shí)鐘與一個(gè)塊實(shí)例端口的主端口相關(guān)聯(lián),則SpyGlass將顯示用戶(hù)指定的虛擬時(shí)鐘名。
●Quasi_static
選擇此選項(xiàng)以檢查net在數(shù)據(jù)或控制路徑中是否是準(zhǔn)靜態(tài)的,如下圖所示:
FIGURE 16. The quasi_static Debug Data Dialog
7.4
基于實(shí)例來(lái)過(guò)濾違例
在處理大型設(shè)計(jì)時(shí),設(shè)計(jì)師會(huì)被分配特定的設(shè)計(jì)實(shí)例。在這種情況下,設(shè)計(jì)師需要關(guān)注特定實(shí)例中報(bào)告的違規(guī)情況。為了幫助設(shè)計(jì)人員快速定位特定實(shí)例上的違規(guī),SpyGlass CDC提供了基于實(shí)例的過(guò)濾機(jī)制。在此機(jī)制中,設(shè)計(jì)人員可以基于實(shí)例篩選違規(guī)。
要基于實(shí)例過(guò)濾違規(guī),請(qǐng)執(zhí)行以下步驟:
1.在項(xiàng)目文件中指定以下命令:
set_option enable_module_based_reporting yes
2.從“視圖”菜單中選擇“樹(shù)查看器”選項(xiàng)。下圖展示了樹(shù)查看器:
FIGURE 17. The tree viewer
確保在樹(shù)查看器中選擇了實(shí)例選項(xiàng)。
3.在instance視圖中右鍵單擊一個(gè)實(shí)例(如圖17中的F3),并從快捷菜單中選擇instance選項(xiàng)的Show Messages。
執(zhí)行此步驟后,將根據(jù)F3實(shí)例過(guò)濾違規(guī)。如下圖所示:
FIGURE 18. GUI view before filtering violations based on instances
注意 :可以使用msg_inst_mod_report參數(shù)根據(jù)目標(biāo)實(shí)例或根據(jù)公共模塊過(guò)濾違規(guī)。
除了實(shí)例層次結(jié)構(gòu)視圖外,違例行為還可以在Msg樹(shù)視圖下進(jìn)行過(guò)濾,如下圖所示:
清理過(guò)濾器
要清除過(guò)濾器并恢復(fù)出現(xiàn)所有違例,即頂層設(shè)計(jì)的完整視圖,右鍵單擊消息樹(shù)并從快捷菜單中選擇clear Message filter選項(xiàng),如下圖所示:
FIGURE 20. Clearing the filter
保存信息
要保存違反消息,請(qǐng)右鍵單擊“消息樹(shù)”窗格并選擇“保存消息列表”選項(xiàng)。
注意 :在SpyGlass Explorer中,您可以為選擇的層次結(jié)構(gòu)保存消息。更多信息,見(jiàn)SpyGlass Explorer用戶(hù)指南。
7.5
解決多種CDC共同的違例問(wèn)題
在大量的SpyGlass CDC違例中,大多數(shù)是以下情況:
●不正確的設(shè)置
●可以安全忽略的明顯問(wèn)題
本節(jié)描述了以下很多違例行為常見(jiàn)的根本原因:
●Crossing發(fā)生或者結(jié)束于black box
●錯(cuò)誤的Case Analysis設(shè)置
●源Flip-Flops產(chǎn)生靜態(tài)信號(hào)
●噪聲
在關(guān)注rule相關(guān)的問(wèn)題之前,應(yīng)該首先考慮解決上述問(wèn)題。解決了上述問(wèn)題并重新運(yùn)行SpyGlass CDC之后,您應(yīng)該會(huì)看到更小、更易于管理的問(wèn)題集。
注意:處理CDC問(wèn)題時(shí),千萬(wàn)不要通過(guò)waving。如果你采用這種方法,就有可能掩蓋一個(gè)真正的問(wèn)題。
7.5.1 Crossing發(fā)生或者結(jié)束于black box
SpyGlass CDC分析依據(jù)如下:
●能夠通過(guò)路徑進(jìn)行跟蹤
●一定程度的功能性理解
在black box的上游和下游都無(wú)法實(shí)現(xiàn)上述目標(biāo)。
要消除這個(gè)問(wèn)題,特定的約束為SpyGlass CDC提供一個(gè)部分模型,如下所述:
●使用以下方法為black box的輸入輸出分配一個(gè)域:
●對(duì)black box輸出使用abstract_port約束
●對(duì)black box輸入使用signal_in_domain約束
●使用assume_path約束對(duì)從black box輸入到輸出建模為直通路徑。
7.5.2 錯(cuò)誤的Case Analysis設(shè)置
檢查否正確地設(shè)置了set_case_analysis約束。
例如,你可能會(huì)看到錯(cuò)誤的原因是,所有的功能模式和所有的測(cè)試模式都是同時(shí)激活的,而實(shí)際上這些模式中的許多模式永遠(yuǎn)不會(huì)同時(shí)激活。要把test相關(guān)的信號(hào)用set_case_analysis約束。
7.5.3 源Flip-Flops產(chǎn)生靜態(tài)信號(hào)
如果源觸發(fā)器產(chǎn)生一個(gè)靜態(tài)信號(hào),可能不需要同步。比如說(shuō)配置信號(hào),這些信號(hào)通常在開(kāi)機(jī)/啟動(dòng)時(shí)設(shè)置,然后不再更改。可以從芯片架構(gòu)師獲得關(guān)于哪些信號(hào)屬于這種情況,并使用準(zhǔn)靜態(tài)約束quasi_static 來(lái)約束這些信號(hào)。
7.5.4 噪聲(Noise)
在SpyGlass CDC驗(yàn)證的主要挑戰(zhàn)之一是管理大量的違規(guī)。你可以通過(guò)特定的設(shè)置和設(shè)置檢查步驟來(lái)降低這些“噪聲”的干擾。
08
后記
CDC檢查是SOC RTL freeze之前必須要做的檢查,也是最重要的檢查之一。CDC檢查能夠提前發(fā)現(xiàn)功能時(shí)序仿真中發(fā)現(xiàn)不了的跨時(shí)鐘問(wèn)題,極大的減少了芯片失敗的風(fēng)險(xiǎn)。系統(tǒng)的學(xué)習(xí)SpyGlass CDC流程,深入的理解CDC的各種問(wèn)題,熟練的使用SpyGlass工具是一個(gè)資深的SOC設(shè)計(jì)人員必須具備的。
版權(quán)聲明:
本文作者:烓圍瑋未
首發(fā)于知乎專(zhuān)欄:芯片設(shè)計(jì)進(jìn)階之路
轉(zhuǎn)發(fā)無(wú)需授權(quán),請(qǐng)保留這段聲明。
評(píng)論
查看更多