본문 바로가기

verilog HDL

[Verilog HDL] random / blocking, non-blocking

$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

  1. Sequential logic를 모델링할 때 Nonblocking 할당을 사용
  2. latch를 모델링할 때 Nonblocking 할당을 사용
  3. Combinational logic를 모델링할 때 항상 Blocking 할당을 사용
  4. 동일한 always 블록 내에서 Sequential 및 Combinational logic를 모두 모델링할 때 Nonblocking 할당을 사용
  5. 동일한 always 블록에서 Blocking 및 Nonblocking 할당을 혼합하지 마십시오.
  6. 두 개 이상의 always 블록에서 동일한 변수에 할당하지 마십시오.
  7. Nonblocking 할당을 사용하여 할당된 값을 표시하려면 $strobe를 사용하십시오.
  8. #0 지연을 사용하여 할당하지 마십시오. (합성불가능 (non-synthesizable))

'verilog HDL' 카테고리의 다른 글

[Verilog HDL] 실습2  (0) 2022.06.03
[Verilog HDL]  (0) 2022.06.02
[Verilog] F/F or Counter  (0) 2022.03.21
[Verilog] Task / Function  (0) 2022.03.21
[Verilog] Behavior modeling 설계  (0) 2022.03.19