'EISC'에 해당되는 글 2건

  1. 2009.01.30 DSP Design [2]
  2. 2009.01.16 EISC 코드를 맥에 컴파일 하기 2
ASIC SoC2009. 1. 30. 16:18

DSP Design [2]


앞서의 글에서 공개된 아키텍쳐를 이용해서 만드는 것이 좋다고 말씀드렸습니다.

공개된 아키텍쳐 중에서 당장 눈에 뛰는 것은 4가지 입니다.


- OpenCores 와

- SUN Sparc Processor

- Core-A

- MIPS-I


각각의 프로세서를 간략하게 정리하였습니다.


2-1 OpenCore - 1000/1200


Damjanl Lampret 라는 사람이 만든 OpenCores에서 공개한 프로세서로서 32비트 및 64비트까지 지원하는

명령어 세트를 가지고 있습니다.


오픈 코아는 명령어 자체가 걸려있는 것이 아닌것으로 생각되어, 구현 해도 큰 문제는 없을 것으로 생각합니다.


다만 현재 있는 것도 잘 되어 있어서 큰 문제는 없고, 실제 사용한 적도 있기 때문에

굳이 구현할 필요까지는 없을 것 같습니다.

무엇보다 공짜인데.. 라는 생각이 강한 오픈 코아이기 때문에 개인적으로는 위화감이 있습니다.



2-2 SUN Sparc


요게 맘에 들긴 합니다.

뭣보다도 정식 라이센스도 가능하고, 컴파일러와 O/S도 다 갖추고 있기 때문에 구현후에 좋습니다.


선에서 구할 수 있는 것은  T1과 T2프로세서 입니다.


T2는 서버를 원칩에 담겠다는 개념으로 만들어서 코드네임도 “NAIAGARA"로 명명했습니다.

결과물을 보면 물량전에서 절대 지지 않는 울트라 리스크 러쉬라고 할까요 ?

그런 정도의 엄청난 물량을 가지고 있습니다.


사용자 삽입 이미지


T1도 잘 만들었고 실제 이넘에서 프로세서 하나를 떼서 사업화 하겠다던 회사도 있었습니다.

그후에 소식은 못들어서 또 역사의 물결 속으로 사라진게 아닌가 하는 의구심도 듭니다.


하여튼 개인적으로는 이러한  레지스터 윈도우 방식은 참으로 좋은 아이디어로 생각합니다.
일정 수준까지의 함수의 호출에서는 스택을 건드리지 않고 파라미터와 내용을 전달하기 때문에
속도가 아주 빠릅니다.


다만 일정 수준을 넘어가면 Exception이 발생하고, 그 후에 다시 처리하는 것이 조금 시간이 걸린다는 단점이 있습니다.


개인적으로는 Embedded IP에서 게이트 카운트에 압박을 벗어나는 시대이므로, 용량이 좀 되는 어플리케이션에서는 좋은 어프로치라고 생각합니다.



 2-3 Core-A


작년 여름께 발표된 것으로, 특허청과 국내 대학 연합에서 만들어서 발표한 아키텍쳐입니다.


아키텍쳐가 공개된는지는 모르겠습니다만, 명령어 세트를 구하는 것은 쉬운 것이라서

구현이 가능한 범주에 넣었습니다.


NOP를 명령어 비트에 집어넣은 발상으로 만들었기 때문에 Data forwarding이 필요 없다는

개념을 가진 아키텍쳐로 보입니다.

컴파일러와 시뮬레이터가 아직 완전하지 않은것으로 보여 이 부분에 대한 보완이 시급한 것 같습니다.


하지만, 이제 시작이고  국내에서 EISC외에 새로운 아키텍쳐가 나왔다는 점에서 의미가 있다고 생각합니다.


2-4 MIPS-I


사용자 삽입 이미지

위의 사진은 도시바에서 만든 MIPS-4400입니다.

MIPS WIKI페이지에서 옮겼습니다.


ARM과 쌍벽을 이루면서, 미국에서 자존심을 걸고 지켜주는 프로세서이죠

프로세서 아키텍쳐 바이블 서적인 Computer Organization and Design: The Hardware/Software Interface 에서 설명하는 구조입니다.

