우선 clock gating이란 F/F에 들어가는 Clock을 제어하는 방법이라고 볼 수 있는데
사용자가 해당 모듈을 사용하지 않을 경우에는 clock을 주지 않는 것이다.
이렇게 되면 F/F은 그냥 현재 값을 유지하는 상태가 될 것이고, 사용하지 않을때는 data가 뭐가 출력이되도 상관이 없다면 이로인해 power 측면에서 이득을 볼 수가 있게 되는 것이다.
그래서 구글링을 해서 찾아본 power에 관한 수식은 아래와 같고
이걸보면 static과 dynamic으로 나뉘는데 내가 일하고 있는 front-end에서는
dynamic 쪽을 RTL 설계 당시에 반영하여 줄일수 있는데 이를 또 구글링해서 찾아보면
이렇게 회로도로 간략하게 보이는데 F/F에 enable 조건만 잘 맞춰주면 clock gating cell을 추가해서
power를 줄일수 있다고 함.(이 부분은 실제 library를 설정하여 돌려야 하는데 내가 해본적은 없다)
이걸 적용함으로 인해서 Power가 얼마나 줄어드는지 논문에 나오는데
집에서 직접 Tool을 이용하여 돌리고 싶지만 무료로 제공하는 tool이 아니기 때문에 돌려보지는 못해봄
단순히 code로보면
이런식으로 F/F 출력값 조건에 enable을 걸어주는 것으로 timing diagram을 보면 아래와 같다
이런식으로 F/F을 GCLK으로 받으면 나머지 clock이 없는 구간에서는 Power 소비가 작아지기 때문에
low power design에 가까워지는 것이라고 한다
이건 경험상으로 느끼는 건데,
입사 초반에는 아무것도 모르고 막 설계하다보면 enable 없이 그냥 단순히 latch로 설계되는 것들이 있는데
이걸 나중에 clock gating 할 때 저 enable 조건을 찾기 힘들어서 고생을 하게 된다.
그때는 우선 enable 조건을 입력과 출력이 같은지 check하는 것을 우선 enable로 처리하는게 1순위 인거 같음
enable = D ^ Q ; <- 이런식으로 enable을 찾는 방식도 있다
그리고 설계하다 보면 모든 register에는 enable이 있는게 나중을 위해 꼭 필요한 것 같다.
그 외에 방식은 좀만 검색해도 엄청 많이 나오는 것 같다
http://www.iject.org/vol61/1/4-Himanshu-Chaudhary.pdf
https://research.ijcaonline.org/volume108/number14/pxc3900419.pdf
'digital logic > knowlege' 카테고리의 다른 글
관성지연, 전달지연 (2) | 2020.10.20 |
---|---|
blocking vs non-blocking assignment(feat. race condition) (0) | 2020.10.19 |
signed arithmetic (0) | 2020.10.16 |
CDC(Clock domain crossing) (3) | 2020.10.13 |
댓글