Re: [問題] veriog撰寫問題

看板Electronics作者 ( N￾NN￾N)時間16年前 (2009/08/07 23:04), 編輯推噓2(204)
留言6則, 3人參與, 最新討論串10/10 (看更多)
※ 引述《felghana (adol)》之銘言: : : reg incr_d; : : always @ ( posedge reset or posedge clk ) : : if ( reset ) incr_d <= 1'b0; : : else incr_d <= incr; : : wire incr_p = incr & ~incr_d; : : reg decr_d; : : always @ ( posedge reset or posedge clk ) : : if ( reset ) decr_d <= 1'b0; : : else decr_d <= decr; : : wire decr_p = decr & ~decr_d; : : reg [12:0] mod_n; : : always @ ( posedge reset or posedge clk ) : : if ( reset ) mod_n <= 13'h000; : : else if ( incr_p ) mod_n <= mod_n + 13'h00a; : : else if ( decr_p ) mod_n <= mod_n - 13'h00a; : 講一下我對這個電路的想法好了 各位大大看有沒有錯 : 1.假定某一時間incr=1 那麼incr_p也會立刻變為1 : 2.當離這個時間最接近的那一次posedge clk發生的瞬間 : 會同時進入三個always block 因此incr_d=1造成incr_p=0 : 3.同時間第三個always block也要根據incr_p的值來決定進入哪個判斷式 : 我的疑問就是 這樣2和3同時發生 能確定一定會跑mod_n <= mod_n + 13'h00a 嗎? : 到底是incr_p先變為0 再做判斷 : 還是incr_p還沒變為0時 就做完判斷了 : 我的電路要後者才是正確的 : 不知道我有哪邊想錯? 還請指教 關於第一點是當incr正緣觸發而且時脈為stable 0 or stable 1的狀態 同時你的incr要維持至少一個clock cycle以上的時間 為stable 0 , incr_p才會變為1 並非incr=1 而incr_p就立刻變為1 2以及3若以這樣子的設計是會同時發生的 但是因為incr_p前面有一個and2存在會有 一些延遲 所以當時脈正緣觸瞬間incr_p不會馬上變化 仍會維持1一段時間 因此此時 正緣觸發的時脈所戳到的incr_p為高電位 所以是會執行 mod_n + 13'h00a的 只是and2以及decr_d <= decr這個暫存器所產生的延遲是否能夠維持足夠的hold time 給mod_n去做判斷呢? 那我又要如何控制其hold time讓他夠長呢 ? 放心吧 EDA工具就是為此而生的 只要你的設計是同步電路 編譯完後軟體會report fmax 只要你的時脈有符合這些問題都不會產生 軟體都幫你處理好了 只是以目前這樣子的 設計仍會有亞穩態的問題 修正一下我的說法 要解決亞穩態(metastable)應該要在加2級xDFF 用"3級"去 sampling always @ ( posedge reset or posedge clk ) if ( reset ) begin incr_d <= 1'b0; incr_d1 <= 1'b0; end else begin incr_d <= incr; incr_d1 <= incr_d; end 這前兩級是先做同步化解決metastable的問題 always @ ( posedge reset or posedge clk ) if ( reset ) incr_d2 <= 1'b0; else incr_d2 <=incr_d1; wire incr_p = ~ incr_d2 & incr_d1 ; 然後這邊是rising edge sampling -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.77.205

08/07 23:25, , 1F
恩 我有改了 並且模擬結果也是我要的 謝謝
08/07 23:25, 1F
※ 編輯: horsehead 來自: 61.228.77.205 (08/07 23:43) ※ 編輯: horsehead 來自: 61.228.77.205 (08/07 23:44)

08/07 23:48, , 2F
若要更保險就把incr_p再經過一個DFF變成全同步信號再出
08/07 23:48, 2F

08/07 23:49, , 3F
去只是這樣子他又會在多延一個clock 系統端需考慮
08/07 23:49, 3F

08/07 23:51, , 4F
這樣子在整體架構上會不會有影響
08/07 23:51, 4F

08/08 16:35, , 5F
這邊我犯了一個錯,我直覺把incr當成是sync的訊號,如果不
08/08 16:35, 5F

08/08 16:35, , 6F
是還得再考慮metastable的問題沒錯。
08/08 16:35, 6F
文章代碼(AID): #1AV49eSs (Electronics)
討論串 (同標題文章)
文章代碼(AID): #1AV49eSs (Electronics)