프로세서 공부하시는 분들은 모르는 사이에 한번 공부한 아키텍쳐죠..



사용자 삽입 이미지

MIPS의 클론 프로세서를 검토한다면 렉서라라는 회사에 대해서 알아야 합니다. 이것에 대해서는  아래 링크를 한번 읽어보시면 좋겠습니다.

(눈물 없이는 읽을 수 없는 글입니다.)

http://jonahprobell.com/lexra.html

LEXRA는 MIPS-I 클론을 만들었고, 특허를 피해가기 위해서 노력을 했습니다만,  MIPS의 현질 공세에 밀려서 사라진 회사입니다.  저자는 MIPS가 Lexra에 대항했을 때의 그 노력으로 ARM에 대항했다면, 훨씬 좋은 결과를 만들었을 거라는 아쉬움을 이야기합니다.



MIPS-I에서 특허로 보호받는 부분은 명령어중 4개 정도 입니다. 그리고 이 명령어들은 Memory Miss Alignment에 대한 것들입니다.

이 것에 대해서는 우여 곡절이 많지만 하여튼 2006년 12월에 특허가 완전히 풀렸습니다.

따라서 구현에 법적인 문제는 없는것으로 되어 있습니다.


관련해서 오픈 코아의 Plasma프로세서가 MIPS-I을 이용해서 구현했습니다.

http://www.opencores.org/projects.cgi/web/mips/overview



앞서 말씀드린 바와 같이 MIPS-I의 특허는 완전히 풀렸기 때문에 이것을 이용해서 프로세서를 만드는 것이 가능합니다.


2-5 어떤 아키텍쳐를 ??


어떤 것을 구현하는게 좋은지는 법적인 문제와 실제 문제 그리고, 프로세서의 개발 환경 문제도 검토해야 합니다.

그리고  컴파일러의 최적화 문제에 대해서 고민을 해봐야 하고 또, 프로세서의 용도에 따라서 선택해야 하는 문제입니다.


이번에 만들고 싶은 프로세서는 고성능 DSP프로세서이기 때문에 명령어 확장도 가능한 형태로 가야 합니다. 이 부분을 고려하여서 위의 4가지 아키텍쳐 중에서 하나를 선택해서 구현합니다.



---------


그외에 공개된 아키텍쳐가 있다면 좋겠습니다.

이 자료는 현재까지 알고 있는 아키텍쳐에 대해서 검토한 과정을 정리한 것입니다.

언제나 그렇듯 제가 알고 있는 부분과 사실과 틀릴수도 있습니다. ㅋㅋ




Posted by GUNDAM_IM
Embedded2009. 1. 16. 19:44

EISC 코드를 맥에 컴파일 하기


맥을 쓰는 사람의 귀찮은 점은 항상 이런거다.. 뭐든지 맥으로 컴파일하기를 만들거나 찾아야 한다는 점이다.


1) 일단 EISC 코드를 가지고 온다.

    ADC홈피에서 자료실에서 uCLinux 페이지에서 다운로드 받은 뒤에 적당한 폴더에 압축을 푼다.


2) eisc용 로컬 폴더를 만든다.

/Users/kevinIm/Documents/Projects/EISC/eisclocal


3) 이 폴더를 패스에 등록한다.

export PATH=$PATH:/Users/kevinIm/Documents/Projects/EISC/eisclocal


4) MAKE File에서 COMPILER_PREFIX의 폴더를 새로 만든 폴더로 등록을 한다.


5) make를 한다.

  

    오류 1) gettext가 필요하단다. 

You must install 'gettext' on your build machine


Fink로 확인해보자


  fink list get


Information about 2543 packages read in 0 seconds.

     gengetopt            2.21-1001       Generates getopt_long functions

     getopt-long-pm586    1:2.34.b3-12    Extended processing of command line options

 p   getopt-long-pm588                    [virtual package]

     getoptbin            1.1.4-2         GNU version of getopt(1)

 i   gettext              0.10.40-125     Message localization support

 i   ........


뭔가 나오는데 gettext  가 있다. 이넘을 설치한다.


   음 그런데 설치가 되어 있다. 생각해보니 당연한거다.. 맥인데.. 


그럼 Makefile에서 뭔가 잘못된거다..

요거 저거 보니까.. 


TARGETS:=host-sed

