看板 Electronics 關於我們 聯絡資訊
本人有個verilog如以下設計 always@(posedge appclk or posedge reset) if(reset) state <= 2'b00; else if(!enable) state <= 2'b00; else case(state[1:0]) 2'b00: if(condition1) state <= 2'b10; 2'b10: if(condition2) state <= 2'b11; 2'b11: if(condition3) state <= 2'b10; endcase 其中enable來自另一clk domain always@(posedge cpuclk or posedge cpurst) if(cpurst) enable <= 0; else if(condition4) enable <= cpuwrdata[1]; 簡而言之 由cpu填寫enable=1的時候 state才能跳動到其它數值 請問這個enable需不需要先synchronize到appclk再給state使用? (假設兩clk domain完全獨立) 與同事討論 一派說法是要: post-sim的時候觀察到 若enable active的時間太接近appclk rising edge 的確會發生timing violation 導致state跳到非00的值或是unknown 另一派說法是不用: 以我們的應用:enable剛啟動時 condition1,2,3都是inactive 因此appclk rising瞬間不論抓到enable是0還是1 依RTL要繼續由condition1,2,3來判斷state下一步 即然condition1,2,3都不動作 state自然該保持在00 下一Tenable穩定了 自然state也不會跳錯了 本人經驗尚淺 版友可否指正兩派說法的弱點之處? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.146.122.70 ※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1508493878.A.438.html
Leadgen: 敲2下,不會花你很多時間。而且不會出現奇怪的問題。 10/20 19:19
mmonkeyboyy: 一樓到也不是 這個東西是sync設計當出現的問題之一 10/20 20:37
mmonkeyboyy: 這個cross clock domain design (應該是這個名字) 10/20 20:38
mmonkeyboyy: 或是clock domain crossing 應該google 有很多 10/20 20:40
bakerly: 不敲兩級s會有metastable問題,但有metastable問題不代表 10/20 21:52
bakerly: 一定會死,enable從0變1時保證condiction都是0的確是一 10/20 21:52
bakerly: 種解法,但要注意的是enable從1變0 一樣有metastable問題 10/20 21:52
bakerly: ,這時state有可能會有短暫暫態,這個暫態會不會讓你的電 10/20 21:52
bakerly: 路掛掉你就要自已確認了。 10/20 21:52
ericute: 請問原po與b大,如果enable第一T抓到unknown,state不就 10/21 09:19
ericute: 會錯了嗎?為什麼還能確認是在00這個state呢,謝謝 10/21 09:19
ericute: 我想法是跟condition有無成立應該沒關係,可能還是有機 10/21 09:22
ericute: 會fail 10/21 09:22
bakerly: 如果enable 0的夠久,state 已經歸0,在enable變1時condu 10/21 10:46
bakerly: ction 也全為0的條件下, 這電路state的din在enable rise 10/21 10:46
bakerly: 的前後會一直維持在0,這時跟本不會有setup hold 的問題 10/21 10:46
bakerly: ,會出現unknow一定是前題沒被滿足。 10/21 10:46
ericute: 謝謝b大,了解沒注意到enable一開始會很長一段0。題外, 10/21 11:47
ericute: 若enable在一段0後,接著不是long pusle的話,是否就不 10/21 11:47
ericute: 適用原po說的第二種情形呢,還是得syn過,感謝 10/21 11:47
bakerly: 這電路state歸0只有靠enable為0來達成,但enable和state 10/21 14:20
bakerly: 非同步,所以enable falling時的確有可能造成state unkno 10/21 14:20
bakerly: w而向後擴散導致電路失敗,這和enable是不是long plus 沒 10/21 14:20
bakerly: 關係,再長的puls還是可能會死。 10/21 14:20
kuoll: 我是原po 謝謝b大詳細解釋 10/21 21:48
mmonkeyboyy: 這如果沒有實驗純跑模擬應該有的會給過 10/22 10:03
mmonkeyboyy: 但你真正實作下去會有點問題 這個現代tool會給warn 10/22 10:03
mmonkeyboyy: ing 才是 10/22 10:03
ahoyhoy: 完全不會toggle的有時候就直接拉 10/23 17:59
ahoyhoy: 一般還是會砍個二級sync一下 10/23 17:59