티스토리 뷰

 

 

평화로운 나날이었다.

우리는 일정대로 설계를 마치고, 검증 coverage를 높이기 위한 마무리 작업에 한창이었다. 설계자가 놓칠 수 있는 부분에 대한 lint 체크도 완료하였고, 합성을 해보니 area, power, timing까지 문제 있어 보이는 부분은 없었다. 그렇게 과제 하나가 종료되고 다음 과제까지 잠시의 휴식이 주어지는 듯 했다. 

그렇다.

모두가 그렇게 생각했다.

 

그 연락이 있기 전까지는... 

 

 

 

항상 어떠한 문제가 생기면, 예고를 하고 이슈가 발생하는 경우는 없다. 몇월 며칠 몇 시에 문제가 생길테니, 단단히 준비하고 있으라고 먼저 알려줬더라면 이렇게 무방비로 당하고 있지만은 않았을 것이다.

 

타이슨 형님은 말씀하셨지, 처 맞기전에 정신 차리라고

 

과제 쪽에서 X(unknown) value가 우리가 설계한 block부터 뒤쪽으로 전파되고 있다는 연락이 급하게 전달됐다. 그럴 리가 없었다. block regression을 통해 몇십만 frame을 확인했는데, 그런 경우가 발견된 적은 없었다. 당연히 block을 top에 integration 하는 과정에서 실수가 있었거나 단순한 setting 이슈라고 생각했다. 

 

하지만 생각보다 문제는 심각했다. RTL simulation에서는 멀쩡하던 신호들이 net을 물리고 돌렸더니 무참하게 깨지고 있었다. setting에서 문제를 찾아볼 수는 없었고, 물론 integration도 실수 없이 잘되어 있었다. block 환경에서 이러한 현상이 재현될 수 있을까? 우리는 net을 통해 simulation을 진행하였다. 아뿔싸! 동일한 문제가 우리의 환경에서도 발생하고 있었다. RTL에서는 멀쩡했던 신호들이 net simulation에서는 동일하게 X를 뿌리고 있었다.

 

 

 

누구나 잘 알고 있듯이, digital의 세계는 0 아니면 1의 state를 갖는다. 그 외에는 노 관심! 물론 언젠가 양자 컴퓨팅이 상용화된다면 조금 달라질 수 있어도 아직은 기약할 수 없는 먼 미래의 일이다. 

 

X(unknown) : 0인지 1인지 알 수 없는 상태. Silicon에서는 경우에 따라, 0이 될 수도 1이 될 수도 있는 값.

 

simulation에서는 명확히 정의되지 않은 이 값을 X로 표현한다. 실제 chip에서는 0일수도 1일수도 있기에 X가 전파되면 정상적인 동작을 보장할 수 없다. 즉 X가 전파되는 문제는 chip이 어떻게 동작할지 알 수 없는 risk이기에 반드시 해결해야 한다.

 

현아가 부릅니다. "빨개요"

 

  "시뻘거네. 고놈 아주 시뻘게."

 

simulation 결과의 출력이 빨갛게 나오고 있다면, 우리에게도 빨간불이 켜진 것과 같다. 0 혹은 1이 제대로 나오고 있다면 초록색 신호가 이쁘게 출력되고, 알 수 없는 값이 나온다면 빨간색으로 우리에게 신호를 준다. 어서 빨리 고치라고.

 

그렇다면 이러한 문제가 왜 발생했을까? 원인은 chip size를 줄여보겠다는 심산으로 과감하게 async reset을 빼버린 수많은 Flip flop에서 찾을 수 있었다.

 

최근에 power 절감에 대한 요구가 올라가면서 sync 신호에 맞춰 단순히 delay를 하는 역할의 F/F에는 reset을 제거하였다. 이러한 방법으로 F/F size를 대략 20% 줄일 수 있고, reset을 모두 엮어야 하는 routing 측면에서도 부담을 줄일 수 있기 때문이다. 당연히 초기화가 되지 않으니 unknown value를 갖고 있게 되고, 이 값이 뒤로 전파되면 X가 나가게 되는 것이다. 하지만 우리도 이러한 사실을 모르지는 않았고, control logic에는 reset을 달아주고, 단순히 sync 신호로 채서 나가는 부분만 reset을 제거하였다. 하지만 몇몇 F/F이 data 값을 참조해서 만들어지는 부분이 있었고, 이를 control logic으로 봐야 했지만, delay logic으로 판단하고 reset을 넣지 않았다.

 

두 번째 실수는 simulation option을 제대로 주지 않은 것에 있었다.

 

