합성 가능한 RTL 관례를 먼저 지키고 타이밍 클린을 목표로 설계하는 결
RTL 설계 실습에서 combinational loop가 있는 코드를 작성했다가 시뮬레이션은 통과했지만 합성에서 오류가 났습니다. 시뮬레이터가 합성 불가 구조를 허용한다는 걸 그때 알았습니다. 그 이후로는 코드를 작성하면서 합성 가능 서브셋 관례를 의식적으로 지킵니다. always 블록의 감도 리스트는 always_ff와 always_comb로 명시적으로 구분하고, 래치가 의도치 않게 생기지 않도록 default 분기를 빠뜨리지 않습니다. 타이밍 클린은 크리티컬 패스를 파이프라이닝으로 분리해서 맞춥니다.
4단계 파이프라인으로 재설계한 뒤 타이밍 위반이 없어졌습니다. 지금도 RTL 작성은 합성 관례를 코드 단계에서 지킵니다.