復位設計中的結構性缺陷及解決方案(二)
4. 解決方案
可用以下方式編寫(xiě)RTL代碼,以避免同步鏈的組合邏輯。
always @(posedge clk )
if(!sync_rst_b) begin
sync1 = 1‘b0;
end
else begin
sync1 = async_in; sync2 = sync1
end
在上面的代碼中,對sync2觸發(fā)器不使用復位,因此在同步鏈中不會(huì )實(shí)現組合信元。然而,需要注意sync2需要一個(gè)額外的周期才能復位,這不應導致設計出現任何問(wèn)題。
冗余復位同步器引起的問(wèn)題
1. 問(wèn)題
在使用多個(gè)異步時(shí)鐘的設計中,設計人員需要確保在目標寄存器使用的時(shí)鐘方面,異步復位的同步去斷言,否則可能導致目標觸發(fā)器發(fā)生時(shí)序違反,從而產(chǎn)生亞穩態(tài)。復位同步器被用來(lái)復位去斷言,與目標時(shí)鐘域同步。然而,只有在系統復位去斷言過(guò)程中有目標時(shí)鐘時(shí)才會(huì )發(fā)生復位去斷言時(shí)序違反。如果在復位去斷言時(shí)沒(méi)有時(shí)鐘,那么便不會(huì )有任何時(shí)序違反。因此,在設計多時(shí)鐘域模塊時(shí),設計人員可以讓編譯時(shí)間選項繞過(guò)該模塊中的那些復位同步器,并讓系統集成商根據對該模塊的時(shí)鐘可用性決定是否需要使用復位同步器。
此外,如果系統時(shí)鐘和異步時(shí)鐘比非常高,冗余同步器甚至會(huì )造成設計功能性問(wèn)題。下面描述了這個(gè)問(wèn)題。
圖12:冗余同步器的問(wèn)題
在上面的設計中,去斷言與sys clk同步的系統復位被饋送到(mod_clk域)的復位同步器,然后在mod_clk域邏輯中使用該復位。讓我們假定sys clk : mod_clk的時(shí)鐘頻率比大于6:1.默認不啟用mod_clk,以節省動(dòng)態(tài)功率。當用戶(hù)想要啟用mod_clk域邏輯的功能時(shí),便啟用該時(shí)鐘。在啟用了該時(shí)鐘后,有兩個(gè)mod_clk周期的延遲,其中,由于復位同步器導致整個(gè)mod_clk域邏輯都處于復位狀態(tài)。在該階段,如果一些數據交易從sys clk域開(kāi)始,將在mod_clk域丟失。
2. 解決方案
雖然這不是大問(wèn)題,但有時(shí)會(huì )在客戶(hù)一端造成混淆,因為該延遲對客戶(hù)不可見(jiàn)。 因此消除混淆的更好的方式是:
* 如果在全局復位去
評論