2015年9月29日 星期二

verilog隨手記(一) 關於sequential circuit內的if else判斷會有delay

似乎在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。