UVM & RTL/Verilog HDL

[27] Verilog HDL blocking할당문과 nonblocking할당문 설계과제

Return 2022. 3. 5. 19:01

★ 밑의 두 코드는 모두 동일한 형태의 always블록 두개로 구성되어 있다. 테스트벤치를 이용한 시뮬레이션을 통해 a,b의 출력 y1, y2를 확인하고 그 이유를 생각해 본다. 또한 두 코드를 합성하면 동일한 회로가 되는지, 아니면 서로 다른 회로가 되는지 확인해 본다. 

▣ TESTBENCH

 위 시뮬레이션을 살펴보면 blocking과 nonblocking할당문의 극명한 차이를 알 수 있다. 처음에 rst =1이 걸릴때는 y1_blk, y2_blk, y1_nonblk, y2_nonblk 모두 0과 1로 각각 초기화 되었지만 다시 rst = 0일때 값들이 달라지는 것을 알 수 있다.

 

 y1_blk와 y2_blk를 살펴보면 rst=0일때 y1으로 y2(1)가 들어가 y1역시 1이 됨을 알 수 있고 두번째 always구문에서 y2로 현재의 y1값(1)이 들어가 y2역시 1이 됨을 알 수 있고 이값이 계속유지됨을 알 수있다. 

 

 y1_nonblk와 y2_nonblk를 살펴보면 첫번째 always구문에서 y1으로 y2(1)이 들어가 y1이 1로 바뀌는 것은 blocking과 똑같지만 두번째 always구문에서는 y2로 이전의 y1값 0이 들어가기에 y2는 원래의 값 1에서 0으로  바뀌는 것을 알 수 있다. 이후 y1과 y2는 각각 0과1을 반복해서 출력해 나가는 것을 알 수있다.