verilog HDL
[Verilog HDL] random / blocking, non-blocking
난 훈이
2022. 11. 2. 13:23
$random : 32bit signed random value // % value (value 미만의 값 출력)
$urandom : 32bit unsigned random value // % value (value 미만의 값 출력)
$urandom_range(min_value, max_value)
ex)
reg [31:0] random
always @ (posedge clk or negedge rstb)
if(!rstb)
random <= 0;
else
random <= $random / $urandom / $urandom_range
end
Guideline
- Sequential logic를 모델링할 때 Nonblocking 할당을 사용
- latch를 모델링할 때 Nonblocking 할당을 사용
- Combinational logic를 모델링할 때 항상 Blocking 할당을 사용
- 동일한 always 블록 내에서 Sequential 및 Combinational logic를 모두 모델링할 때 Nonblocking 할당을 사용
- 동일한 always 블록에서 Blocking 및 Nonblocking 할당을 혼합하지 마십시오.
- 두 개 이상의 always 블록에서 동일한 변수에 할당하지 마십시오.
- Nonblocking 할당을 사용하여 할당된 값을 표시하려면 $strobe를 사용하십시오.
- #0 지연을 사용하여 할당하지 마십시오. (합성불가능 (non-synthesizable))