학부 RTL 디자인, 에뮬레이터 런 과정에서 합성 불가 구문 제거
학부에서 에뮬레이터에 RTL을 올려보는 과정에서, 에뮬레이션 호환 설계가 왜 중요한지를 직접 겪었습니다. 처음 작성한 RTL에 initial 블록과 $display가 남아 있어서 에뮬레이터가 컴파일을 거부했습니다. 수정 후 올렸을 때 시뮬레이션에서 잡지 못한 타이밍 이슈가 에뮬레이션에서 바로 드러났습니다. 에뮬레이터는 실리콘에 가까운 속도로 동작하기 때문에 시뮬레이션에서 안 보이던 레이스 컨디션이 나타날 수 있다는 걸 배웠습니다.
에뮬레이션 호환 스타일로 처음부터 짜는 것이 나중에 포팅 비용을 줄인다는 걸 그 경험에서 알았습니다. 설계 초반부터 에뮬레이션 제약을 의식하면 실리콘 전달 후 디버그 사이클이 줄어든다는 걸 배웠습니다. 이후 저는 RTL을 작성할 때 합성 가능 여부를 코딩 단계부터 고려하는 습관이 생겼습니다.