반응형
목차
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 |