대문글

MileMoa

검색
×

마일모아 게시판   [정보-기타]
디지털 전기 회로, 반도체 공정, CPU 클럭에 관한 잡설

동쪽기러기 | 2020.09.04 23:41:08 | 본문 건너뛰기 | 댓글 건너뛰기 쓰기

최근에 전기/전자 쪽에 관해 많은 분들께서 심도있는 논의를 하시는 것을 보고 지나가다가 조금이라도 도움이 될까봐 끄적여 봅니다. 저는 현재 회로를 조금 끄적끄적 거리는 일을 하고 있고요, 이 글에서 다룰 주제는 대략....

- 디지털 회로는 무엇인가?

- 왜 2진법인가?

- 공정 개선이 왜 점점 힘든가?

- 왜 클럭 스피드는 그대로인가?

 

이를 설명하고자, 쉽지만 위험할 수도 있는 물<=>전기 비유를 쓰려고 합니다.

우선 아주 거칠게 단순화를 시켜서, 반도체 공정의 기본이 되는 두 소자가 있습니다. 하나는 P형으로 불리는 소자로, 디지털 회로에서의 위치는 세면대에 있는 수도꼭지 같은 존재입니다. 또 다른 하나는 N형으로 불리는 소자로, 세면대에서 물마개 같은 존재입니다. 수도 꼭지는 상수도에서 물을 흘려줄 수 있고, 마개는 세면대에 담긴 물을 하수도로 흘려보낼 수 있죠.

 

 

그럼 디지털 회로는 어떻게 동작할까요? 가장 간단한 디지털 회로인 inverter로 시작해보겠습니다.

empty.png

 

여기서 수도꼭지(P)와 물마개(N)의 동작은, 위아래로 움직이는 하나의 기다란 막대(G) 하나로 동시에 제어됩니다. 막대를 아래로 내리면 수도꼭지는 열리고 마개는 닫히면서 물통에 물이 받아집니다.

binary1.png

 

 

반대로 막대를 위로 올리면 수도꼭지는 닫히고 물마개는 열리면서 물통에 있는 물이 다 빠져나가게 되고요.

binary0.png

 

 

여기서 이 제어 막대(G)의 움직임은 왼쪽에 있는 float(변기 열어 보면 있는 그거요. 그림 상에서는 빨간 네모로 그렸습니다)의 움직임을 따른다고 하고, 이 inverter를 두 개를 연결하면 다음과 같이 됩니다. 첫번째 인버터의 제어 막대를 위로 올렸더니 첫번째 물통의 물이 없어지고, 그로 인해 두번째 물통의 수도꼭지가 열리면서 두번째 물통에 물이 가득차게 됩니다.

serial.png

 

여기서 물의 높이는 전기로 따지면 전압에 해당합니다. 물통의 높이를 얼마나 크게 만드냐에 따라 10cm짜리도 있고 20cm 짜리도 있듯이, 전압도 1볼트 일수도 있고 2볼트 일수도 있습니다. 하지만 디지털 회로는 그냥 퉁쳐서, 가득차면 1, 비었으면 0으로 하자라고 하는거고요.

 

 

그러면 왜 2진법을 쓸까요? (사실 이 글의 시작은 아래 글의 댓글에 대해 답을 해 드리려 시작했습니다)

https://www.milemoa.com/bbs/index.php?error_return_url=%2Fbbs%2F&search_target=title_content&search_keyword=%EC%A0%84%EA%B8%B0&document_srl=7789497&mid=board

방금 예를 든 것처럼 텅빈거=0, 꽉찬거=1 (즉 2진법) 이렇게 하지 않고

binary.png

 

텅빈거=0, 반 조금 안 찬거=1, 반 조금 넘게 찬거=2, 꽉 찬거=3 (4진법) 이렇게 할 수도 있습니다.

quatenary.png

 

이 경우 똑같은 물통을 쓰면서 표현할 수 있는 정보의 양이 두 배가 되었으니 효율이 두 배가 되었습니다. 하지만 여기서 저희가 간과한 것이 있는데, 그것은 바로 4진법에서 1과 2를 표현하고자 할 때 물의 양을 어떻게 맞출것이냐는 것입니다.

