본문 바로가기
Language/Verilog & SV

[Verilog] Blocking(=) vs Nonblocking(<=)

by VIR&US 2023. 7. 19.
반응형

목차


    Blocking assignments (BA)

    always 블록 내에서 실행 순서를 제어하기 위해 사용합니다.

    • 현재 명령문이 실행될 때까지 다음 명령문의 실행을 차단합니다.
    • 앞선 명령문이 실행되고 나서 뒷선 명령문들이 차례대로 실행됩니다.
    assume a = b = 0 initially;
    a = 1; //executed first
    b = a; //executed second
    

     

    a = 1, b = 1
    

    Nonblocking assignments (NBA)

    always 블록 내에서 실행 순서를 제어하기 위해 사용합니다.

    • 모든 문장의 RHS가 먼저 결정된 다음 LHS가 함께 할당됩니다.
    • NBA는 동시 또는 병렬로 명령문을 실행합니다.
    assume a = b = 0 initially;
    a ​<= 1; //executed first
    b <= a; //executed second
    

     

    a = 1, b = 0
    

    Example

    module non_block1;
            reg a, b, c, d, e, f;
            //blocking assignments
    
            initial begin
                   a = #10 1; // a will be 1 at time 10
                   b = #2 0; // b will be 0 at time 12
                   c = #4 1; // c will be 1 at time 16
            end
    
            //non-blocking assignments. Runs concurrently
            initial begin
                   d <= #10 1; // d will be 1 at time 10
                   e <= #2 0; // e will be 0 at time 2
                   f <= #4 1; // f will be 1 at time 4
            end
    
    endmodule
    

    Guideline

    • Sequential logic를 모델링할 때 Nonblocking 할당을 사용하세요.
    • latch를 모델링할 때 Nonblocking 할당을 사용하세요.
    • Combinational logic를 모델링할 때 항상 Blocking 할당을 사용하세요.
    • 동일한 always 블록 내에서 Sequential 및 Combinational logic를 모두 모델링할 때 Nonblocking 할당을 사용하세요.
    • 동일한 always 블록에서 Blocking 및 Nonblocking 할당을 혼합하지 마세요.
    • 두 개 이상의 always 블록에서 동일한 변수에 할당하지 마세요.
    • Nonblocking 할당을 사용하여 할당된 값을 표시하려면 $strobe를 사용하세요.
    • #0 지연을 사용하여 할당하지 마세요. 합성불가능합니다. (non-synthesizable)
    728x90
    반응형

    'Language > Verilog & SV' 카테고리의 다른 글

    [Verilog] Full-adder, Ripple-carry adder  (0) 2023.07.20
    [Verilog] Clock generator  (0) 2023.07.20
    [Verilog] Parameter  (0) 2023.07.19
    [System Verilog] 'break' and 'continue'  (0) 2023.07.19
    [Verilog] D F/F  (0) 2023.07.19