
아마 요즘 대학생들이라면 알만한 게임인 마인크래프트라는 게임이 있습니다.
여기 게임에는 레드스톤이라는 광석 물질이 있는데요.

이 물질은 간단히 말하자면 신호를 주면 켜지고, 신호가 없으면 꺼지는 특성을 가지고 있습니다. 그래서 이 물질을 활용하여 갖가지 기계를 만드는 모습을 유튜브를 통해 쉽게 볼 수 있는데요.
이번에는 한번 이 레드스톤으로 우리의 컴퓨터 밑바닥인 논리회로를 어떻게 구현하는지 한번 알아봅시다.
이번 글에서는 레드스톤으로 구현하는 논리회로와 현실 회로가 다름을 알 수 있어요!
레드스톤으로 논리회로 만들기
이미 레드스톤으로 간단한 논리회로 만드는 영상, 글들은 많이 있어서
이 회로가 왜 가능한 것인지를 중심으로 보겠습니다.
시각화를 위해 아래 사진처럼 블록 설명을 해놓았으니 혹시 회로를 보다가 모르겠다면 아래 사진들을 참고하면 됩니다.

not, or 게이트(nor 게이트)
먼저 가장 간단하게 만들 수 있는 게이트입니다.
not 게이트를 살펴보면 횃불의 역할을 알 수 있습니다.

횃불을 통해 들어온 값의 정 반대 값을 보냄을 알 수 있죠.
다음으로 or 게이트입니다.

or 게이트를 통해 두 입력을 선으로 연결해서 합치면 최소 한 곳에서 신호가 올 경우 출력에도 신호가 오게 됩니다.
그리고 이를 응용하여 or 게이트에서 마지막에 not 게이트를 연결하면 nor게이트를 만들 수 있게 됩니다.
그러면 다음으로 and 게이트는 어떻게 구현되는지 알아봅시다.
and 게이트(+ nand 게이트)
and 게이트는 다음과 같습니다.

이렇게 보면 무슨 소리인가 싶지만, 이 사진을 토대로 구조를 나누어 보면 다음과 같습니다.
i위∧i아래=¬((¬i위)∨(¬i아래))
여기서 위 i를 x라 하고, 아래 i를 y라 하면 다음과 같은 식을 볼 수 있습니다.
x∧y=¬((¬x)∨(¬y))
이 식을 보면 아마 다들 들어는 봤을 드모르간 법칙이 떠오르실텐데요.
레드스톤을 활용한 회로에서는 and게이트가 직접적으로 없고 오직 not과 or만 사용 가능하기에 드모르간 법칙을 이용하여 회로를 작성한 것이라 보면 됩니다.
그리고 여기서 연계하여 맨 뒤 not 게이트를 제거하면 nand게이트는 다음과 같이 만들 수 있음을 알게 됩니다.

xor 게이트
이제 어쩌면 레드스톤으로 구현 가능한 기본적인 논리 게이트 중에 가장 복잡해 보이는 xor 게이트를 보겠습니다. 일단 xor 게이트를 간략히 이야기하자면 다음과 같습니다.
두 입력의 값이 다르다면 1, 같다면 0을 출력하는 게이트
그래서 이 xor 게이트는 다음과 같이 만들어짐을 알 수 있습니다.
(참고로 tt와 ts둘다 있지만, 한 블럭에 두 횃불이 있는 것이므로 결론적으로 not의 not이 아니고 not하나만 있는 거라 보면 됩니다.)

이 회로를 표현 식으로 나타내보면 위 i=x, 아래 i=y라 하면,
x⊕y=(¬((¬x)∨¬(¬x∨¬y)))∨(¬((¬y)∨¬(¬x∨¬y)))
이렇게 보면 겉보기에는 복잡해보이는데,
¬(¬x∨¬y)=x∧y
와 같음을 이전에 확인했으므로 다음과 같이 줄일 수 있습니다.
=(¬((¬x)∨¬(¬x∨¬y)))∨(¬((¬y)∨¬(¬x∨¬y)))(¬((¬x)∨(x∧y)))∨(¬((¬y)∨(x∧y)))
xor 게이트 식 최적화하기
이렇게 인터넷의 정보를 통해 xor 식이 이렇다는 것을 알았지만, 사실
(¬((¬x)∨(x∧y)))∨(¬((¬y)∨(x∧y)))
이 식을 더 줄여볼 수 있습니다. 논리회로에서는 직렬로 이어져 있는 게이트 수를 줄이는 것이 성능 최적화하는 길이거든요.
그래서 조금 더 줄여보면 다음과 같습니다.
¬((¬x)∨(x∧y))(왼쪽 식)
자세히 보기
¬((¬x)∨(x∧y))=x∧¬(x∧y)=x∧(¬x∨¬y)=(x∧¬x)∨(x∧¬y)=0∨(x∧¬y)=x∧¬ynot을 안쪽 항에 분배드모르간 법칙 적용x를 분배x and not x = 00 or A = A
x∧¬y
그리고 오른쪽 식도 1번과 같은 전개를 통해 다음 식이 나오게 됩니다.
¬((¬y)∨(x∧y))(오른쪽 식)
자세히 보기
¬((¬y)∨(x∧y))=y∧¬(x∧y)=y∧(¬x∨¬y)=(y∧¬x)∨(y∧¬y)=(¬x∧y)∨0=¬x∧ynot을 안쪽 항에 분배드모르간 법칙 적용y를 분배y and not y = 0A or 0 = A
¬x∧y
여기서 1번과 2번을 or로 합치면
(x∧¬y)∨(¬x∧y)
가 나오게 됩니다.
다만 별도로 마인크래프트의 회로짜는 특성 상 편의를 위해 and 대신 회로에 not과 or만 된다고 보면 다음과 같이 나타납니다.
¬(¬x∨y)∨¬(x∨¬y)
그리하여 이를 기반으로 회로를 짜보면 다음과 같이 나옵니다.

너무 비효율적인가?
그래서 위의 사진을 보면 우리는 식을 최적화했지만, 실전에서는 비효율적임을 알 수 있게 됩니다.
사실 상 게이트(or, not)를 거친다고 레드스톤 신호의 속도가 느려지는 것은 아니라보기 때문에, 결국 비용을 판단하게 될텐데, 레드스톤의 갯수가 원래 xor 게이트는 13개, 바로 위 이론 상 최적화한 xor 게이트는 21개가 사용되거든요.
전공 수업에서 알게되는 논리회로와 마인크래프트의 레드스톤 회로의 관점이 달라서 결국 정답이 이론과 달라짐을 알게되었습니다.
마무리
어쩌면 지루할지도 모르는 논리회로를 마인크래프트 레드스톤 회로라는 관점으로 작성해봤습니다.
논리회로: 게이트 수 / 깊이 → 성능
레드스톤: 블록 수 → 비용
이런 식으로 볼 수 있겠네요
이를 토대로 컴퓨터 구조 속 들어가는 CPU와 RAM 등을 구현해보면 어떨까 싶었지만 그 부분은 너무 복잡해져버리기 때문에 이번엔 이렇게 해보았습니다.
여러분들의 게임에도 이런 0과 1의 신호를 보낼 수 있는 무언가가 있다면 한번 해보는 것은 어떨까요?