8비트 컴퓨터 만들기 Ben Eater Part.6(output) [1]
7-segment display
휘황찬란 rgb의 디스플레이를 생각했지만, 우리의 컴퓨터는 고작 10진수의 출력이 한계다. ben eater의 튜토리얼에 디스플레이 관련된 내용도 있으니 여유가 있으면 추가하고 싶긴하다. 하지만 귀찮음이 더 크므로 이걸로 만족하겠다.
A 레지스터 안의 내용을 숫자로 표시해주는 것.
Logic Gate을 이용한 7-segment 만들기
구조는 대강이러하다. 예측했듯이, 하나의 segment마다 하나의 led가 있어서 핀 하나와 연결되어 있다. 그러니, 하나의 숫자를 표시하기 위해 우리는 적절한 위치의 핀을 켜야 한다.
이 일이 숫자 하나면 꽤 할만은 한데, 우리는 여러 개의 숫자를 표시해야 하므로 참 복잡하다.
segment 중 a에 해당하는 핀만 해도 0000~1111에 해당하는 경우들에 대해 모든 경우를
대응해야 한다. 어떨 때는 켜지고 어떨 때는 켜지는지 말이다. 이걸 and, or 게이트를 이용해 표현하면 우측 사진처럼 복잡해진다. 별로 안 복잡하다고? 이 짓을 7개의 segment에 대하여 모조리 해줘야 한다.
이걸 영상에서 해줬다. 저 수많은 전선들,, 정말 존경스럽기만 하다. 이쯤되면 칩 하나쯤 나와서 다 해결해주겠거니 했는데, 이 정도 규모면 칩 하나만에 하더라도 너무 비효율적인거 같다. 특히 우리가 만들 결과가 한자리 수가 아님을 생각하면 더 곤란하다.
참신한 수가 필요하다.
EEPROM
ROM
읽을 수는 있지만 처음 만들어질 때 새겨진 데이터를 수정할 수 없다.
PROM
ROM에서 처음 한 번 프로그래밍 기회가 주어진다. 딱 한 번 쓸 수 있는 ROM이다.
EPROM
칩에 창을 두어 자외선 노출로 값이 reset할 수 있게 한다. Reset 할 수 있는 PROM인 것.
EEPROM
전기로 값을 수정할 수 있는 EPROM이다. 이 순간부터 RAM과 무슨 차이가 있나 궁금하긴 하다.
핀 내용을 보면 A가 11개 I/O가 8개 있다. A핀에서 주소를 설정하고 I/O핀으로 값을 받아올 수 있으니 2048 Byte의 용량을 가졌다는 말이 된다. 2048개의 주소가 있다.
CE(Chip Enable)핀이 활성화 되어야 chip 사용이 가능하며, OE(Out Enable)핀이 활성화 될 때 값이 나온다. WE(Write Enable)핀을 이용하여 Chip에 값을 작성할 수 있는건 맞지만, ROM은 수정이 힘들게 되어있으니 특정 조건을 만족해야 한다.
EEPROM의 쓰기와 관련해서는 타이어그램이 있다.
OE는 비활성화, CD는 활성화되어 있는 상태에서 WE가 내려갈 때에는 ADDRESS를 올라갈 때는 DATA 값을 확인하는 것을 볼 수 있다. 그 사이의 간격들에 MIN, MAX 값들이 있어서 여간 조작하기가 힘들어 보인다. 가장 어려워 보이는 것은 tWP로, MAX값이 정해져있다. 1000 ns 를 넘어서면 안된다. 이는 손으로 스위치를 누르는 것보다 더 빠르게 조작해야 함을 보여준다.
짐작이 됐겠지만, 이러한 짧은 순간의 타이밍은 캐퍼시터를 이용해 해결할 수 있다. 저항값 * 캐퍼시터값이 충전까지 걸리는 시간임을 이용하면, MAX 값을 맞추는 일은 어렵지 않다.
아날로그 EEPROM 프로그래밍 장치를 만들었다.
EEPROM을 이용한 7-segment 만들기
이제 그 복잡한 논리 게이트 7-segment를 단순하게 만들 순간이다. 기존에는 각 숫자에 맞게 a,b,c,d,e,f,g라는 7-segment를 논리게이트를 이용해 연결시켰지만 ROM을 이용하면 단순학게 할 수 있다. 각각의 숫자를 주소라고 두고 a~g를 저장된 데이터로 넣어놓는 것이다. 가령 ROM의 1 주소에는 1001111이 담겨있다.
마무리
논리게이트에 비교하여 엄청 작아진 display다. ROM을 이용한다는 생각이 참신해서 기억해두고 싶다.
하지만, 이 방법은 하나의 display만을 커버하지 못한다. 여러 개의 숫자는 여러 개의 ROM을 써야만 하는 걸까.
이 다음 내용도 참신하다. 8개의 out 핀 뿐이지만 여러 개의 display를 커버하는 방법!