- UP5K FPGA를 사용하여 작가가 게임 "Another World"를 하드웨어로 재제작했습니다.
- 게임은 그래픽을 생성하기 위해 블리터와 래스터라이저를 호출하는 가상 머신(VM)에서 실행됩니다.
- 작가는 FPGA에서 VM, 블리터, 래스터라이저의 하드웨어 구현을 만들었습니다.
- 설계는 FPGA의 자원 요구 사항 내에 맞추어지며, 128KB의 SPRAM 메모리를 사용합니다.
- 작가는 게임 데이터와 코드를 통해 데이터가 흐르는 방식을 이해하는 것으로 시작했습니다.
- 설계에는 모든 것을 함께 연결하고 디스플레이 갱신을 추가하는 SOC가 포함되어 있습니다.
- 프레임버퍼는 SPRAM 블록을 사용하며, 각 프레임버퍼는 완벽하게 SPRAM 블록에 매핑됩니다.
- 디스플레이 컨트롤러는 25 MHz로 픽셀을 스트리밍하며, 깜빡임을 방지하기 위해 더블 버퍼링을 사용합니다.
- 블리터는 한 프레임버퍼의 내용을 다른 프레임버퍼로 복사하거나 단색으로 프레임버퍼를 채웁니다.
- 작가는 다양한 FPGA 보드에서 설계가 실행되는 하드웨어로 게임을 성공적으로 재창조했습니다.
- 이 기사에서는 게임 엔진에서 블리터와 래스터라이저의 구현에 대해 논의합니다.
- 블리터 유닛은 vblank 동안 픽셀을 복사하며, 래스터라이저 유닛은 프레임버퍼에 다각형을 그립니다.
- 블리터는 시작 펄스를 확인하고 지정된 경우 색상을 채웁니다.
- 래스터라이저는 듀얼 포트 BRAM에서 다각형 정점을 읽어 오목 다각형을 그립니다.
- 래스터라이저는 투명도를 위해 팔레트 트릭을 사용하며, 다른 소스 프레임버퍼에서 픽셀을 복사할 수 있습니다.
- 게임 엔진에는 폰트 그리기 엔진이 포함되어 있으며, 사전 렌더링된 배경을 지원합니다.
- 빌드 프로세스에는 게임 데이터 파일을 복사하고 시뮬레이션을 실행하거나 다른 하드웨어 플랫폼에서 게임을 플레이하는 것이 포함됩니다.
- 이 기사에서는 게임 Another World를 위해 FPGA에서 실행되는 하드웨어 설계의 개발에 대해 논의합니다.
- 작가는 게임 테스트, 타이밍 조정, 렌더링 문제 수정, 음악 추가 등 아직 완료되어야 할 여러 작업을 언급합니다.
- 작가는 또한 게임의 다른 부분을 연결하고 게임 상태를 저장하는 가능성에 대해 언급합니다.
- 이 하드웨어 위에 다른 게임이나 데모를 구축하는 것도 잠재적인 향후 프로젝트로 언급됩니다.
- 이 기사는 블로그 시리즈, 포트, 도구와 관련된 자료에 대한 링크를 제공합니다.
- 이 프로젝트에서 사용된 Silice 디자인은 MIT 라이선스 하에 있으며, 수정된 C++ 포트는 원래의 GPL 라이선스를 유지합니다.
- 이 기사에서는 프레임버퍼, 래스터라이저, 블리터 및 가상 머신(VM)과 같은 핵심 용어를 업계에 익숙하지 않은 독자를 위해 설명합니다.