[問題] 以下verilog是否要synchronize?

看板Electronics作者 (kuoll)時間8年前 (2017/10/20 18:04), 編輯推噓8(8022)
留言30則, 6人參與, 8年前最新討論串1/1
本人有個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

10/20 19:19, 8年前 , 1F
敲2下,不會花你很多時間。而且不會出現奇怪的問題。
10/20 19:19, 1F

10/20 20:37, 8年前 , 2F
一樓到也不是 這個東西是sync設計當出現的問題之一
10/20 20:37, 2F

10/20 20:38, 8年前 , 3F
這個cross clock domain design (應該是這個名字)
10/20 20:38, 3F

10/20 20:40, 8年前 , 4F
或是clock domain crossing 應該google 有很多
10/20 20:40, 4F

10/20 21:52, 8年前 , 5F
不敲兩級s會有metastable問題,但有metastable問題不代表
10/20 21:52, 5F

10/20 21:52, 8年前 , 6F
一定會死,enable從0變1時保證condiction都是0的確是一
10/20 21:52, 6F

10/20 21:52, 8年前 , 7F
種解法,但要注意的是enable從1變0 一樣有metastable問題
10/20 21:52, 7F

10/20 21:52, 8年前 , 8F
,這時state有可能會有短暫暫態,這個暫態會不會讓你的電
10/20 21:52, 8F

10/20 21:52, 8年前 , 9F
路掛掉你就要自已確認了。
10/20 21:52, 9F

10/21 09:19, 8年前 , 10F
請問原po與b大,如果enable第一T抓到unknown,state不就
10/21 09:19, 10F

10/21 09:19, 8年前 , 11F
會錯了嗎?為什麼還能確認是在00這個state呢,謝謝
10/21 09:19, 11F

10/21 09:22, 8年前 , 12F
我想法是跟condition有無成立應該沒關係,可能還是有機
10/21 09:22, 12F

10/21 09:22, 8年前 , 13F
會fail
10/21 09:22, 13F

10/21 10:46, 8年前 , 14F
如果enable 0的夠久,state 已經歸0,在enable變1時condu
10/21 10:46, 14F

10/21 10:46, 8年前 , 15F
ction 也全為0的條件下, 這電路state的din在enable rise
10/21 10:46, 15F

10/21 10:46, 8年前 , 16F
的前後會一直維持在0,這時跟本不會有setup hold 的問題
10/21 10:46, 16F

10/21 10:46, 8年前 , 17F
,會出現unknow一定是前題沒被滿足。
10/21 10:46, 17F

10/21 11:47, 8年前 , 18F
謝謝b大,了解沒注意到enable一開始會很長一段0。題外,
10/21 11:47, 18F

10/21 11:47, 8年前 , 19F
若enable在一段0後,接著不是long pusle的話,是否就不
10/21 11:47, 19F

10/21 11:47, 8年前 , 20F
適用原po說的第二種情形呢,還是得syn過,感謝
10/21 11:47, 20F

10/21 14:20, 8年前 , 21F
這電路state歸0只有靠enable為0來達成,但enable和state
10/21 14:20, 21F

10/21 14:20, 8年前 , 22F
非同步,所以enable falling時的確有可能造成state unkno
10/21 14:20, 22F

10/21 14:20, 8年前 , 23F
w而向後擴散導致電路失敗,這和enable是不是long plus 沒
10/21 14:20, 23F

10/21 14:20, 8年前 , 24F
關係,再長的puls還是可能會死。
10/21 14:20, 24F

10/21 21:48, 8年前 , 25F
我是原po 謝謝b大詳細解釋
10/21 21:48, 25F

10/22 10:03, 8年前 , 26F
這如果沒有實驗純跑模擬應該有的會給過
10/22 10:03, 26F

10/22 10:03, 8年前 , 27F
但你真正實作下去會有點問題 這個現代tool會給warn
10/22 10:03, 27F

10/22 10:03, 8年前 , 28F
ing 才是
10/22 10:03, 28F

10/23 17:59, 8年前 , 29F
完全不會toggle的有時候就直接拉
10/23 17:59, 29F

10/23 17:59, 8年前 , 30F
一般還是會砍個二級sync一下
10/23 17:59, 30F
文章代碼(AID): #1PwSesGu (Electronics)