引言
??本文主要介紹了亞穩(wěn)態(tài)的分析與處理。
一、亞穩(wěn)態(tài)的相關(guān)概念
??亞穩(wěn)態(tài)(Metastability)是指 D 觸發(fā)器無(wú)法在某個(gè)規(guī)定的時(shí)間段內(nèi)(決斷時(shí)間)達(dá)到一個(gè)可確認(rèn)的狀態(tài)(0 或 1),進(jìn)而處于一個(gè)振蕩的不確定狀態(tài)。
??亞穩(wěn)態(tài)的具體表現(xiàn)是當(dāng)一個(gè) D 觸發(fā)器進(jìn)入亞穩(wěn)態(tài)時(shí),既無(wú)法預(yù)測(cè)該單元的輸出電平(不確定是 0 還是 1),也無(wú)法預(yù)測(cè)何時(shí)輸出才能夠穩(wěn)定下來(lái)(通常情況下,一個(gè)時(shí)鐘、或者兩個(gè)時(shí)鐘的時(shí)間之內(nèi)可以返回穩(wěn)態(tài))。在這個(gè)達(dá)到穩(wěn)定之前的時(shí)間內(nèi),D 觸發(fā)器輸出一些中間級(jí)電平,或者可能處于振蕩狀態(tài),或者可能會(huì)沿著信號(hào)通道上的各個(gè) D 觸發(fā)器級(jí)聯(lián)式傳播下去,最終導(dǎo)致系統(tǒng)的崩潰。
??亞穩(wěn)態(tài)的產(chǎn)生原因是 D 觸發(fā)器的建立時(shí)間和保持時(shí)間在時(shí)鐘上升沿左右定義了一個(gè)時(shí)間窗口(亞穩(wěn)態(tài)窗口)(較新的邏輯器件會(huì)有較小的亞穩(wěn)態(tài)窗口),在這段時(shí)間內(nèi),輸入信號(hào)和時(shí)鐘都應(yīng)該保持不變。如果 D 觸發(fā)器的輸入數(shù)據(jù)在這個(gè)時(shí)間窗口內(nèi)發(fā)生變化(數(shù)據(jù)更新),那么就違反了建立時(shí)間和保持時(shí)間的要求,從而產(chǎn)生了時(shí)序違規(guī)(Timing Violation)。此時(shí) D 觸發(fā)器內(nèi)部的一個(gè)節(jié)點(diǎn)(一個(gè)內(nèi)部節(jié)點(diǎn)或者要輸出到外部節(jié)點(diǎn))可能會(huì)在一個(gè)電壓范圍內(nèi)浮動(dòng)(徘徊在一個(gè)中間電平狀態(tài)),無(wú)法確定最終是穩(wěn)定在邏輯 0 或者是邏輯 1 的狀態(tài),而在這段時(shí)間里,數(shù)據(jù)輸出端 Q 為毛刺、振蕩狀態(tài),而不是等于數(shù)據(jù)輸入端 D 的值。
??亞穩(wěn)態(tài)的隨機(jī)輸出表現(xiàn)為 D 觸發(fā)器輸出端 Q 在時(shí)鐘上升沿之后,比較長(zhǎng)的一段時(shí)間處于不確定的狀態(tài),在這段時(shí)間里 Q 端在 0 和 1 之間處于振蕩狀態(tài),而不是等于數(shù)據(jù)輸入端 D 的值,這段時(shí)間稱(chēng)為決斷時(shí)間。經(jīng)過(guò)決斷時(shí)間之后 Q 端將穩(wěn)定為 0 或 1 ,但是具體是 0 或 1 卻是隨機(jī)的,與輸入沒(méi)有必然關(guān)聯(lián)。亞穩(wěn)態(tài)無(wú)法根除,但是可以減小亞穩(wěn)態(tài)發(fā)生的概率。
二、亞穩(wěn)態(tài)的解決方法
- 降低系統(tǒng)時(shí)鐘頻率;
- 提高時(shí)鐘信號(hào)邊沿變化速度(這個(gè)取決于晶振、器件、工藝等等);
- 用反應(yīng)更快的 DFF;
- 引入同步機(jī)制,防止亞穩(wěn)態(tài)的傳播;
- 相位控制技術(shù),PLL 控制分頻與相位。
三、亞穩(wěn)態(tài)的解決案例
??對(duì)于以上的第 4 點(diǎn),有多級(jí) D 觸發(fā)器級(jí)聯(lián)處理方式(節(jié)拍),可對(duì)異步信號(hào)進(jìn)行同步處理??梢钥闯?,前面基于時(shí)鐘域 Clk_a 的信號(hào)發(fā)送過(guò)來(lái),在基于時(shí)鐘域 Clk_b 的時(shí)鐘下進(jìn)行采樣,可能會(huì)出現(xiàn)采樣時(shí)鐘上升沿剛好出現(xiàn)在數(shù)據(jù)變化的那一刻,于是,就會(huì)產(chǎn)生亞穩(wěn)態(tài)。
??當(dāng)?shù)谝粋€(gè)寄存器發(fā)生亞穩(wěn)態(tài)后,經(jīng)過(guò) Tmet 的振蕩穩(wěn)定后,第二級(jí)、或者第三級(jí)寄存器就能采集到一個(gè)穩(wěn)定的值,避免了亞穩(wěn)態(tài)跟隨著電路一直傳遞下去,從而最終導(dǎo)致的系統(tǒng)的崩潰。
打兩拍電路圖
打兩拍時(shí)序圖
打兩拍時(shí)序圖
四、亞穩(wěn)態(tài)的 Verilog 代碼(打兩拍、慢到快)
reg [1:0] signal_r; // 兩級(jí)緩沖器、兩級(jí)寄存器,打完兩拍之后,才可以進(jìn)行組合邏輯的操作
always @(posedge clkb or negedge rst_n)begin
if(!rst_n)
signal_r <= 2'b00;
else begin
signal_r <= {signal_r[0], signal_in};//signal_in 是基于 clka 的
end
end
assign signal_out = signal_r[1];
五、亞穩(wěn)態(tài)的 Verilog 代碼(打兩拍、快到慢)
module Sync_Pulse( // clka 下生成展寬信號(hào),展寬信號(hào)同步到 clkb,再同步回 clka
input clka,
input clkb,
input rst_n,
input pulse_ina, // clka下的脈沖;
output pulse_outb,// 上升沿檢測(cè);
output signal_outb// clkb下的脈沖;
);
reg signal_a;
reg [2:0] signal_b_r;
reg [1:0] signal_a_r;
//-------------------------------------------------------
// 在 clka 下,生成展寬信號(hào) signal_a
always @(posedge clka or negedge rst_n)begin
if(!rst_n)
signal_a <= 1'b0;
else if(pulse_ina) // 檢測(cè)到輸入信號(hào) pulse_ina 被拉高,則拉高 signal_a
signal_a <= 1'b1;
else if(signal_a_r[1]) // 檢測(cè)到反饋信號(hào) signal_a_r[1] 被拉高,則拉低 signal_a
signal_a <= 1'b0;
else
signal_a <= signal_a;
end
//-------------------------------------------------------
// 在 clkb 下打三拍,前兩個(gè)用于同步 signal_a,后一個(gè)用于生成脈沖信號(hào)、// 輸出信號(hào)
always @(posedge clkb or negedge rst_n)begin
if(!rst_n)
signal_b_r <= 3'b000;
else
signal_b_r <= {signal_b_r[1:0], signal_a};
end
assign pulse_outb = ~signal_b_r[2] & signal_b_r[1];// 判斷上升沿;
assign signal_outb = signal_b_r[2];
// 不需要用到跳變沿的來(lái)自同一時(shí)鐘域的輸入,沒(méi)有必要對(duì)信號(hào)進(jìn)行寄存;
// 需要用到跳變沿的來(lái)自同一時(shí)鐘域的輸入,寄存一次即可;
// 需要用到跳變沿的來(lái)自不同時(shí)鐘域的輸入,需要用到 3 個(gè)觸發(fā)器,前兩個(gè)用// 于同步,第 3 個(gè)觸發(fā)器的輸出和第 2 個(gè)的輸出經(jīng)過(guò)邏輯門(mén)來(lái)判斷跳變沿。
//-------------------------------------------------------
// 在 clka 下打兩拍,采集 signal_b_r[2],生成 signal_a_r[1] 用于反饋拉// 低 signal_a
always @(posedge clka or negedge rst_n)begin
if(!rst_n)begin
signal_a_r <= 2'b00;
end
else begin
signal_a_r <= {signal_a_r[0], signal_b_r[2]};
end
end
endmodule
-
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120430 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1734瀏覽量
131511 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2000瀏覽量
61166 -
亞穩(wěn)態(tài)
+關(guān)注
關(guān)注
0文章
46瀏覽量
13288
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論