이 있다. EISC 측에서는 이걸 쓰나 뭔가 정의가 잘못 된것 같다. 아마 리눅스 타겟 만들면서 구분할려고 한것 같다. 일단 나는 리눅스 만들일이 없으므로 무시하구...


        TARGETS:=sed


으로 수정해서 다시 컴파일한다. 이번에는 한참 잘 진행한다.


오류 2) 컴파일하다가 오류가 난다.


               /Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829/gcc/config/host-linux.c

/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829/gcc/config/host-linux.c: In function ‘linux_gt_pch_use_address’:

/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829/gcc/config/host-linux.c:192: error: ‘MAP_ANONYMOUS’ undeclared (first use in this function)

/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829/gcc/config/host-linux.c:192: error: (Each undeclared identifier is reported only once

/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829/gcc/config/host-linux.c:192: error: for each function it appears in.)

make[2]: *** [host-linux.o] Error 1

make[1]: *** [all-gcc] Error 2

make: *** [/Users/kevinIm/Documents/Projects/Core-A/EISC/EISC_uClinux_Compiler_Source_linux/AE32000C_gcc-3.4.5-v2.6.4/toolchain_build_ae32000/gcc-3.4.5-ae32000c-uclibc-v080829-initial/.compiled] Error 2

GUNDAMMACPRO:AE32000C_gcc-3.4.5-v2.6.4 kevinIm$ 


잘 보시면.. 

‘MAP_ANONYMOUS 가 정의가 안되어 있다고 에러가 난다.

Host를 리눅스로 설정해놓고 컴파일해서 그렇단다.  슬픈 맥 사용자의 운명인듯..


이것은 /dev/zero를 가리키기 위한 값이다. 일종의 템프 값인데 Linux나 BSD계열은 가지고 있고 OSX계열은 이것을 가리키기 위해서

MAP_ANON을 사용한다. 


이것으로 대치하기로 한다.


테스트를 위해서 (잘 되면 그냥 넘어가자.. 맥용 EISC 배포 시스템을 만들것도 아니니까..)

                코드는 아래처럼 간단하게 고친다.


#ifndef __GUNDAM__

#       define __GUNDAM__

#endif


#ifndef __GUNDAM__

  addr = mmap (base, size, PROT_READ | PROT_WRITE,

               MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);

#else

  addr = mmap (base, size, PROT_READ | PROT_WRITE,

               MAP_PRIVATE | MAP_ANON, -1, 0);

#endif


아래와 같이 수정한 뒤에 컴파일하면 .. 음 잘넘어가는군.. 


오류 3) 역시 컴파일하다가 오류..

이번에 좀 넘어가다가 다시 오류가 난다. 음...


libgcc2.c:2:unknown section type: @progbits


컴파일러의 오류로 보여진다.

일단 에러난 부분을 짤라서 디스어셈블 해본다.


어셈블러 등을 못찾는 에러다 이럴수가.. Make 하면 어셈블러도 설치되는게 아니었단 말인가 ?

후덜덜.. 

여기까지 하고.. 보니.. 이넘이.. GCC만 배포하는것 같네요 쩝...


항상 S/W툴은 텅빈 PC에 한번 설치해보고 나서.. 배포해야 합니다.

안그러면 자신의 환경에 있지만 유저의 환경에는 없는 프로그램이 반드시 1개 이상 나옵니다.

저같은 맥 유저는 더 슬퍼집니다.


컴파일러는 소스로.. 어셈블러는 CYGWIN으로 배포하니.. 음.. 어쩔까요..  이것을. .

다시 기다려야 할듯.. 빨랑  EISC 사이트가 오픈되어야 하는데.. 


        다시 포팅 시도는 ASM소스를 배포하면 그떄 시도해 보겠습니다. 지금은 그냥 PASS.....



'Embedded' 카테고리의 다른 글

LVDS Owner’s Manual [3]  (0) 2009.05.16
LVDS Owner’s Manual [2]  (0) 2009.05.15
LVDS Owner’s Manual [1]  (0) 2009.05.14
인텔 컴파일러 최적화 기능 테스트  (0) 2009.03.23
2008년 10가지 Embedded Design 컬럼  (0) 2009.01.03
Posted by GUNDAM_IM