當(dāng)觸發(fā)器輸入端的數(shù)據(jù)和觸發(fā)器的時(shí)鐘不相關(guān)時(shí),很容易導(dǎo)致電路時(shí)序約束不滿足。 本章主要解決模塊間可導(dǎo)致時(shí)序 violation 的異步問題。
關(guān)于異步與同步的定義,許多地方都有介紹,細(xì)節(jié)上也有所差異。 本章主要的關(guān)注點(diǎn)是解決異步問題的方法,而不關(guān)心為什么會(huì)出現(xiàn)異步時(shí)鐘,也不關(guān)心異步電路的具體結(jié)構(gòu),僅從異步時(shí)鐘的時(shí)序結(jié)果去分析解決問題。
同步時(shí)鐘
數(shù)字設(shè)計(jì)中,一般認(rèn)為,頻率相同或頻率比為整數(shù)倍、且相位相同或相位差固定的兩個(gè)時(shí)鐘為同步時(shí)鐘。
或者理解為,時(shí)鐘同源且頻率比為整數(shù)倍的兩個(gè)時(shí)鐘為同步時(shí)鐘。 其實(shí),時(shí)鐘同源,就保證了時(shí)鐘相位差的固定性。 具體可以分類如下:
同源同頻同相位
此類時(shí)鐘頻率和相位均相同,是同步的。 時(shí)鐘間數(shù)據(jù)傳輸只要滿足正常的建立時(shí)間和保持時(shí)間即可,不需要特殊的同步設(shè)計(jì)。
同源同頻不同相位
兩個(gè)時(shí)鐘同頻但不同相位時(shí),只要相位差保持固定,也可以認(rèn)為是同步的。 因?yàn)橹灰WC在兩個(gè)時(shí)鐘間傳輸?shù)臄?shù)據(jù)信號(hào)延遲,固定的控制在合理范圍內(nèi),就不會(huì)導(dǎo)致時(shí)序問題。 而且,固定的時(shí)鐘延遲也可以在版圖級(jí)網(wǎng)表中修復(fù)。
固定的相位差可以理解為同源時(shí)鐘下兩個(gè)時(shí)鐘因路徑不同而導(dǎo)致的偏移。
同源不同頻但存在整數(shù)倍分頻比
此類時(shí)一個(gè)時(shí)鐘往往是另一個(gè)時(shí)鐘的分頻,即便存在相位差也是固定的。
當(dāng)單 bit 信號(hào)從慢時(shí)鐘域傳遞到快時(shí)鐘域時(shí),因?yàn)橥?,只要滿足建立時(shí)間和保持時(shí)間,快時(shí)鐘域總會(huì)采集到從慢時(shí)鐘域傳遞來的信號(hào)。
如下圖所示,clk2 上升沿總能采集從 clk1 域來的信號(hào) sig1,且采集到的信號(hào) sig2 高電平持續(xù)周期也是兩個(gè)時(shí)鐘的頻率比,即 2 個(gè)周期。
如果 clk2 域的信號(hào) sig2 只需要一個(gè)持續(xù)一個(gè)時(shí)鐘周期,則需要對(duì) sig1 進(jìn)行上升沿檢測(cè)。
同步信號(hào)間的上升沿檢測(cè)程序 Verilog 描述如下。
reg [1:0] sig2_r ;
always @(posedge clk2 or negedge rstn) begin
if (!rstn) sig2_r <= 2'b0 ;
else sig2_r <= {sig2_r[0], sig1} ;
end
assign sig2 = sig2_r[0] && !sig2_r[1];
此時(shí),快時(shí)鐘域的信號(hào) sig2 只會(huì)持續(xù)一個(gè)時(shí)鐘周期,如下圖所示。
當(dāng)單 bit 信號(hào)從快時(shí)鐘域傳遞到慢時(shí)鐘域時(shí),只要慢時(shí)鐘域能安全采集到從快時(shí)鐘域傳遞來的信號(hào),就不存在異步問題。 因?yàn)閮蓚€(gè)時(shí)鐘是同源的。 如下圖 sig1 到 sig2 的傳輸。
但是如果快時(shí)鐘域信號(hào)過窄,慢時(shí)鐘域有可能漏掉,如下圖 sig11 到 sig22 的傳輸。 此時(shí)就需要對(duì)快時(shí)鐘域的窄脈沖信號(hào)進(jìn)行展寬。
當(dāng)兩個(gè)時(shí)鐘頻率比相對(duì)較小時(shí),可以在快時(shí)鐘域采用對(duì)信號(hào)延遲的方法進(jìn)行展寬;
當(dāng)兩個(gè)時(shí)鐘頻率比相差較大時(shí),對(duì)信號(hào)延遲的方法會(huì)有些繁瑣,可在快時(shí)鐘域采用計(jì)數(shù)的方法來延長(zhǎng)單 bit 信號(hào)有效的時(shí)間。
利用延遲來展寬窄脈沖信號(hào)的方法 Verilog 描述如下。 因?yàn)?clk1 與 clk2 的頻率比為 2,只需要延遲 2 拍 clk2 時(shí)鐘即可。
reg [1:0] sig11_r ;
always @(posedge clk1 or negedge rstn) begin
if (!rstn) sig11_r <= 2'b0 ;
else sig11_r <= {sig11_r[0], sig11} ;
end
reg sig22_r ;
always @(posedge clk2 or negedge rstn) begin
if (!rstn) sig22_r <= 1'b0 ;
else sig22_r <= |sig11_r ;
end
assign sig22 = sig22_r ;
此時(shí),快時(shí)鐘域的信號(hào)被延遲 2 拍,總會(huì)被慢時(shí)鐘域采集到,如下圖所示。
總之,同源且頻率比為整數(shù)倍關(guān)系時(shí),可以理解為這兩個(gè)時(shí)鐘是同步的,不需要特殊的同步處理。 下面,簡(jiǎn)單介紹下異步時(shí)鐘的情況。
異步時(shí)鐘
工作在異步時(shí)鐘下的兩個(gè)模塊進(jìn)行數(shù)據(jù)交互時(shí),由于時(shí)鐘相位關(guān)系不可控制,很容易導(dǎo)致建立時(shí)間和保持時(shí)間 violation。 以下 3 種情況下的時(shí)鐘可以認(rèn)為是異步的。
不同源
由兩個(gè)不同的時(shí)鐘源產(chǎn)生的兩個(gè)時(shí)鐘是異步的,這是最常見的異步時(shí)鐘。 即便兩個(gè)時(shí)鐘頻率相同,但是也不能保證每次上電后兩者的相位或相位差是相同的,所以信號(hào)間的傳輸與時(shí)鐘關(guān)系也是不確定的。
同源但頻率比不是整數(shù)倍
此時(shí)兩個(gè)時(shí)鐘間相位差也可能會(huì)有多個(gè),例如同源的 7MHz 時(shí)鐘和 3MHz 時(shí)鐘,他們之間也會(huì)出現(xiàn)多個(gè)相位差,時(shí)序也不好控制。 一般情況下也需要當(dāng)異步時(shí)鐘處理。
同源雖頻率比為整數(shù)倍但不滿足時(shí)序要求
前面介紹同步問題時(shí)有說明,當(dāng)信號(hào)從快時(shí)鐘域傳遞到慢時(shí)鐘域時(shí),只要慢時(shí)鐘域能安全采集到從快時(shí)鐘域傳來的信號(hào),就不存在異步問題。 但如果信號(hào)在快時(shí)鐘域翻轉(zhuǎn)速率過快,慢時(shí)鐘域可能不會(huì)安全的采集到從快時(shí)鐘域傳來的信號(hào),這也可以認(rèn)為是異步問題。
一般來說,慢時(shí)鐘域時(shí)序約束較為寬松,快時(shí)鐘域較為嚴(yán)格。
如下圖,當(dāng)快時(shí)鐘域信號(hào)在慢時(shí)鐘域上升沿前翻轉(zhuǎn)了 2 次。 此時(shí),慢時(shí)鐘域會(huì)漏掉部分?jǐn)?shù)據(jù)。 而且,數(shù)據(jù)的快速變化也可能導(dǎo)致 timing violation。
這里只簡(jiǎn)單介紹下異步時(shí)鐘的分類情況,異步問題的解決方法請(qǐng)參考后面的章節(jié)。
-
信號(hào)
+關(guān)注
關(guān)注
11文章
2773瀏覽量
76539 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
1995瀏覽量
61012 -
異步電路
+關(guān)注
關(guān)注
2文章
48瀏覽量
11083 -
異步時(shí)鐘
+關(guān)注
關(guān)注
0文章
17瀏覽量
9399 -
同步時(shí)鐘
+關(guān)注
關(guān)注
0文章
44瀏覽量
3213
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論