컴퓨터(Computer)란 무엇인가? 단어의 원뜻 그대로 이해하자면 계산(Compute)을 해주는 주체(-er)로 이해할 수 있다. 물론 현대적인 의미에선 이 문장만으로는 컴퓨터에 대한 온전한 이해를 하기 어렵지만, 컴퓨터와 반도체 산업이 수십 년의 역사를 거쳐 아주 복잡하게 성장해 버린 만큼 그 뜻을 이해하기 위해선 쉬운 단계부터 풀어가야 한다.
필자는 컴퓨터를 아주 단순하게 '입력하면 결과가 나오는 기계'라는 정의로 출발하고 싶다.
우리가 키보드로 어떤 입력을 하면 모니터에 입력한 값이 모니터에 나오는 결과가 나오고, 어떤 버튼을 누르면 기계가 어떤 동작을 하는 결과를 보인다. 그렇다면 이런 컴퓨터의 가장 단순한 형태는 무엇일까?
아마도 우리가 초등학교 때 실험해 봤었던 '전구 켜기'가 아닐까 싶다.
[간단한 전구 회로]
이렇게 일렬로 연결한 것이 가장 원초적인 컴퓨터라고 볼 수 있다. 스위치를 누르는 '입력'이 있으면 전구에 불이 들어오는 '결과' 값을 볼 수 있기 때문에 앞선 정의에 부합할 수 있다.
실제로 이는 현대적인 컴퓨터와도 개념적으로 상응할 수 있다. 컴퓨터에 연결하여 여러 가지 빛을 내는 모니터가 전구에 해당하고, 전원이 건전지에 해당하며 사용자가 입력을 위해 누르는 키보드/마우스가 스위치에 해당한다. 그리고 이때 스위치와 도선을 잘 조합하면 전구회로에 저장 및 연산의 기능을 구현할 수 있는데, 그렇게 되면 비로소 현대적인 컴퓨터가 완성된다고 할 수 있다.물론 온전한 컴퓨터의 기능을 구현하는 것을 설명하기 위해서 트랜지스터 또는 모스펫이라는 현대적 기술용어가 필수적이지만,근본적으로 이 트랜지스터나 모스펫도 결국 전류의 흐름을 제어하는 스위치의 일종이기 때문에 산업에 대한 보다 쉬운 개념적 이해를 위해 이들의 개념도 스위치에 모두 포괄하여 집어넣고 우리는 스위치라는 간단한 부품으로 이 전체 산업의 흐름을 파악하는 것에 주력하는 것을 목표로 한다.
반도체 설계
1) Logic Design
그런데 위와 같이 전구 컴퓨터를 만드는 것은 너무 쉽기 때문에 왜 반도체 산업이 분업화가 되어있는지를 이해하기에는 다소 부족한 감이 있다. 그럼 아래와 같은 전구 컴퓨터는 어떨까?
' 건전지는 여러 개와전구는 8개, 스위치 여러 개를 이용할 수 있다. 이때 전구 8개의 번호를 매겨 스위치를 누르면 홀수번째 전구를 켤 수 있고 누르지 않으면 짝수번째 전구를 켤 수 있게 하는 전구 컴퓨터를 만들어라.'
어찌 보면 매우 단순해 보이는 듯 하지만, 이를 특별히 전구컴퓨터라고 부른 이유는 이것을 구현하기 위해서 저장과 연산 기능이 필요하기 때문이다.
일단 현재 홀수번째 전구가 켜져야 하는지, 짝수번째 전구가 켜져야 하는지에 관한 상태를 '저장'해야 하고, 스위치를 한 번씩 누를 때마다 그 상태가 변경되는 '연산'을 해야 하기 때문이다.
자, 그럼 이제 이 전구 컴퓨터를 한번 만들어보자.
이러한 전구 컴퓨터를 만들기 위해 일단 전구 8 개를 나열해 놓고 건전지 하나를 배치해 둔다. 어차피 전구는 홀짝이 구분돼서 보여야 하고, 전기가 흐르기 위해서는 반드시 전력을 공급해 줘야 하니 하나의 건전지는 필수적일 것이니 말이다.
[ 가상의 전구 컴퓨터 ]
그리고 이제 스위치와 도선을 어떻게든 잘 조합하면 되는데 문제는 이 부분을 어떻게 만들 것이냐는 것이다. 바로 이 부분을 채워주는 것이 바로 우리가 파헤치고자 하는 반도체 칩이 되는 것이다.
그럼 이때 작업을 어떤 식으로 할 수 있을까? 무작정 나열된 전구 8개에 스위치를 어디에 어떻게 달 지 한 번씩 시행착오로 시행하면 될까? 물론 이런 방법으로도 문제의 답을 찾아 구현해 볼 수 있을 것이다. 그러나 이런 방식으로 새로운 전구 컴퓨터를 만들기엔 스위치를 여기 붙였다가 저기 붙여다가 하는 과정들이 너무 비효율적이다. 물리적으로 번거롭게 시행착오 방식으로 하는 작업은 극히 비효율적이다.
이 때문에 이를 조금 더 편하게 작업하기 위해 종이와 연필을 이용한다. 굳이 실제 전구/스위치/건전지를 연결해보지 말고, 이 셋을 대표할 수 있는 그림을 그려 이 문제를 그림 문제로 치환한다. 그리고 그림을 통해 그려낸 회로의 논리가 맞는 것 같으면, 그 그림에 따라 새로운 전구 컴퓨터를 만들기만 하면 된다.
그래서 이 그림만 그려서 논리적인 설계만을 하는 작업을 Logic Design이라고 한다. 이런 작업을 잘하는 회사가 바로 ARM이나 AMD, Intel 같은 회사다. 이 설계를 어떻게 하느냐에 따라서 건전지를 적게 쓰면서 오래 쓸 수 있는 스마트폰에 적합한 설계가 되기도 하고 220v 전원 꽃아 넣고 건전지 걱정은 없이 전기를 마음껏 쓰면서 전구 수백만 개를 1초에도 순식간에 수백만 번 켰다 껐다 하는 성능 좋은 컴퓨터가 되는 설계가 되기도 한다. 대표적으로 스마트폰에 적합한 저전력 설계를 잘하는 회사가 ARM이고, 후자처럼 성능에 초점을 맞춘 설계를 잘하는 최사가 Intel이나 AMD 같은 회사가 된다. (물론 조금 더 언급하자면 그 둘의 경계는 점점 희미해져가고 있기도 하다.)
이런 논리 설계만을 하는 업계에서도 고민은 있다. 지금은 전구가 8개뿐이지만 이 전구가 천 개, 만 개가 되면 이젠 그림마저도 그리기가 지친다. 그리고 그에 따른 스위치와 도선의 연결도 더 복잡해지고 그려야 할 것들이 많아질 것이다. 그럼 이걸 더 간단하게 표현할 수 없을까?
그래서 나온 것이 바로 HDL(Hardware Description Language)이다. 언어로 표현하게 되면 굳이 그림을 하나하나 그릴 필요가 없어지니 훨씬 더 간단해진다. 그리고 이 단계를 RTL(레지스터 전달 레벨, Register Transfer Level)이라고 한다. 레지스터란데이터를 저장할 수 있게 하는 스위치와 도선의 덩어리인데, 이것들이 반도체에서 가장 기본이 되어 수십억 개가 들어가게 되는 것이다. 그래서 이런 레지스터를 어떻게 연결하는지를 고민하는 단계라고 하여 '레지스터 전달 레벨'이라고 부르게 된 것이다.
가끔 RTL 코딩을 한다는 문구를 종종 볼 수 있는데 이것을 쉽게 이야기하면 이런 그림을 표현하는 HDL 코드를 만든다는 것을 의미한다.
2) Physical Design
자, 이제 이렇게 논리 설계가 완료가 되면 이제 그 그림을 보고 실제로 건전지/전구/스위치를 어디에 둘 것인가를 고민해야 한다.
'무슨 소리야? 논리 설계에서 그림 다 그려준 것 아니야?'
논리 설계를 통해서 나온 그림은 단순히 'A와 B를 연결하면 된다, 그리고 C는 B2에 연결하고 B2에는 다시 A를 연결한다'와 같이 논리적인 연결에 대해서만 표현한 것이다. 실물로 이걸 그대로 옮기려면 너무 많은 연결점이 있어서 연결선이 꼬이는 문제나 수많은 각각의 스위치를 어디에 둘 것인지와 같은 고민거리가 생기게 된다.
예를 들어 제일 처음의 전구 회로를 다음과 같이 십자가 모형의 틀에 넣어야 한다고 가정해 보자. 그럼 각 요소별 연결 포인트는 동일하지만 각각의 배치 위치와 도선의 모양이 바뀌는 것을 볼 수 있다.
이처럼 Logical Design의 추상적인 연결점을 주어진 제약에 맞게 실물로 구현하기 위해 고려하는 설계를 물리적 설계(Physical Design)이라고 한다. 그리고 이런 설계를 하는 제품들이 바로 삼성전자의 Exynos, 퀄컴의 Snapdragon, 애플의 Apple Silicon과 같은 반도체들이다. 그리고 논리설계나 물리설계 단계까지를 하는 회사들을 팹리스(Fabless) 반도체 회사라고 한다. 즉, 실제로 건전지/스위치/전구를 가지고 전구 컴퓨터를 만드는 공장(Fab)이 있는 게 아니라, 반도체를 만드는데 필요한 최종 실제 설계도를 완성하는 회사들이다.
과거에는 이런 회사들이 ARM으로부터 논리설계만을 받아서 물리설계를 하여 칩을 만들었다.(고도화된 현대사회의 산업에 100%는 없다. 즉 물리설계를 하는 회사들도 논리설계의 영역이 전혀 없는 것은 아니지만, 지금은 큰 그림을 보는 것이 목적이므로...)
그리고 점점 '아니, 근데 꼭 ARM이 준 것을 바탕으로 물리설계를 해야 하나? 이걸 수정해서 더 효율적인 그림을 만들면 실제 반도체 만들었을 때 성능이 좀 더 잘 나오지 않을까...?' 이런 생각들을 하기 시작했다. 그리고 실제로 각회사들은 이런 생각으로 자신들이 직접 논리 설계를 하거나 수정하며 커스텀을 시도했으나, 결과는 두 가지로 나뉘게 되었다.
'ARM이 잘하긴 하네... 그냥 ARM에서 준 것 그대로 쓰는 게 낫겠다....'라고 커스텀을 실패했거나
'원래 준 것 쓰는 애들보다 좀 더 나은 것 같은데?!'라고 커스텀을 성공한 회사 거나.
3) Foundry
이런 회사들이 이렇게 물리적 설계까지 끝내서 완전한 설계도안을 만들면 이제 실제 스위치/전구/도선을 이용해서 구현해 옮겨줄 주체가 필요하다. 거창하게 '전구 컴퓨터'라고 얘기했지만, 사실 앞서 물리적 설계까지 끝난 설계도안을 가지고 단순히 눈에 보이는 스위치/전구/도선을 이용해 전구 컴퓨터를 만드는 것은 사실 그렇게 어려워 보이지는 않는다.
그러나 여기서 한 가지 더 요구조건을 붙여보자. '전구 컴퓨터를 동일하게 100만 개를 만들어라.'라는 조건을 붙여보자. 그럼 두 가지 고민점이 생긴다. 첫 번째는, 어떻게 하면 이 많은 수의 전구컴퓨터를 만들 수 있을까? 단순히 사람의 손으로 하기에는 자원이 소모적이기 때문에 일련의 자동화 프로세스가 있어야 한다. 두 번째 고민점은, 100만 개를 만들 때 '동일하게' 만들어야 한다는 것이다. 즉, 어떤 것도 결함이 있어서는 안 되고 정확하게 만들어져야 한다. 그럼 이제 전구컴퓨터를 만드는 것은 단순한 문제가 아니게 될 것이다.
그래서 이처럼 다수의 전구컴퓨터를 동일한 품질로 만들기 위해서는 이를 위한 고도화된 공정을 만들 수 있는 생산주체들이 필요하게 된다. 반도체 업계에서는 이와 같이 설계도안만을 가지고 다수의 반도체 칩을 성능 상 문제없이 만들어 주는 회사들을 일컬어 파운드리(Foundry)라고 부른다.
그런데 우리는 앞서 전구/스위치/건전지를 이용해서 하나의 온전한 전구 컴퓨터를 만드는 것을 가정하였다. 완성된 설계도를 바탕으로 실제 전구 컴퓨터를 만드는 주체가 파운드리라고 정의하였는데, 실제로 파운드리는 전구 컴퓨터 전체를 만드는 것은 아니다. 그림에서 보듯 전구의 위치와 필요한 최소한의 건전지 개수는 어차피 정해져 있고 최종적으로 생산된 전구 컴퓨터의 물음표 부분을 이들과의 연결점만 붙여주면 될 일이다. 그래서 가장 복잡하고 어려운 스위치와 전선의 배치를 구현하는 것이 문제이므로 이 부분만 따로 만든 것이 바로 우리가 사용하는 반도체 칩(Chip)이 된다.
결국 파운드리가 구체적으로 담당하는 것은 스위치와 도선의 덩어리에 해당한다. 이때 기능이 복잡해질수록 스위치가 수천만 개, 수십억 개가 들어가야 한다. 하지만그렇게 많은 수의 스위치를 넣는데 스위치가 너무 크면 전체 크기가 가늠하기 어려울 정도로 커질 수밖에 없다.
최초의 디지털 컴퓨터로 불리는 애니악이 비대했었던 이유도, 이 컴퓨터 안에 들어가는 전자식 스위치인 '진공관'의 크기가 소형화되지 못했기 때문이다.
최초의 디지털 컴퓨터 애니악(출처: 과학학습콘텐츠)
이 때문에 파운드리의 가장 핵심이 되는 기술 중 하나는 이 스위치를 얼마나 작게 만드는지에 집중하게 된다. 그 스위치의 전자화/소형화에 대한 연구로, 우리가 한두 번쯤은 들어본 트랜지스터라는 것이 발명되었고, 다시 이 트랜지스터의 원리를 이용해 더욱 소형화한 것이 모스펫이라고 불리는 소자가 된다.
아무튼 쓸만한 반도체 칩을 양껏 만들기 위해서도 공정 개발 및 소자 개발 등 굵직한 미션들이 있기 때문에 이 역시 하나의 회사가 전문적으로 연구/개발해야 하는 영역으로 발전하게 되었다.
4) Fabless, Foundry , IDM
그런데 이렇게 분야별로 복잡한 반도체 산업이 초기에는 논리적/물리적 설계부터 생산까지 인텔(Intel)만이 가능했었다. 그러나 위와 같은 각 분야별 고민에 대한 깊이가 깊어지면서 각 분야를 전문적으로 할 수 있는 조직 또는 회사에 대한 필요성이 대두되었다. 그래서 설계만을 전문으로 하는 Fabless 회사와 생산만을 전문으로 하는 Foundry 회사가 생겨나기 시작하면서 동시에 이 모든 것을 아울러서 할 수 있는 종합반도체회사(Integrated Device Manufacturer)라는 개념이 생겨나게 된다.
대표적인 종합반도체 회사로는 삼성전자, 인텔, 하이닉스, 텍사스 인스투르먼트(Texax Intrument, TI) 등이 있고, 파운드리 회사로는 대만의 TSMC 같은 회사가 있고 Fabless로는 퀄컴, 브로드컴, 애플 등이 있다.