(0) 동기
최근에 작은 프로세서에 대해서 검토해 봤습니다.
조건은
- 작아야 하며,
- 그래도 C가 지원되에어 하며
- AHB 정도는 나오거나 쉽게 붙을 수 있어야 한다
- 소스 코드를 구할 수 있어야 하며
- 라이센스에서 GPL이 없는 것이어야 한다는 것입니다.
적어놓고보니 좀 조건이 까다로운가 싶기도 하네요.. 하지만
저런 조건이 되어야 이리저리 사용할 수 있습니다.
이리저리 찾다가 생각보다 작은 프로세서 하나를 찾았습니다. ZPU입니다.
잘 아시겟지만, 오픈코아에 있는 프로세서 입니다.
사실 저도 거기에 있는줄은 알았지만, 오픈코아의 특성상 반신반의 하였습니다.
엔지니어의 원칙,
내가만든 코드도 안믿는데 남이 만든 코드를 믿겠느냐. 라는.. 불신론에 가까운 생각을..
가지고 있어서..
우연히 다른 프로젝트를 검토하다가 외국 모 회사의 개발 환경을 검토하는 중에 해당 프로세서를 사용한 예제를 주고 있는 것을 발견하고 유심히 한번 보았습니다.
(1) 라이센스
GPL 라이센스 문제는 생각보다 복잡합니다.
사용상에 아무런 제약이 없지만, 문제는 링크된 모든 코드를 오픈해야 한다는 점 때문입니다.
프로그램상의 링크된 코드를 하드웨어로 재 해석한다면 붙어있는 모든 IP를 의미합니다.
- 아직 이부분에 대해서는 판례나 정보가 정확하게 정의된 것이 없어서 구체적으로 어떻게까지
공개되어야 하는지 명확하지가 않습니다.
인터넷에서도 이에 대해서 많은 토론을 진행하고 있습니다.
개인으로 할때야 아무런 문제가 없지만
회사차원에서 할 때에는 이런 GPL이 적용된 코드를 사용하면,
자사 설계 아이피를 모두 오픈해야 하는 곤란한 문제가
발생합니다. 그래서 GPL 라이센스가 붙은 IP를 사용하는 것은 상당히 조심스러워집니다.
예전에 OpenCore 프로세서도 발표는 GPL로 하였지만, 저자가 적용한 라이센스의 의미는 모두 사용하라는 것이지 모두 공개하라는 의미는 아니였다는 글을 포스팅한적도 있습니다. 하지만, 저자가 회사를 만들면서, 공개에 관련된 모든 글들이 슬그머니 사라지면서, 그 글도 슬그머니 사라져 버렸죠.
스팍 T1을 잘라서 만든 SRISC도 이 GPL을 따라갑니다.
- 만드신 분들도 크게 돈을 목적으로 하지 않는것 같아서 그분들은 크게 문제는 없습니다만,...
그래서 최소한의 조건은 BSD라이센스여야 한다는 점입니다.
- 사용은 공짜로 , 링크된 부분은 공개는 안해도 되는 라이센스 조건입니다.
이번에 찾은 ZPU는 Architecture는 GPL이어서 만약 아키텍쳐에 대한 수정이 가해지면
모두 공개하여야 합니다. 대신에 코드에 대해서는 BSD라이센스를 사용하여서 사용상에
큰 문제인 링크된 코드를 오픈하라는 문제는 없어지게 됩니다.
(2) 소스 코드 다운 받기
http://opensource.zylin.com/zpudownload.html
툴은 리눅스와 윈도우/시그윈 버전을 다운 받을 수 있습니다.
프로세서 소스코드는
git clone git://repo.or.cz/zpu.git
으로 다운 받을 수 있습니다.
툴 체인은 SRC로도 다운 받을 수 있습니다.
- 제 경우 맥을 쓰므로 새로 빌드를 하였습니다. 이것은 다음 번에 정리하도록 하겠습니다.
툴 체인은 toolchain 폴더로
프로세서는 zpu 폴더에 다운 받게 됩니다.
(3) ZPU Processor 폴더 구조
zpu /misc /arm7
/ddrsdram
/wishbone
/wip (EMPTY Folder)
/zpu /docs
관련 문서를 보관하는 폴더입니다.
zpu_arch.html 파일을 읽으면 됩니다.
하위 폴더로 presentation이 있는데, PT 자료를 포함합니다.
/hdl
프로세서 HDL 코드가 들어 있습니다.
자세한 폴더 내용은 다음 절에서 정리합니다.
/roadshow
예제 프로그램들이 들어 있습니다.
/sw
시뮬레이터와 간단한 샘플 예제가 들어 있습니다.
(4) ZPU Architecture
ZERO Operand 아키텍쳐입니다.
쉽게 말씀드리면 JAVA 프로세서와 같은 Stack Based CPU입니다.
따라서 명령어는 8비트로 됩니다.
위의 코드를 보면 5를 스텍에 넣고
loadsp 20으로 하여서 SP+20의 값을 읽어서 스텍 최상층에 넣습니다.
다시 ADD 명령으로 2개의 최상층 스텍 값을 읽어서 더한 후에 다시 스텍에 넣습니다.
스텍에 계속 읽고 쓰므로 느리긴 하지만, 나름대로, 간편한 구조여서 프로세서의 크기를 줄이는데
일조를 합니다.
이런 아키텍쳐이므로 수학연산을 하기위해서 쓰는 것은 좀 무리가 있겠습니다.
다만, 간단한 제어용으로 사용하는데에는 좋을 것 같습니다.
사실 요즘은 맘만먹으면 구할 수 있는 프로세서가 많이 있습니다.
Altera의 NIOS,
Xilinx의 picoblaze등등
그런 상황에서 ZPU의 장점이 뭔지 생각해봐야 할 부분인듯 합니다.
좋은 점은 아주 작으므로, 초기 시스템 세팅에 필요한 동작을 수행할때 사용하면 좋을 것 같습니다.
최근에 모 프로젝트에 8051을 검토하였습니다만, 이정도 급이면 쓸만할 것 같습니다.
자료를 보면 eCOS도 포팅되어 있기 때문에 적당한 수준의 제어용 어플리케이션까지는
응용이 가능할것 같습니다. - 다만, uCOS-II가 더 낳지 않을까 생각합니다.
이런 프로세서가 타겟으로 하는 종류의 어플리케이션에서는 취향 문제가 더 크게 작용하게 마련입니다.
어떤 프로세서를 쓰더라도 다른 사람이 크게 관심을 가지지 않기 때문이죠
- 다음번에는 ZPU의 변형에 대해서 정리해보겠습니다.