close

Blocking & Non Blocking


1.        Blocking的語法 =  //循序式的方式執行程式


Exp :


        always@(posedge clock)


        begin


                Data = A&B;                   // blocking會先執行第一行程式


                OUT = A+B;                   // 緊接著再執行第二行程式


        end


注意 : 電路都使用blocking的方式設計會造成電路串連的太長,導致延遲太多時間。


 


2.        Non blocking的語法 <=  //平行式的方式執行程式


Exp :


        always@(posedge clock)


        begin


                Data <= A&B;         // non blocking會同時執行


                OUT <= A+B;                 //


        end


注意 : 電路都使用non blocking的方式設計會造成電路面積加大(成本提高),因為並行處理的輸出都要額外給予一個暫存器來儲存。


 


        對於新手而言,該如何準確的判斷哪些時候該選用blocking,哪些時候又該選用non blocking來做處理,有相當程度的困難。因此通常會給予新手一些建議,避免設計電路上的錯誤。


1.        組合邏輯assign電路採用blocking,且必須搭配wire


2.        循序邏輯always電路採用non blocking,且必須搭配reg


 


# 組合邏輯à與時間無關,大多作為運算用。(如加、減法器)


# 循序邏輯à與時間有關,大多作為記憶資料,但不能運算。(如正反器)

arrow
arrow
    全站熱搜

    jk3527101 發表在 痞客邦 留言(0) 人氣()