作者horsehead ( NNNN)
看板Electronics
標題Re: [問題] veriog撰寫問題
時間Fri Aug 7 23:04:07 2009
※ 引述《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
1F:推 felghana:恩 我有改了 並且模擬結果也是我要的 謝謝 08/07 23:25
※ 編輯: horsehead 來自: 61.228.77.205 (08/07 23:43)
※ 編輯: horsehead 來自: 61.228.77.205 (08/07 23:44)
2F:→ horsehead:若要更保險就把incr_p再經過一個DFF變成全同步信號再出 08/07 23:48
3F:→ horsehead:去只是這樣子他又會在多延一個clock 系統端需考慮 08/07 23:49
4F:→ horsehead:這樣子在整體架構上會不會有影響 08/07 23:51
5F:推 bakerly:這邊我犯了一個錯,我直覺把incr當成是sync的訊號,如果不 08/08 16:35
6F:→ bakerly:是還得再考慮metastable的問題沒錯。 08/08 16:35