본문 바로가기

하드웨어/Ben eater

8비트 컴퓨터 만들기 Ben Eater Part.4(RAM)

https://www.youtube.com/watch?v=FnxPIZR1ybs&list=PLowKtXNTBypGqImE405J2565dvjafglHU&index=19


8x8 bit RAM

귀여운 1bit

 

시작은 1bit에서 시작된다. 1bit는 레지스터에서 한 번 다뤄서 익숙해졌다.

 

1bit를  8x8 형태로 이어붙인다.

 

그 1bit가 촘촘한 형태가 되어 RAM이 되었다.

이런 구조면, 로우 헤머 취약점 있을거 같은데?? 다 끝나고 실험해 볼 생각에 기분이 좋다.

 

16개의 레지스터라고 봐주면 좋다. 몇 번째 8bit를 활용할건지 선택하고, 그곳의 8bit를 활용하면 될 뿐.

 

A0 A1 A2 A3 가 1~16개 대응된다.

 

주소를 4자리 2진수로 입력할 수 있게 하는 부분이다.

A0, A1, A2, A3의 값을 지정하면 EN0~EN15 중에 어떤 8bit를 활용할 것인지 확정된다.


제작

RAM은 5개의 칩으로 구성된다.

 

Ben eater가 사용하는 RAM 칩은 4bit가 모여있었고, 출력이 거꾸로 나왔다.

RAM을 2개 사용하는 데, 그게 사진 왼쪽의 첫 두개이다. 

세 번째, 네 번째 칩은 not 게이트로 거꾸로 나온 출력을 다시 돌리기 위해 두었다.

올바르게 된 출력은 Led에서 보이며, Enable 핀이 High가 될 때, Bus로 옮겨진다.

Enable이 High가 될 때만 Bus로 옮기기 위하여 가장 우측에 Tri-State Buffer를 두었다. 저건 이전에도 많이 보았지 ㅎㅎ.

 

전선 다 꽂은 모습

주황색이 주소를 설정하는 점퍼 케이블, 초록색이 Load와 관련된 부분, 위쪽 노란색이 Enable Flag, 아래쪽 노란색이 Load Flag이다.

 

사실상 Ram은 다 만들어졌지만, 데이터 디버깅도 가능하고 버스랑도 이어지는 내용을 만들어야 해서 필요한 부분이 많이 남았다.


 

주소 레지스터

주소 레지스터

 

주황색 선은 주소를 담당하고 있다. 주황색 선을 버스로 바로 꽂기에는 한 가지 문제가 생긴다. 4 주소에 7이라는 숫자를 넣고 싶다고 할 때, 주소 숫자를 기억해 둘 곳이 필요하다는 것. 그래서 램 주소만을 위한 레지스터 하나가 필요하다.

좌측에 있는 딥 스위치는 4bit를 전부 설정할 수 있는 스위치인데, 프로그래밍 모드에서 필요하다고 한다.

자세한 내용은 나도 모르지만, 프로그래밍을 위해 개발자가 램에 특정한 값을 넣어놔야하나 보다.

 

Selecter 구조도

 

그래서 필요한게, 프로그래밍 모드와 Run 모드를 전환할 수 있는 도구이다.

 

주소 레지스터 완성된 모습

 

완성된 모습은 위와 같다. 셀렉터가 딥 스위치와 레지스터 사이에 놓여 둘 중 하나를 선택하게 해준다.

 

스위치와 관련된 내용이 참신해서 기록한다.

스위치를 누른 경우 Selecter의 flag값에 true와 false가 들어갈 줄 알았는데, 아니다.

접지하거나, 끊어지거나의 경우로 나뉜다. 

셀렉터가 풀업저항인 점을 이용하여 접지하여 false로 두거나 선을 아예 연결하지 않아 true로 만들어 버린다.

풀업 저항을 이용하다니..! 나도 언젠가 이용해야지. 

 

확실히 딥 스위치를 두니까, 렘의 주소를 손으로 설정하기가 쉬워보인다.


 

RAM Load

RAM의 Load도 바로 버스에서 가져오지 않는다. 

1. 프로그래밍 모드일 때는 값을 설정할 수 있게 해야 하고,

2. 아닐 때는 올라가는 clock에 맞춰서 값을 load해야 한다.

 

Load에도 마찬가지로 딥 스위치가 있다.

 

버스랑 딥 스위치를 사이에 두고 Selector를 두었다. Selector가 4bit 짜리라서 2개 배치했다.

 

버튼과 Selector 추가

 

Load의 입력 방식이 프로그래밍 모드와 Run 모드가 다르다.

프로그래밍 모드라면 버튼이 눌리자 마자 딥스위치의 값이 옮겨지도록 해야할거고,

Run 모드 일 때는 clock에 맞춰서 load해야 한다.

그런 이유로 이전의 노란 Load Flag 전선을 Selector 출력에 배치했다. (사진의 ㄴ자 전선.)

 

우측에 AND Gate 추가

 

Clock에 맞춰서 Load를 (Clock AndGate LoadFlag)로 풀어냈다. 

진짜 천재인 듯.

이제는 Clock이 High일 때만 값을 받아들일 것.

하지만, 이거는 Clock가 High가 될 때가 아니라 그냥 High인 것 같은데 라는 의문도 있었다.

 

마지막으로 위 사진에서, 각각의 Selector에 프로그래밍 모드인지를 알려주면 완성


 

마무리

RAM

 

와 RAM 진짜 크다.

사실 저기에 진짜 RAM은 꽤 작게 있다는 걸 생각하면, 이게 배보다 배꼽이 커졌다는 말이 아닐까 싶다.

RAM은 진짜 재밌었다. 여러 값이 담긴다는 게 너무 흥미로운 것 같다.

 

++ 또 참신한거 하나 더. 아까 전에 Clock이 High일 때 Load 받는거를 And Gate로 풀어냈었는데, 그 부분 자세히 보면 커패시터가 추가되었다. 커패시터를 이용하면 커패시터를 충전시킴으로써 전력이 확 낮아지게 할 수 있다. 그 점을 이용하여 High가 될 때, 아주 잠깐 동안만 전류가 흐르도록 하는 것이다.

전류가 사라지기까지의 시간은 커패시터의 크기 * 저항의 크기라고 한다. 이 부분도 본격적으로 공부하면 재밌겠다.