이번에 Cache 설계할때 시뮬레이션 분석해보며 Verilog 스케줄링에 대해 부족했던 공부를 했다.
1. 해석 순서
- delay에 따른 event 혹은 순차논리의 sensitivity list에 포함된 신호가 들어왔을때 회로에 변화가 생긴다
2-1. non blocking assignment의 경우
(1) always block의 RHS만 전부 평가
(2) always block의 LHS 전부 업데이트
(3) 업데이트된 LHS를 기반으로 흔들리는 조합 회로 평가
2-2. blocking assignment의 경우
(1) always block한 줄 단위로 RHS평가 및 LHS 업데이트 바로 바로 수행
(2) always block 평가 끝나면 -> 변경된 reg 값으로인해 흔들리는 조합 회로 평가
- 다시 1로 돌아가기
2. 원인과 결과를 구분하자
ModelSim에서 확인할 수 있는

위와 같은 파형은 전부 결과 이다.
따라서 특정 시간의 변수값을 Simulation 에서 보이는 값으로 판단하면 안된다.
이는 특정 시간의 결과 로 원인을 판단하게되는 모순을 유발한다.
말이 조금 이상할 수 있는데,
쉬운 방법은
Simulation에서 특정 시간의 값이 비어있다고 생각하고, 해당 시간의 값을 평가해서 이를 기반으로 RHS를 평가하는것
이다.
근데 이게 말이 좀 이상할 수 있다...나는 이렇게 생각하긴하는데..