오늘은 시뮬레이션에 대하여 얘기를 좀 하려고 합니다. 디지탈/아날로그/혼성모드 회로 설계에 있어서 빼놓을 수 없는 놈이 시뮬레이션 입니다. 시스템이 복잡해지면 질수록 시뮬레이션의 중요성은 더욱 커집니다. 복잡한 시스템에서는 시뮬레이터의 정확성도 중요하지만 시뮬레이터를 통하여 오류를 잡아내는 것이 더 큰 비중을 차지 하고 있는 것 같습니다.

필자가 공부하고 일을 시작한 90년대 초 중반만 해도 시뮬레이션을 많이 하면 교수님과 선배들한테 혼났죠. 실력이 없으니까 시뮬레이션만 돌린다고.… 그때만 해도 시뮬레이션은 내가 설계한 회로를 검증하는 최종 수단이었고 대부분의 동작은 손과 머리로 계산을 해야 했습니다. 가능한 적은 회수의 시뮬레이션을 하는 사람이 ‘실력있는 사람’ 이었습니다. 그 당시에는 그랬습니다. 컴퓨터도 무지 비쌌고 (워크스테이션 이라고 했나요?) 지금 처럼 성능도 좋지 않았죠. 게다가 시뮬레이터 가격도 엄청 비쌌기 때문에 많은 resource를 잡아먹지 않는 사람이 ‘실력있는 사람’ 이었죠. 물론, 지금도 그렇습니다. 실력 있는 사람은 축척된 지식과 직관을 가지고 시뮬레이션을 하기 전에 대략적인 성능을 계산해 낼 수 있습니다.  하지만, 상황은 약간 다르죠. 가장 큰 변화는 시스템이 너무 크고 복잡해졌다는 거죠. 내가 설계한 블럭만으로 시스템이 만들어지지 않고 수 많은 디자이너들이 설계한 블럭과 붙어서 돌아간다는 겁니다. 거기에 반도체 공정은 어떻습니까? 미세선폭이 나노단위로 내려가면서 FinFet공정, 3차원공정, 뭐 이런 것들이 나와 더욱 복잡하게 되었습니다. 예전에는 무시했던 것들이 이젠 주요한 설계 이슈로 튀어 나오게 됩니다. 천재가 아닌 이상, 이런 것들을 예전처럼 손과 종이로 계산 할 수는 없습니다. 시뮬레이션에 의존할 수 밖에 없는 거죠. 하지만, 분명한 건, 시뮬레이션이 도깨비 방망이는 아니라는 겁니다. 절대로 시뮬레이터가 모든 것을 알아서 해주지 못합니다. 시뮬레이터를 어떻게 이용할지 기획하고 설계하는 것은 결국 사람의 몫 입니다.

시뮬레이션을 위한 기획과 설계는 대단히 중요합니다. 많은 설계자들이 이 부분을 중요하게 생각하지 않는 것 같습니다. 단지, 시뮬레이션을 빨리 해야 한다는 목표로 Test Bench (시뮬레이션을 위해 만드는 회로 구성도) 를 엉성하게 만듭니다.  그러면 반드시 나중에 고생을 하게 됩니다. 그것도 몇 배로요. 일을 하면서 알게되는 것은 경험이 많은 노련한 설계자 일수록 시뮬레이션을 위한 준비작업을 철저히 한다는 겁니다. 충분한 시간을 들여 시뮬레이션을 기획하고 준비해서 Test Bench를 만들죠. 호환성, 확장성, 재활용성, 이런 것들을 생각하면서 만듭니다.

그래서 말입니다…

시뮬레이터 사용에 대한 것은 인터넷에 이미 많이 나와 있고 매뉴얼들이 잘 되어있기 때문에 이런 것들을 다루지는 않을 생각입니다. 가능하면 실무 위주의 시뮬레이션을 사용 방법에 대하여 글을 적으려고 합니다. 어떻게 Test Bench를 만들어야 좋을지 그리고 효과적인 시뮬레이션을 위해 무엇을 생각해야 할지를 다루도록 하겠습니다. 그리고 시뮬레이션으로 얻어진 데이타들을 어떻게 효과적으로 분석할 수 있을지 다루도록 하겠습니다.