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