물을 다 버리려고 할 때는 물 마개를 계속 열어 두면 언젠가는 다 없어질테고, 물을 가득 채우고자 할 때에는 수도꼭지를 계속 열어두면 언젠가는 차게 마련입니다. 하지만 그 중간 어디까지만 채우고자 한다면 누군가는 물의 깊이를 계속 측정해가면서 수도꼭지와 물마개를 적절히 조절을 해 주어야 합니다. 많이 정확하지 않아도 될 경우에는, 수도꼭지와 물마개를 어느 정도 조절하면 되는지 미리 훈련을 해보고 그 감으로 계속 쓰는 방법이 있습니다. 다만 감이 떨어질때쯤 다시 "내가 잘 하고 있나" 확인하기 위해 종종 다시 훈련을 해야합니다. 그리고 추가적으로 발생하는 문제가 있는데요, 그건 1과 2라는 양의 물을 계속 보관하고자 할 때 일어납니다. 안타깝게도 저희가 가지고 있는 수도꼭지와 물마개가 인류의 지식의 한계까지 밀어붙여 작게 만들다보니까 고무가 좋지가 않습니다. 그러다보니 가만히 놔둬도 물이 조금씩 새요. 분명 물마개랑 수도꼭지를 둘 다 잠궜는데, 물마개보다 수도꼭지에서 물이 더 많이 새면 1이나 2만큼 담아두었던 물이 조금 지나보니 가득 차 버릴수도 있고요, 반대로 수도꼭지보다 물마개에서 물이 더 새면 시간이 지나면 물이 다 없어져버립니다. 즉, 1이나 2라는 정보를 담아두었는데, 나중에 다시 보니까 3이나 0으로 되어 버린거죠. 더군다나 수도꼭지와 마개를 꽉 잠그고 물이 새는 양을 정확히 조절하는것은 쉽지가 않다보니, 1이나 2를 표현하고자 할 때에는 수도꼭지와 물마개를 다 막아놓는 방식이 아니라, 둘 다 어느정도 힘차게 틀어놓고 조절하는 방식을 쓰는 경우가 많습니다. (이는 마치 물 온도를 차갑지도 뜨겁지도 않고 적당히 따뜻한 정도로 맞추고 싶을 때, 찬물과 더운물을 둘 다 세게 틀어놓고 맞추는 것이 살살 틀어놓고 맞추는 것보다 쉬운 것과 비슷합니다.) 이런 것들이 회로적으로는 어떻게 해석이 되냐면요...

- 누군가 물의 깊이를 봐야 한다 => (회로적으로는) 전압을 센싱하는 회로가 추가로 필요하다.

- 훈련을 해야 한다 => (회로적으로는) 가끔은 회로의 정상 동작을 멈춰야 한다.

- 감을 익힌다 => (회로적으로는) 설정값을 저장할 메모리가 필요하다

- 물이 샌다 => (회로적으로는) 가만히 있어도 누설전류가 있다 => 전력 소모가 올라간다

- 물을 힘차게 틀어놔야 한다 => (회로적으로는) 전류 소모가 크다 => 전력 소모도 크다

이런 문제들 때문에, 다른 특별한 제약 조건이 있지 않으면 2진법 회로의 단순한 동작 방식이 선호되고는 합니다.

 

 

 

자 그럼 이 물통을 빨리 채우고 빨리 비우려면 어떻게 해야 할까요?

쉽게 생각해서는 수도꼭지와 물마개를 키우면 될 것 같은데요, 안타깝게도 물통이 수도꼭지와 물마개의 일부입니다. 때문에 물통의 단면적은 수도꼭지와 물마개의 크기에 비례한다고 보셔도 되겠습니다. 즉, 수도꼭지 크기를 두 배로 키우면 물이 두 배로 빨리 쏟아지지만 물통 단면적도 두 배로 커지는 바람에 물을 채우는데 걸리는 시간은 변함이 없는거죠. 반대로 물통의 단면적을 반으로 줄이게 되면 그와 더물어 수도꼭지와 물마개도 반이 되어 버려서, 물통 용량은 반이 되었지만 물이 더 쫄쫄 흐르게 되어 역시 속도가 빨라지진 않습니다. 그래서 우리는 물통의 단면적 뿐만이 아니라 높이도 같이 줄이기로 했습니다. 물통에 물이 꽉차면 1이니까, 20cm높이 물통에 물이 꽉 차면 1이라고 부르던 것을, 이제 물통 높이를 10cm로 줄이고 거기에 물이 꽉 차면 1이라고 부르기로 했습니다. 이러면 수도꼭지/물마개 크기가 반이 되어도 속도는 두 배가 되었습니다. 거기에 불통의 단면적도 이전에는 (예를 들어) 10cm^2이던 것을 5cm^2으로 줄였기 때문에, 한 번 물을 채우고 버릴 때마다 쓰게 되는 물의 양이 200cm^3이던 것이 50cm^3으로 4분의 1이 되어 버렸습니다! 즉, 같은 동작을 하는데 속도는 두 배, 물 값은 4분의 1이 되어 버렸죠. 작게만 만들기만 한다면 무조건 남는 장사가 되는 것이었습니다.

