붉은색 다각형 안의 회로를 전부 분석하는데 지난 9월부터 네달가량 걸렸습니다. 길지도 않고 짧지도 않네요.
이렇게, 칩 전체의 회로도를 작성한 후 베릴로그로 옮깁니다.
FM음원... DX7이라고 야마하 신디사이저에서 시작해서 80-90년대 많이 썼던 찡찡거리는 소리나는 칩입니다. 버블보블 게임 BGM이 되게 유명한데, 그것도 FM음원을 사용했지요.
제가 그 중에서 YM2151(OPM) 칩 전체를 이번에 리버스 엔지니어링하게 되었습니다. 이유는 기존 오픈소스 HDL 코어의 라이센스가 마음에 들지 않아서였어요.
저는 요새 FPGA에 아케이드 게임을 원칩화해서 넣는 일을 취미로 하고 있는데, 기존에 있는 YM2151 HDL코어의 라이센스가 GPL라이센스였습니다. 근데 제가 GPL라이센스를 별로 안 좋아합니다. 제 코드를 공개하지 않는 것도 아닌데, 클로즈드 베타 중에도 일단 뭘 배포만 하면 코드 공개 의무가 붙는다는 건 굉장히 너무한 것 같았거든요.
그래서 "꼬우면 니가 직접 해라" 정신으로 직접 만들었습니다. 게다가 기존 코어는 계측치와 남의 리버싱 데이터를 기반으로 제작한 건데, 저는 처음부터 끝까지 실리콘만 보고 만들었다는 큰 차이도 있고요.
원래 YM3812(OPL2), YM3438(OPN2C), YM2413(OPLL)등의 다른 시리즈의 칩들을 리버싱하고 싶었으나, 가장 근본이 되는 YM2151이라는 칩을 먼저 리버싱해 보았습니다. 근본이 되는 이유는, 이게 맨 처음 나온 FM음원의 원칩 설계여서 그렇습니다.
근데요, 인터넷에 FM음원의 원리에 대해 아주 많은 설명이 있고, 오픈소스 소스들도 많지만 정말 실제로 칩 안에서 무슨 일이 벌어지는지에 대해서는 잘 정돈된 설명이 전무했습니다. 거의 10년에 걸친 외국 포럼의 토론글, 소스에 적혀있는 파편화된 설명과 회로들, 아무런 지식도 없이 이것만 가지고 원리를 이해하긴 너무 어려웠습니다.
그래서 리버싱도 거의 다 끝나가는 이 시점에, 큰맘먹고 야마하 FM음원칩이 기본적으로 어떤 구조를 가지고 동작하나 글을 한번 써 보려고 합니다. 이해하기 위해서는 기초적인 논리회로 지식이 필요하나(게이트, 플립플롭, 가산기정도) 최대한 쉽게 써 보려고 합니다. 평소에 FM음원 좋아하는데 원리를 알고싶었다 하시는 분들이 계신지 궁금합니다.