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