이게 너무 신나다 보니까, 그럼 까짓꺼 갈때까지 가보자 하다보니 슬슬 문제가 생기기 시작했습니다. 같은 동작을 하는 것을 더 작게 만들게 되다 보니까, 집을 작게 만들지 않고 집 안에 수도관과 물통을 더 넣어 별의 별 짓을 다 하기 시작합니다. 전에는 물통 하나에 물이 찼다가 빠졌다가만 해도 신기했는데, 이제는 막 물통을 수백개 가져다 놓고 "여보 사랑행 ♥" 글자도 씁니다. 게다가 더 빠르게 일을 할 수 있게 되다 보니까, 같은 시간에 일을 더 많이 시키기 시작했습니다. "여보 사랑행 ♥" 하고 가만히 놔두는게 아니라, 물통을 비우고 "나 플스 샀어 ♥"도 쓰고, 물통 또 비우고 "미워할꼬야?"도 씁니다. 그런데 위에서 말씀드렸듯이 우리 수도꼭지와 물마개는 고무가 좋지 않습니다. 물마개가 안좋은 세면대에 물을 받아보시면 아시겠지만, 가만히 있어도 물이 줄줄 새기 마련이죠. 그럴경우 물이 덜새게 하려면 물마개를 꾹 눌러줘야 합니다. 그래서 예를 들면 물통에서 float의 높이가 0cm가 되어야지만 물마개가 막히게 되어 있는것보다는, 3cm만 되어도 물마개가 막히게 해 줄 필요가 있었습니다 (실제 물마개가 이런지는 잘 모르겠는데요, 회로적인 비유를 쓰자면 이렇게 됩니다.)

예전에는 물이 좀 새더라도 큰 문제가 아니었습니다. 우선 물마개가 좀 샌다고 하더라도 수도꼭지를 틀어놓기만 하면 물통에 물은 항상 가득 차있기 때문에 정보가 유실될 염려는 없었습니다. 그리고 집에는 커다란 통을 몇 개 밖에 못 갔다놓아서, 물 좀 샌다고 해봤자 물통에 물 한 번 채우고 버리는 물값이 훨씬 컸거든요. 근데 이게 점점 물통 갯수가 많아 지다보니 가만히 있어도 새는 물값이 더이상 감당할 수 없는 수준에 이르게 되었습니다. 이미 2000년대에 CPU에서 단위면적당 시간당 에너지 소모(W/cm^2)가 핵발전소와 로케트 노즐 사이의 수준으로 왔다갔다 하고 있었습니다.

새는 물을 확실히 막으려면 수도꼭지와 물마개를 잠글 때 각자 3cm 정도는 필요하다고 느끼게 되었습니다. 이 떄 물통 높이가 2cm밖에 안된다고 한다면 수도꼭지와 물마개를 콸콸 틀 수 없기 때문에 안됩니다. 그렇다고 수도꼭지와 물마개가 3cm가 아니라 0.5cm에 잠기게 하면, 이제 CPU의 단위 면적당 전력 소모가 로케트 노즐을 넘어 태양 표면과 비슷해 질 노릇이었습니다. (물론 이 외에도 다른 요인도 있었습니다.) 그러다보니 이제 더 이상 물통 높이를 줄이기 힘들게 되었습니다. 

