歡迎大家通過博客瀏覽我的歷史文章,博客園包含了目前為止所有的文章,瀏覽效果更佳,并且有評論留言功能,有任何問題都可以給我留言,微信后臺留言可能回復(fù)得不及時。
博客地址為:https://www.cnblogs.com/icparadigm/
[342] 什么是亞穩(wěn)態(tài)?亞穩(wěn)態(tài)是如何產(chǎn)生的?它有什么影響?
亞穩(wěn)態(tài)是一種電路狀態(tài),在電路正常工作所需的時間內(nèi),電路無法穩(wěn)定在的“ 0”或“ 1”邏輯電平的狀態(tài)。通常在建立時間和保持時間違例時發(fā)生。
亞穩(wěn)態(tài)可能會導(dǎo)致:
- 不可預(yù)測的系統(tǒng)行為。不同的扇出可能得到不同的信號值,從而導(dǎo)致設(shè)計進(jìn)入未知狀態(tài)。如果不穩(wěn)定的數(shù)據(jù)(“ 0”或“ 1”)傳播到設(shè)計中的不同部分,則可能導(dǎo)致高電流并最終芯片燒壞。
[343] 如何避免亞穩(wěn)態(tài)?
通過在設(shè)計中使用同步器,可以避免跨時鐘域時的亞穩(wěn)態(tài)。同步器讓信號有足夠的時間從不穩(wěn)定的振蕩(“ 0”和“ 1”)穩(wěn)定下來,從而獲得穩(wěn)定的輸出。對于跨時鐘域時可能出現(xiàn)的亞穩(wěn)態(tài),還可以使用包括握手機(jī)制、異步 FIFO 等方法。對于同步電路中,要進(jìn)行合理的設(shè)計與設(shè)計約束,避免建立時間和保持時間違例。
?
[344] 同步器的構(gòu)成是怎樣的?
以下是一個同步器電路的例子。這是一個兩個觸發(fā)器同步器,第一個觸發(fā)器等待一個時鐘周期,使輸入端的亞穩(wěn)態(tài)穩(wěn)定下來 / 逐漸消失,然后第二個觸發(fā)器在輸出端提供穩(wěn)定的信號。
值得注意的是,在信號輸入第二級時,第一觸發(fā)器的輸出仍然可能不穩(wěn)定(并導(dǎo)致第二級輸出信號變?yōu)閬喎€(wěn)態(tài))。在這種情況下,我們可以使用三個觸發(fā)器同步器電路。但是,通常兩個觸發(fā)器同步器電路足以消除亞穩(wěn)態(tài),使用三個觸發(fā)器的情況比較少。
?
[345] 什么是時鐘門控?
時鐘門控是一種低功耗技術(shù),通過關(guān)閉了設(shè)計中某些部分的時鐘達(dá)到降低功耗的目的。它是一種被用于控制時鐘網(wǎng)絡(luò)耗散功率的技術(shù),通過避免不必要的開關(guān)活動,減少設(shè)計消耗的動態(tài)功耗。
?
[346] 什么是電源門控,為什么要使用它?
電源門控是一種低功耗設(shè)計,可以關(guān)閉設(shè)計中不工作的部分。當(dāng)不工作時,電源門控可關(guān)閉電源,減少漏電功耗,從而降低了功耗。時鐘門控有助于降低動態(tài)功耗,而時鐘門控有助于降低靜態(tài)功耗。
?
[347] 多時鐘域設(shè)計會遇到哪些問題?
- 亞穩(wěn)性導(dǎo)致的同步失敗:時鐘在不同的時鐘域中以不同的頻率運行,并且在一個時鐘域中生成的信號在非常接近第二個時鐘域中時鐘有效沿的位置采樣時,輸出可能進(jìn)入亞穩(wěn)態(tài)狀態(tài),在設(shè)計中出現(xiàn)同步失敗。數(shù)據(jù)不一致:如果設(shè)計不合理,目標(biāo)時鐘域可能會接收錯誤的數(shù)據(jù)。例如:如果多個信號從一個時鐘域傳輸?shù)搅硪粋€時鐘域,所有這些信號同時變化,并且源和目標(biāo)時鐘沿彼此接近,那么這些信號中的某些可能會在一個時鐘中捕獲,而有一些信號可能在另一個時鐘周期中被捕獲,從而導(dǎo)致數(shù)據(jù)不一致。注意:這只是數(shù)據(jù)不一致的一個例子, 數(shù)據(jù)不一致的產(chǎn)生還有很多原因。數(shù)據(jù)丟失:如果設(shè)計不合理,則數(shù)據(jù)可能會在 CDC 邊界丟失。例如:如果信號從較快的時鐘域送到較慢的時鐘域,并且該信號的寬度僅等于一個時鐘周期(較快的時鐘),則可能會丟失以下信息:信號在較慢的時鐘域中的采樣沿前就變化了。注意:這只是數(shù)據(jù)丟失的一個例子, 數(shù)據(jù)丟失的產(chǎn)生還有很多原因。
?
[348] 如何處理跨時鐘域信號?
跨時鐘域處理有很多方法,具體取決于我們需要在不同的時鐘域之間傳遞 1 位還是多位。假設(shè)以下情況:多個信號從一個時鐘域傳輸?shù)搅硪粫r鐘域,所有信號同時變化,并且源和目標(biāo)活動時鐘沿彼此接近。在這種情況下,這些信號中的某些信號可能在目標(biāo)時鐘域的一個時鐘周期中被捕獲,而另一些信號在目標(biāo)時鐘域中的另一個時鐘周期中被捕獲,從而導(dǎo)致數(shù)據(jù)不一致性??梢允褂孟旅娣椒ㄔ趦蓚€時鐘域之間同步信號。
對于單 bit 跨時鐘域:
- 兩級或者三級同步器使用握手信號進(jìn)行同步
對于多 bit 跨時鐘域:
- 使用多周期路徑的方法進(jìn)行同步,將未經(jīng)同步的信號和同步控制信號一起發(fā)射到目標(biāo)時鐘域?qū)π盘栠M(jìn)行格雷碼編碼,由于相鄰的格雷碼計數(shù)只會變化 1bit,亞穩(wěn)態(tài)的發(fā)生會大大減小使用異步 FIFO 將多比特信號合并成 1bit,然后再通過多級同步器進(jìn)行傳輸
?
[349] 舉例信號從快時鐘域到慢時鐘域可能發(fā)生的問題
信號只持續(xù)一個時鐘周期(快時鐘域),可能導(dǎo)致慢時鐘域漏采樣。
?
[350] 異步復(fù)位的優(yōu)缺點有哪些?
優(yōu)點:
- 異步復(fù)位具有最高優(yōu)先級。保證數(shù)據(jù)路徑干凈。在有或沒有時鐘信號的情況下都能生效。
缺點:
- 如果在時鐘的有效沿(或附近)撤銷異步復(fù)位,則觸發(fā)器的輸出可能進(jìn)入亞穩(wěn)態(tài)。它對毛刺很敏感,可能導(dǎo)致虛假的復(fù)位。
?
[351] 同步復(fù)位的優(yōu)缺點有哪些?
優(yōu)點:
- 整個電路都是同步的更加容易仿真綜合以后可能會更加節(jié)省面積
缺點
- 需要脈沖擴(kuò)展,讓復(fù)位脈沖足夠長,保證能夠正確地被采樣會添加額外的組合邏輯同步復(fù)位需要時鐘才能復(fù)位。如果電路具有內(nèi)部三態(tài)總線,則需要單獨的異步復(fù)位,以防止內(nèi)部三態(tài)總線上的總線沖突。
?
[352] 什么是 Reset Recovery Time? 它和復(fù)位有什么關(guān)系?
復(fù)位恢復(fù)時間(Reset Recovery Time)是復(fù)位解除和時鐘信號有效沿之間的時間。如果發(fā)生復(fù)位解除,并且在非常小的時間窗口內(nèi),如果時鐘信號邊沿來臨,則可能導(dǎo)致亞穩(wěn)態(tài)。這是因為復(fù)位解除置位后所有信號將不滿足下一個觸發(fā)器輸入的時序條件。
?
[353] 什么是頻率合成器?舉一個頻率合成器的例子?
頻率合成器是一種可以從單個穩(wěn)定參考頻率生成新頻率的電路。例如:為了從參考 100 MHz 時鐘信號生成 200MHz 時鐘信號,PLL 通常用作頻率合成器。
?
[354] 什么是 PLL?
PLL 全稱是“Phase Locked Loop,鎖相環(huán)”。簡而言之,它是一種反饋電路(準(zhǔn)確地說是控制系統(tǒng)),用于生成輸出信號,該輸出信號的相位與輸入信號的相位有關(guān)。它用于相位 / 頻率調(diào)制和解調(diào),還可以用作頻率合成器。PLL 由三個功能塊組成:
?
[355] 畫出 PLL 的框圖
這里是參考頻率,是輸出頻率,這樣,這意味著
?
覆蓋率
[356] 代碼覆蓋率與功能覆蓋率的區(qū)別是什么?
代碼覆蓋率:代碼覆蓋率是一種度量,用于度量給定測試 case 對設(shè)計代碼(HDL 模型)進(jìn)行測試的程度。啟用后,模仿真器會自動提取代碼覆蓋率。
功能覆蓋率:功能覆蓋率是用戶定義的度量標(biāo)準(zhǔn),用于度量已執(zhí)行了多少 spec(如測試計劃中的功能所列舉的)。它可以用來衡量對于 spec 的測試充分性。它是用戶定義的,不會自動生成。它也不依賴于設(shè)計代碼,因為它是根據(jù) spec 實現(xiàn)的
[357] 代碼覆蓋率有哪幾種?
- Statement/Line coverage:用于衡量在仿真測試期間測試了多少條語句(行)。一般行覆蓋率的目標(biāo)是 100%。在下面的代碼中,有 4 行或語句將在 Statement/Line coverage 中進(jìn)行收集。
always @ (posedge clk) begin
if( A > B) begin //Line 1
Result = A - B; //Line 2
end else begin //Line 3
Result = A + B; //Line 4
end
end
- Block coverage:在 begin-end 或 if else 或 case 語句之間或 while 循環(huán)或 for 循環(huán)之間的一組語句稱為塊。塊覆蓋率衡量的是在仿真過程中是否覆蓋了這些類型的塊碼。塊覆蓋范圍看起來類似于語句覆蓋范圍,不同之處在于塊覆蓋率包含了一組語句。在下面的的示例代碼中,有三個代碼塊
always @ (posedge clk) begin //always block
if( A > B) begin // if block
Result = A - B;
end else begin // else block
Result = A + B;
end
end
Branch/Decision coverage:分支覆蓋率評估 HDL 代碼中的條件,例如 if-else,case 語句和三元運算符(?:)語句,并檢測是否同時包含真假情況。在上面的示例中,只有一個分支(if A> B),分支覆蓋率會檢查是否真假兩個分支都被觸發(fā)了。
Conditional Coverage and Expression coverage:條件覆蓋率會檢查 HDL 中的所有布爾表達(dá)式,并計算該表達(dá)式為真或假的次數(shù)。表達(dá)式覆蓋率檢查語句的右側(cè),統(tǒng)計所有可能組成的真值表的覆蓋程度。以下是包含 3 個布爾變量的表達(dá)式,它們決定了 Result 變量為 true 或 false
Result = (A && B) || (C)
針對 A,B 和 C 的所有可能情況,如下創(chuàng)建真值表。條件覆蓋率可以衡量此真值表的所有行是否都被覆蓋。
- Toggle coverage:翻轉(zhuǎn)覆蓋率可衡量仿真運行期間設(shè)計中信號和端口的翻轉(zhuǎn)率。這有助于識別哪些信號一直沒有翻轉(zhuǎn)。FSM coverage:狀態(tài)機(jī)覆蓋衡量仿真期間是否所有狀態(tài)機(jī)的狀態(tài)都被覆蓋到。
?
[358] 如果功能覆蓋率接近 100%而代碼覆蓋率不足 60%,說明了什么?
仿真器會基于 testcase 提取代碼覆蓋率,而功能覆蓋率則是用戶定義的指標(biāo)。低代碼覆蓋率表明并非設(shè)計代碼的所有部分都經(jīng)過了測試。高功能覆蓋率表明,用戶從測試計劃中捕獲的所有功能都得到了測試。如果覆蓋率指標(biāo)顯示低代碼覆蓋率和高功能覆蓋率,原因可能是:
- 可能有許多設(shè)計代碼未按照 spec 用于實現(xiàn)的功能。(無效的代碼)用戶定義的功能覆蓋率量中存在一些錯誤。測試計劃未捕獲所有設(shè)計功能 / 場景 / 邊界,或者缺少功能覆蓋率監(jiān)視器。代碼覆蓋率中未覆蓋的設(shè)計代碼可能會映射到這些功能上。在實現(xiàn)功能覆蓋率監(jiān)視器時可能存在潛在的錯誤,導(dǎo)致它們收集了錯誤的覆蓋率。因此,在驗證項目中,對用戶定義的功能覆蓋率指標(biāo)及其實現(xiàn)進(jìn)行適當(dāng)?shù)臋z查很重要。
?
[359] 如果代碼覆蓋率接近 100%而功能覆蓋率不足 60%,說明了什么?
- 沒有按照 spec 在設(shè)計中實現(xiàn)了所有功能。因此,設(shè)計代碼無法實現(xiàn)所有功能在功能覆蓋率監(jiān)視器中可能存在潛在的錯誤,即使設(shè)計代碼實現(xiàn)了功能,也無法覆蓋它們。功能正確,但是由于發(fā)送的激勵不正確,對應(yīng)的功能覆蓋率無法收集。
?
[360] 覆蓋組可以在類內(nèi)部定義和使用嗎??
是的,可以在類內(nèi)部定義覆蓋組。這對于基于測試平臺結(jié)構(gòu)(例如事務(wù),序列,檢查器,監(jiān)視器等)實現(xiàn)功能覆蓋率非常有用。