이런 식으로 reset을 제거하는 컨셉을 사용하려면 rtl simulation도 판단 기준을 비관적(Pessimistic)으로 가져갈 수 있도록 옵션을 줘야 한다. 대부분의 rtl simulator들이 아무런 option을 지정해주지 않으면 긍정적(Optimistic) 관점으로 기준을 느슨하게 잡게 된다. unknown이 발생할 수 있는 상황에서도 긍정적으로 보기 때문에 X를 전파하지 않고, 0 혹은 1이 들어온 것처럼 동작하는 경우가 생긴다. 실제 chip에서는 0 혹은 1이 들어올 것이기 때문에 X가 조건으로 들어오더라도 이를 0 혹은 1로 인식해서 F/F이 정상적으로 초기화된 것처럼 인식한다.

 

Cadence사의 xrun을 사용한다면 xprop -F 옵션을 추가하면, 비관적 관점으로 simulation을 진행할 수 있다. 이전까지는 초록초록했던 신호들이 선홍빛 신호들로 물드는 것을 확인할 수 있을 것이다.

 

 

젤다의전설 야숨에서는 붉은 달이 뜨면, 몬스터들이 강해진다. 평화로운 하이랄 대륙에도 X가 전파된걸까?(뭐라니...)

 

 

 

애초에 잘 설계하면 된다.

 

응...?

 

너무 당연한 대답이라 당황했을지 모르지만. 누가 뭐라 해도 X가 전파될만한 여지를 만들어두지 않는 것이 가장 좋다. 그래도 이런 식상한 방법을 듣기 위해 이 블로그를 찾은 것은 아닐 테니 교과서 위주로 복습 예습을 철저히 했다는 수능 만점자의 답변 같은 솔루션 몇 개를 남기고 가겠다.

 

1. control logic에는 reset을 꼭 추가할 것.

2. case 문에는 default를 반드시 사용해서 latch가 생기지 않도록 할 것.

3. if-else 문보다는 ternary(삼항연산자)를 사용할 것

-> 이 부분은 https://www.techdesignforums.com/practice/guides/x-propagation/에서 알려주고 있는 방법인데, 사실 명확한 이유는 잘 모르겠다. 어차피 mux 일 텐데 human error를 줄여줄 수 있기 때문일까?

4. 앞서 설명했듯이 비관적 관점으로 simulation을 할 것. 특히나 reset을 제거한 F/F이 있다면 선택이 아닌 필수다.

5. X propagation을 체크해주는 Formal simulation tool을 사용할 것.

-> 이런 tool에는 Cadence의 Ascent lint, Mentor의 Questa AutoCheck, Jasper X-prop 등이 있다. 내가 사용해본 건 Jasper X-prop밖에 없는데, root causing 및 trace도 지원하고 있어서 사용하기에 어려움은 없었다. 다만 라이센스비가 상당히 비싼 것으로 알고 있다. 이게 바로 중소기업이 반도체 펩리스를 하기 어려운 이유 중에 하나다. 반도체 엔지니어가 퇴사하고 갈만한 곳이 없는 것도 같은 맥락. 규모의 경제. 다 돈 때문이야 돈.

 

 

 

예전부터 나누고 싶은 말이 있었다.

 

아는 만큼 보인다(아만보).

 

내가 이 말을 처음 알게 된 것은 블리자드사의 카드 게임인 하스스톤을 즐기면서였다. 특정 상황에서 카드의 메커니즘을 잘 모르고 실수를 할 때, 그 사람을 지칭하는 말이 아만보였다. 

 

대표적인 아만보의 사례. 상대 필드에 라이라가 있는데 밀하우스를 낸다? 상대 주문 코스트가 모두 0이 된 것을 보라ㅋㅋㅋㅋ 놀랍군요! 

 

x propagation에 대한 명확한 이해가 없었기에 설계에서부터 실수가 있었다. simulation 옵션도 몰랐기에 추가하지 않았고, 문제를 예방할 수 없었다.

 

머리가 나쁘면 몸이 고생한다더니, 무지(無知)로부터 시작된 risk가 ECO(Engineering Change Order)라는 참담한 결과를 선물했다.

 

아는 것이 힘이다.

 

그래 그 말도 맞지. 근데, 알아야 하는 가장 큰 이유는 본인의 시야가 내가 인지하고 있는 지식의 양과 정비례관계에 있다는 것이다. 그래서 나는 아는 만큼 보인다는 말을 더 좋아한다.

 

내가 이 블로그를 하게 된 이유도 더 많이 알기 위함이다. 

아만보가 되지 않고, 내가 몸담고 있는 분야에서 깊이 있고 넓은 시야를 갖고 싶다.

risk를 줄이고 더욱 완성도 높은 설계 역량을 갖추기 위해! 

 

 

 

 

댓글
공지사항