근데 이제는 또 물통은 계속 작게 만들면서 물통 높이는 줄이지 않다보니 새로운 문제가 생깁니다. 수도꼭지와 물마개를 작게 만들면서 고무도 점점 얇아지는데, 물통에서 발생하는 수압은 똑같은거죠. 예를 들어 회로에서 10nm 떨어진 곳이 1V의 전압차가 있다는 말은, 일상생활에서 느끼는 단위에서는 1cm 떨어진 지점에 1메가볼트의 차이가 있다는 것과 같습니다. 초고압 송전 시설이 1cm 떨어진 곳에 있는 것과 같은 불안한 상황입니다. 계속 작게 만들면서 수압은 안 줄이다 보니 이제 수도꼭지는 여전히 상수도에 연결해 뒀는데 고무가 기름종이 처럼 얇아진거죠. 이로인해 발생하는 스트레스로 수도꼭지가 터지기라도 한다면 수도꼭지가 항상 물통에 물을 주입하고 있는 상태가 되기 때문에, 이제 그 물통은 다시는 물을 완전히 따라버릴 수 없게 됩니다. 이런 일을 방지하려다보면 단순히 크기를 줄이는 것 이상의 추가적인 기술들이 필요하게 되고요 (얇아도 튼튼한 고무, 얇은 듯 얇지 않은 얇은 것 같은 고무, 기타 등등). 그래서 이런 복합적인 이유로 최근에는 미세공정으로 간다고 하더라도, 크기에 정비례하는 향상을 기대하기가 점점 어려워지고 있습니다.

 

 

 

 

거기에 더불어서 CPU의 클럭 속도가 옛날처럼 빨라지지 않는데에는 추가적인 이유가 있습니다. 이를 위해 CPU의 동작을 분식집에 비유하도록 하겠습니다.

분식집 사장님이 김밥을 아주 잘 말으셔서, 주문받고 김밥 말고 손님 상에 내놓는데까지 40초밖에 안걸린다고 가정을 하겠습니다. 이 경우 김밥 10줄 주문이 들어오게 되면, 처음 김밥이 나온는데 40초가 걸리고, 김밥 10줄이 다 나오는데에는 400초가 걸립니다.

그래서 사장님은 분업을 하기로 하십니다. 총 5단계로 나누어서, 주문받고 준문서를 주방에 전달 => 김을 깔고 밥을 올림 => 단무지와 시금치를 올림 => 고기를 올리고 김밥을 맘 => 접시에 올리고 손님 상에 전달. 이렇게 말이죠. 그리고 10초에 한 번씩 종을 울려서, 종이 울릴 때마다 앞 단계에 했던 일은 다음 단계로 넘기기로 합니다. 이 경우 김밥 10줄이 주문이 들어오면, 처음 김밥이 나오는데는 50초가 걸리지만 그 후에는 10초마다 김밥이 나와 140초 후면 김밥 10줄이 나옵니다. 뿌듯한 사장님은 "김밥 10초에 한 줄 씩 마는 집"이라고 광고를 합니다. 옆 집 사장님이 김밥의 달인이어서 30초에 한 줄씩 싸신다고 하더라도, 우리 사장님은 분업화를 통해 10초에 한 줄 씩 김밥을 생산하시고 "세계에서 김밥 제일 빨리 마는 집" 타이틀을 가져옵니다.

그런데 이제 옆 집에서도 분업화를 통해 김밥을 8초에 하나씩 말기 시작했다는 소식이 들립니다. 그래서 사장님은 분업화를 5단계에서 10단계로 늘이기로 합니다. 주문 접수 => 주문서 전달 => 김 => 밥 => 단무지 => 시금치 => 고기 => 둘둘둘 => 접시 => 전달 요렇게요. 그리고 종을 10초가 아니라 5초에 한 번 씩 울리려고 했는데, 이게 크게 두가지 이유로 그렇게 안됩니다. 우선 앞 단계에서 뒷 단계로 일을 넘겨 줄 때 1초씩 필요하다는 것을 알게 되었습니다. 그리고 사실 종을 울리는 시간도 정확히 10초나 5초를 맞추기가 힘듭니다. 그 전에는 상가에서 정확히 1분에 한 번씩 울리는 종이 있어서, 그거에 맞춰서 사장님이 속으로 1초씩 세면서 10초가 되었다고 생각할때마다 종을 울리고 있었습니다. 그러다보니 1초 정도의 오차가 생기면서 어떨 때에는 9초, 어떨 때에는 11초에 한 번 씩 종을 울리고 있었는데, 다행히 상가에 있는 정확한 시계 덕분에 평균적으로 10초에 한 번 씩은 유지하고 있었던 것입니다. 생각해보면 처음 40초 짜리 일을 5단계로 나눌 때에도, 각 단계에 8초 + 작업 전달 시간 1초 + 종 울리는 시간 오차 1초 = 10초가 되었던 것이었고요. 그래서 할 수 없이 10단계 분업에서는 각 단계에 4초 + 작업 전달 시간 1초 + 종 울리는 시간 오차 1초 = 6초에 한 번씩 종을 울리기 시작했고, 사장님은 다시 세계에서 김밥 제일 빨리 마는 집 타이틀을 가져 오십니다 ("김밥 한 줄에 6초!"). 첫 김밥 나오는데는 60초가 걸리지만, 10줄 다 마는데에는 114초면 충분합니다.

