似乎在sequential cirucit內的if else判斷會有簡單的delay發生,並不會原本理想的狀況,舉例來說:
在curr_state==READ的時候
out輸出應該要是8,雖然當下的那個cycle的確curr_state應該是READ,但因為這是剛輸入進來的
所以curr_state==READ這個判斷,curr_state的值卻抓到上一次的
仔細想想也很合理,因為這本來就是posedge clk trigger的,在這個edge要同時將curr_state轉成READ,同時又是要這個state判斷為READ,out輸出成8
這本來就是不可能的,他在這個edge的瞬間值抓到就只是curr_stae==IDLE所以out輸出會是9,所以這個edge判斷必須等到下一個cycle。
總結來說,這個標題似乎下的有點錯誤,這不算是delay,而是edge trigger,本來就不可能將curr_state轉成READ後,又同時是以READ做判斷(一定是以IDLE做判斷),等到下個cycle時,edge trigger才會抓到READ。
沒有留言:
張貼留言