Re: [問題] veriog撰寫問題

看板Electronics作者 (愛莎妮亞)時間16年前 (2009/08/07 01:18), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串8/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同時發生 我有辦法讓他跑進else if(incr_p)這個判斷式裡面嗎? : 到底是incr_p先變為0 再做判斷 : 還是incr_p還沒變為0時 就做完判斷了 : 我的電路要後者才是正確的 : 不知道我有哪邊想錯? 還請指教 c1 c2 _________ _________ __| |_________| clk _________________________ ______| incr _________ ___________________| incr_d _______________ ___| |_________ incr_p 如果你incr波型從c1之前為low,然後在c1、c2之間變化成high 這樣子你的incr_p如上圖的波型在c2時 第3個always就會跑進else if(incr_p)這個assignment 反之,在c1、c2之間變化成low,這樣子就會造成 第3個always跳過else if(incr_p)這個assignment 因此結論就是要看你的incr怎麼給,會影響第3個always的判斷 進而造成輸出的不同!! ------------------------------------------------------- 另帶一提,incr訊號可能會和第3個always的clk產生raceing!! 原因如下: 第1、2個always block下面的wire incr_p、decr_p屬於 Mealy Machine 輸出 然後成為第3個always的控制訊號,然後控制著mod_n的輸出 因此會造成在clk trigger時,第3個always的輸入在 同時間incr也發生變化,可能會造成第3個always選擇 else if(incr_p)或是不選擇else if(incr_p) 因此建議: 考慮清楚你的incr訊號與clk之間的關係 如果可以,你也許可以選擇把incr_p、decr_p做成 Moore Machine 輸出 這樣子電路行為也許能更符合你的需求!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.63.117.152

08/07 17:31, , 1F
這線路前題是incr/decr要大於一個CLK,不然會有機會出錯
08/07 17:31, 1F

08/07 20:09, , 2F
恩 我的設計絕對是大於1的clk的時間
08/07 20:09, 2F
文章代碼(AID): #1AUn1PDW (Electronics)
討論串 (同標題文章)
文章代碼(AID): #1AUn1PDW (Electronics)