근데 이게 어느덧 타이틀을 향한 무한 경쟁이 시작되다보니 이상해집니다. 어떻게든 세계 최고 타이틀을 유지하려고 김밥을 무려 20단계로 분업화를 했습니다. 이제 종은 6초가 아니라 4초에 한 번씩 울리게 됩니다. 근데 20단계 분업화를 하려다보니, 단계 수가 늘어날때마다 분업 자체를 위한 작업 공간이 추가로 필요하게 되고, 직원들이 열심히 일하다보니 가게도 점점 더워집니다. (회로적으로보면, 회로 면적이 커지고 전력 소모가 커집니다.) 직원들이 가게가 핵발전소만큼 덥다고 하길래 에어컨도 크고 비싼 것으로 설치해주어야 합니다. 가만히 보니 효율이 너무 안좋은것 같습니다. 거기에 2초의 벽은 현재의 사장님 기술력으로는 깰 방법이 보이지 않기도 했고요.

그래서 사장님은 이제 종 울리는 시간을 더이상 줄이지 않기로 합니다. 대신 5단계로 움직이는 팀을 다섯 팀 만들기로 합니다. 멀티코어 김밥집이 탄생한것이죠. 사장님이 각 팀들에게 일 배분만 완벽히 잘 한다고 하면 10초에 5줄 씩, 즉 실질적으로 2초에 한 줄 씩 김밥을 말 수 있습니다. 주문서를 시의 적절하게 각 팀에 배분해야 되니 머리가 아프지만, 자꾸 하다보니 할 만 한 것 같습니다. => 이게 대략 현재 CPU의 상황과 비슷하다고 보입니다.

 

 

무리한 비유를 끌어오다보니 자세한 부분에서 틀린 부분이 있는데 제가 깨닫지 못한 부분도 있을 것 같습니다. 지적해 주신다면 업데이트 하도록 하겠습니다.

 

 

p.s.) 분식집 사장님이 보아하니, 학생들은 참치김밥을 주문을 많이 하는 것 같습니다. 그래서 학생들이 가게에 들어오면 주문서 확인하기 전에 이미 김밥을 만들기 시작합니다. "10줄 사면 1줄" 행사도 하고 있기 때문에, 주문 받으러 가기 전에 저 학생이 지금까지 언제 가게에 와서 몇 줄 사먹었는지 기록한 장부를 확인도 하고, 이걸 메모지에 써서 주문을 받으러 갑니다. 11줄 째면 공짜라고 알려줘야 하거든요. 이렇게 했더니 10초에 한 번 종을 울리는 5단계 분업을 하면서도 평균적으로 8초에 한 번 씩 김밥을 만들 수가 있었습니다. 왜냐하면 미리 김밥을 만들기 시작한 상태에서, "참치김밥 주문 들어온거 맞지?"라고 확인만 해주면 되었거든요. 가끔 어떤 학생이 어묵만 시키면 김밥도 버리고 메모지도 버려야 하는데요, 잘 계산해 보니 그렇게 손해가 조금 있다고 하더라도 전체적으로는 이게 더 이득이었거든요. 근데 어느날 누가 와서 얘기 좀 하자고 합니다. "사장님 메모지를 쓰레기 봉지에 그냥 버리시더라고요. 쓰레기 수거차에서 쓰레기 봉지 가져와 뜯어보니까 일부 학생들이 학원 땡땡이 치고 분식집 온 거 다 적혀있네요?" 큰일났습니다 보안 사고가 터졌습니다. 쓰레기 봉지를 왜 뜯어봐 대체! 라는 생각도 들지만, 메모지를 가게에 땅을 파서 묻어버렸으면 외부인이 아예 메모지를 구경도 못했을테니 이런 일이 없었을것입니다.

첨부 [7]

댓글 [53]

목록 스크랩

마일모아 게시판 [114,555] 분류

쓰기
1 / 5728
마일모아 사이트 맞춤 구글 검색