ASIC SoC2009. 8. 21. 12:22
SystemC는 하드웨어 기술 언어입니다.

여러가지 장점과 단점이 있지만, 그런 부분에 대한 내용은 다른 자료를 참고하시면 됩니다.
공부하면서 정리하는 자료들입니다.

하드웨어와 일반 컴퓨터 언어의 가장 큰 차이점은 병렬성입니다.
일반 컴퓨터 언어는 순차적으로 프로그램이 진행되지만, 하드웨어 기술 언어는 일정 블럭 단위 혹은 라인단위로 병렬성을 가지고 실행합니다.

엄밀하게는 순차적으로 움직이지만, 잘 계산하여서 마치 병렬로 움직이는 것처럼 보이게 됩니다.

SystemC는 하드웨어의 병렬성을 모델링 하기 위해서 process  모델로 운용을 합니다.
시뮬레이션 커널은 이 프로세스 모델을 크게 나누어 아래와 같이 3가지 형태로 구분됩니다.

1. SC_THREAD


SC_THREAD(process_name);

SystemC 커널에 process_name 이라는 프로세스 함수를 SC_THREAD 형식으로 등록을 시킵니다.
이것은 시뮬레이션 커널에게 ,  THREAD 형태로 등록되도록 하여 주면, 이후 시뮬레이션이 시작되면 적당한 방법으로 실행하게 됩니다.

다만 다른 프로세스 모델과 틀린점은  아래와 같습니다.
 - 시뮬레이터에서 단 한번만 호출됩니다.
   따라서 지속적으로 운용하고 싶다면, 무한 루프를 만들어서 운용해야 합니다.
 - 함수로서 주고 받는 파라미터가 없습니다.
    즉 전달하는 파라미터나 리턴되는 값이 없이 함수 자체로만 존재합니다.
    이는 시뮬레이션 커널이 해당 쓰레드를 위한 함수를 등록하고 호출하기 위한 매커니즘을 단순하게 하기 위해서 준비된 규칙입니다.

SC_MODULE(onemethod) {
   sc_in<bool> in;
   sc_out<bool> out;

   void toggler(); /* Process a method of the class */

   SC_CTOR(onemethod) {
        SC_THREAD(toggler) ; /* Create an instance of the process */
        sensitive << in ;        /* Sensitive 리스트 */
   }
};

void onemethod::toggler() {
bool last = false;
for(;;) {
last = in ; out = last ; wait();
last = in ; out = last ; wait();
}
}


 2.SC_CTHREAD


 
SC_CTHREAD(process_name,clockname);
 
 SC_THREAD를 조금 확장한 버전입니다. C가 의미하는 것은 Clock을 의미합니다.
 즉 THREAD 버전은 한번만 호출된다는 것을 특징으로 하지만
 SC_CTHREAD로 등록되는 프로세스는 Clock의 이벤트 마다 호출된다는 점을 특징으로 합니다.

SC_MODULE(onemethod) {
   sc_in_clk clock;
   sc_in<bool> trigger,  in;
   sc_out<bool> out;

   void toggler(); /* Process a method of the class */

   SC_CTOR(onemethod) {
        SC_CTHREAD(toggler,clock.pos()) ; /* 사용할 클럭 에지와 함께 선언됩니다.*/
   }
};

void onemethod::toggler() {
bool last = false;
for ( ;; ) {
wait_until (trigger.delayed == true ) ;
last = in ; out = last ;
wait();
last = in ; out = last ;
wait();
}
}

 3. SC_METHOD


  SC_METHOD(process_name);

 Sensitive list에 등록된 인자들이 변할때 마다 호출됩니다. 하지만, 매 호출될때 마다 내부 값들이 보존되지 않고 새로 할당됩니다.

앞서의 2개의 프로세서와의 가장 큰 차이점은 내부에서 wait()를 쓸 수 없다는 점입니다.

SC_MODULE(onemethod) {
sc_in <bool> in;
sc_out <bool> out ;
void inverter ();

SC_CTOR(onemethod) {
SC_METHOD(inverter);
sensitive << in ;
}
};

void onemethod:: inverter()
{
bool internal;
internal = in;
out       = internal;
}

'ASIC SoC' 카테고리의 다른 글

SystemC : Thread 2nd  (0) 2009.08.26
GTKWave 를 OSX에서 구동하기  (0) 2009.08.24
Sound Engine Processor  (0) 2009.08.18
맥에서 SystemC 하기  (0) 2009.08.10
[5] 가장 작은 32비트 프로세서 ZPU 입니다  (0) 2009.07.28
Posted by GUNDAM_IM
ASIC SoC2009. 8. 18. 21:32
출장 후유증과 그동안 은근히 짱박아 두었던 회사일들에 밀려서 정신 못차리고 지내고 있습니다.

덕분에 블로그에 올리는 글도 빈약한 내용을 채우느라,  사진 + 약간의 글로 떄우는 날림성 글을 올려서 양심의 찔림도 있습니다 쩝.  ㅋㅋ

이런 저런 일이 있지만, 최근에 벌어진 여러가지 일 중에서
그래도 좋은 뉴스는 지난주에 칩이 하나 FAB-OUT되었는데 다행히 1주일만에 정상 동작을 확인했습니다.

사용자 삽입 이미지

사운드 처리 엔진을 가지고 있는 프로세서 칩입니다.
꽤 성능이 잘 나오고요, 이런저런 기능을 내장하고 있습니다.

저렴한 가격에 200MHz의 ARM과 VLIW를 컴팩트(?)하게 꾸겨 넣어서
다양한 오디오 어플리케이션과 시스템 컨트롤에서 사용할 수 있습니다.

역시 FAB-IN하기 전에 FPGA테스트에서 많은 공을 들인 만큼
결과가 FPGA와 같이 나와서 정말 다행입니다.
은근히 걱정하였는데 잘 움직였습니다.

"항상 버그는 모니터 바로 아래에 있다"는 말과
"항상 칩은 테스트 한만큼 움직인다"는 말이 역시 실감나는 결과입니다.

이래저래 당분간 회사의 주력아이템이 될 놈이 잘 움직여서 기분 좋은 한주가 될 것 같습니다.




'ASIC SoC' 카테고리의 다른 글

GTKWave 를 OSX에서 구동하기  (0) 2009.08.24
SystemC : Thread  (0) 2009.08.21
맥에서 SystemC 하기  (0) 2009.08.10
[5] 가장 작은 32비트 프로세서 ZPU 입니다  (0) 2009.07.28
[4] 가장 작은 32비트 프로세서 ZPU 입니다  (0) 2009.07.23
Posted by GUNDAM_IM
ASIC SoC2009. 8. 10. 21:39
맥에서 SystemC를 하는 것을 검토해 봅니다.

SystemC를 최근에 사용을 검토해보고 있습니다.

회로가 자꾸 커지고 있고, 설계해야 할 IP들중에서  간단한 것들은 이미 다 설계했기 때문에,
남은것은 무지 복잡하고  귀찮은  IP들만 남아 있습니다. 이런것들을  설계하고 검증하기 위해서는
기존 방식과는 다른 방법으로 접근해야 할 필요성이 있다고 생각되어서
검토를 합니다. 언제나 그렇듯이 중간에 때려칠수도 있습니다. 흐흐흐..

SystemC의 장단점은 뭐 이렇쿵 저렇쿵 할 필요 없이
다른곳에 있는  자료에서 많이 발견할 수 있어서 여기서는 생략합니다. (역쉬 퀴차니즘..)

라이브러리 컴파일 하기 (실패)


일단, 먼저 , 시작하기 전에  맥에서 사용하는 것은 조금 난망한 일이 될뻔 했습니다.
systemc.org에서 필요한 라이브러리를 다운받아서 컴파일을 시도했습니다.
그런데  그동안 웬만한 라이브러리는 다 컴파일이 되었는데 이넘은 컴파일 하면서 계속 오류가 발생합니다.
이리저리 컴파일해서 진행하는데 손볼데가 의외로 많이 발생해서, 하다가 에잉.. 하고 포기하기로 하였습니다. 웬지 바보같고, 검토만 하면 될일이이서, 여기서는 컴파일하는 것을 포기하고 다른 분들이 컴파일한것을 찾아서 사용하기로 했습니다.

그런데 재미있는것이 발견되었습니다.

http://www.logicpoet.com/

이 회사는 (정확하게는 회사인지 불명확하지만...) 맥용 SystemC Lib과 XCode에서 컴파일 하는 컴파일 슈트를 배포하고 있습니다. 다운 받아서 설치하면 그걸로 끝입니다.

그리고 Scansion 이라고 하는 맥용 Wave form viewer를 제공하고 있습니다.
오픈된 버전은 크기의 제한을 가지지만 $100 정도만 내면 크기에 제한이 없는 버전을 사용할 수 있습니다.리눅스로 들어가지 않아도 되는 솔루션을 파는것입니다.

$100이면 요새 많이 질러서 아주 많이 궁한 저로서는 조금 구매하기가 벅찬 금액이어서..
일단 시험버전을 가지고 어느정도 까지 사용해보고 좋으면 구매하는 것으로 생각하였습니다.
(오늘 확인해 보니 $49로 내려갔네요.. 아직 버그가 있어서 그런듯합니다.
 가격을 내렸다는 이야긴 업데이트를 않한다는 이야기로 들립니다.
 업데이트 되는 것을 봐서 구매하도록 해야 하겠습니다.)

아래 그림은 해당 프로그램 그림입니다.
나름 편리하니 사용하면 좋을듯 합니다.

사용자 삽입 이미지
일단 이것으로 사용하면 됩니다.

그리고 같은 페이지에서 제공하는
SystemC Suite를 설치하면 XCode에서 SystemC 코드를 컴파일하는 것이 가능합니다.



사용자 삽입 이미지

위의 그림은 XCOde에서 SystemC프로젝트를 선택하는 것입니다.

사용자 삽입 이미지

프로젝트 이름을 지정하는 과정입니다.

사용자 삽입 이미지
생성된 프로젝트입니다.
라이브러리와 메인 코드 파일을 포함하고 있습니다.

그대로 빌드하여서 실행하면 다음과 같은 창을 얻을 수 있습니다.

사용자 삽입 이미지

제대로 된 컴파일은 다음 기회에 하기로 하고 여기서는 이정도로 마무리하겠습니다.

그리고 Scansion은


WAVE Viewer인 Scansion은 VCD파일만 읽어들일 수 있습니다.
그리고  아직 완성된 버전이 아니라 조금씩 버그가 눈에 띄고 있습니다.
시간이 많이.. 되어야 버그가 좀 고쳐질 것 같습니다.
그래도 맥에서 Wave를 볼 수 있는 거의 유일한 프로그램이라서 좋습니다.
 

Posted by GUNDAM_IM
ASIC SoC2009. 7. 28. 09:16

합성


이번에는 합성을 하여 보겠습니다.

타겟 FPGA는
 자이링스 V5LX330을 타겟으로 진행하였습니다.
 
 LUT 활용율은 0.3% 정도가 됩니다.

사용자 삽입 이미지
 속도는 PAD부분이 포함되어서 정확하지는 않습니다만, 대략 150~200MHz까지 뽑을 수 있을것 같습니다.
 
크기는 꽤 스마트하게 나옵니다.
모토에서 말하듯이 가장 작은 32Bit RISC 프로세서라는 말이 실감이 나는 크기입니다.
생각해보면 Stack Based Architecture이기 때문에 내부 레지스터 파일이 거의 없다는 것이
이러한 크기를 가지고 옵니다.

ASIC으로 합성해보면

1만 게이트가 조금 안되게 나옵니다.
속도를 주고 합성을 하면 2만게이트 근처까지 올라가는 것 같습니다.
90n에서 속도가 500~800MHz까지 나오는것 같은데, 메모리 인터페이스의 문제가 있을터이니, 조금 낮게 잡고 운용하면 될것이라 생각합니다.
보다 정확한 사항은 이리저리 테스트를 해보아야 정확하게 얻을 수 있을 것입니다.

끝으로


우연히 본 Evaluation Kit에 들어있는 프로세서이고,

요새 세상에 Stack Based Architecture라는게 조금 뜬금없어서,
한번 이리저리 테스트를 해보았습니다. 시뮬레이션 한것도 있는데 따로 정리할 시간이 없네요. 에궁..

한때 세상을 풍미할 뻔 했던 JAVA Processor도 이런 구조인데,
아무래도 퍼포먼스의 문제가 있어서 잘 사용하지 않는 구조입니다.
요새는 프로세서가 작은것이 미덕이 아니고, 프로세서가 저전력인것이 미덕인 세상에 살고 있습니다.
한때는 7000Gate네 10000게이트네 하면서 머리 싸매며 만들던 시절이 있었지만, 50000게이트라도 좋으니
잘 움직이고, 적당히 빠르면 좋습니다.

그리고 이 프로세서의 S/W까지 분석을 해야 하는데
이 프로세서의 퍼포먼스가 그렇게 높지 않은것 같아서, 한번 합성해보고 시뮬해보는 정도에서 끝냈습니다.
(역쉬 귀차니즘.. 굳이 S/W까지 할 필요가 없을듯.. 해서.. )


Posted by GUNDAM_IM
ASIC SoC2009. 7. 23. 09:18
ALZPU의 인터페이스에 대해서 간략하게 정리하였습니다.


I.O는 아래와 같습니다.

사용자 삽입 이미지
크게 ROM/RAM/IO/System 으로 해서 4개 군으로 분류하여서 정리할 수 있습니다.
이름만 보아도 대충 다 아는 것들이어서 따로 정리할 필요는 없겠습니다.

시스템 구성의 예는 별도 폴더에 있습니다.
ROM/RAM/UART등을 붙여둔것인데,  아래에서 찾을 수 있습니다.

ALZPU/ZPU/HDL/ALZPU/V4/DESIGNS/BENCHMARK
alzpu_system.vhd

UART 는 Tx만 하게 되어 있습니다.  흠.. 뭔가 불안한건가 ?

파일이 시스템 구성 파일입니다.
시스템 구성은 다음과 같습니다.

사용자 삽입 이미지
UART/TIMER등을 기본적으로 가지고 있습니다.
나머지는 일반적인 인터페이스입니다.

slave select 2/4/8이 있고요.. 이 중에서 4 짜리를 사용했습니다.
뒤에 붙은 숫자는 당연히 Slave의 개수를 의미하겠죠.

alzpu_slaveselect.vhd 파일에 보면

  ........
  slave_sel <= master_in.addr(address_bits-1 downto address_bits-2);
  .......

이란 코드가 있고요.. address_bits의 크기에 따라서.. slave_select가 결정이 됩니다.
예를 들어서 16비트 어드레스를 쓴다면,

  ( 15 downto 14 )

가 되어서

0x0000 : Slave 0
0x4000 : Slave 1
0x8000 : Slave 2
0xC000 : Slave 3

이 됩니다.

alzpu_system.vhd 코드에 보면

...
  ioss: alzpu_slaveselect4
    generic map (
      address_bits => alzpu_rom_num_bits+1,
      slave0_address_size => alzpu_ram_num_bits,
      slave1_address_size => alzpu_ram_num_bits,
      slave2_address_size => alzpu_ram_num_bits,
      slave3_address_size => alzpu_ram_num_bits
    )
    port map (
      master_in => iosi,
      master_out => ioso,

      slave_in_0 => uart_si,    -- 0x8000 00
      slave_out_0  => uart_so,
      slave_in_1 =>  open,     -- 0xA000 01
      slave_out_1  => dummy_so,
      slave_in_2 => timer_si,   -- 0xC000 10
      slave_out_2 => timer_so,
      slave_in_3 => open,       -- 0xE000 11
      slave_out_3 => dummy_so
  );
....
이 됩니다.

따라서, 자동으로 설정됩니다.

나머진 코드를 보면 쉽게 알 수 있습니다.
(대충 넘어가는 분위기로.. 마무리 하는게 아니라, 코딩이 알기 쉽게 되어 있어서 그렇습니다. TT;;; )




Posted by GUNDAM_IM
ASIC SoC2009. 7. 20. 09:52
이번에는 툴 체인을 빌드합니다.
언제나 그렇듯이 맥에서 빌드합니다.
빌드하다가 발생하는 에러는 이번 케이스의 경우에는 맥에 한정된 것으로 보입니다.
맥의 경우 폴더를 파일로 보여주기 때문에 (윈도우즈만 사용하시는 분은 이게 뭔말인지 잘 모르시겠지만.. )
발생하는 문제점입니다.

윈도우즈나 리눅스에서는 별다른 문제가 없을 것으로 생각됩니다.


(1) 툴 체인을 맥에서 빌드하기


hdl 관련된 툴 소스는 아래 명령어로 받을 수 있습니다.

git clone http://repo.or.cz/r/zpu.git

받으면 폴더는 아래와 같이 생성됩니다.


소스 코드는 다음과 같이 다운 받을 수 있습니다.
git clone git://www.ecosforge.net:8100/zpu/toolchain.git

다운 받으면 빌드를 하면 됩니다
다운 받은 폴더는 다음과 같은 구조로 되어 있습니다.

/toolchain/binutils
      /dejagnu
              /gcc
              /gdb
              /testresult

입니다.

빌드는 toolchain에서.. build.sh로 하면 됩니다.
이넘을 아예 제공해주더군요
이넘은 Binutils와 GCC를 빌드해줍니다.
GDB는 따로 빌드해야 합니다.

빌드를 하면 다음과 같은 오류가 발생합니다.


1.  binutils/bfd


configure: error: installation or configuration problem: C compiler cannot create executables.

make: *** [configure-bfd] Error 1


C 컴파일러가 워킹을 하지 못해서 발생한 오류입니다.


추적하여 가면 다음과 같은 명령어에서 동작을 하지 못함을 알 수 있습니다.


 gcc -o conftest.dSYM -g -O2   conftest.c  1>&5


중간에 conftest.dSYM을 만들어 내는데 이것이 문제입니다.


log 파일을 보면

checking for executable suffix

에서 dSYM을 찾아 붙입입니다.


테스트를 위해서 덤프 코드를 넣어서 수행해보면 아래와 같은 사항을 확인할 수 있습니다.


checking for executable suffix... (cached) .dSYM

[4] .dSYM


그럼 문제는 .dSYM이 만들어지는 것에 있네요.. 이것은 MAC에서 사용하는 파일-폴더 확장자입니다.


이 코드는 bfd/configure : 2441라인에서 시작하는 부분에 해당합니다.


코드를 확인해보면

시그윈이거나 윈도우즈 일때는 .exe를 붙이고

아닐때는 스크립트에 의해서 찾아서 붙이도록 되어 있습니다.


일일이 코드 고치기도 귀찮으니까

그냥 exeext 를 강제로 “”로 매핑시켜 버립니다.


그러면 컴파일이 진행됩니다.

진행되면서 같은 오류가 발생한는데 그때마다 강제 매핑을 하고 진행하면 됩니다.

몇군데 매핑시켜놓고 진행하면 mac에서도 잘 컴파일이 됩니다.

- 4군데 정도 되네요..


2.gcc를 빌드하다가..

..........

vmodsi4.o libgcc/./_mulsi3.o libgcc/./_xordi3.o libgcc/./unwind-dw2.o libgcc/./unwind-dw2-fde.o libgcc/./unwind-sjlj.o libgcc/./gthr-gnat.o libgcc/./unwind-c.o libgcc/./_eprintf.o libgcc/./__gcc_bcmp.o

make[2]: zpu-elf-ar: Command not found


에서.. 에러가 발생합니다.


env.sh를 실행을 시켰는데 아닌것 같습니다.

확인해 보니 실행하는게 아니고 source  하는거네요


source env.sh


로 해서 매핑시키고 다시 환경 변수를 확인해 보니 잘 들어갑니다.


set

.......


PATH=/sw/bin:/sw/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin:/usr/X11R6/bin:/Users/kevinim/Desktop/zylin/toolchain/toolchain/install/bin

......

다시 컴파일 하면 됩니다.





(2) 컴파일러 테스트


간단한 C 코드를 만들어서 테스트를 확인해 보도록 하겠습니다.

코드는 아래와 같습니다.

#include <stdlib.h>

main()
{
  printf("GUNDAM forever!!");
}

컴파일하여 어셈블러를 만들어보겠습니다.

Macintosh:test1 kevinim$ zpu-elf-gcc -S -O2 test.c


어셈블러 파일은 아래와 같습니다.

        .file   "test.c"
        .section        .rodata.str1.4,"aMS",@progbits,1
        .balign 4;
.LC0:
        .string "GUNDAM forever!!"
.text
        .globl  main
        .type   main, @function
main:
        im -1
        pushspadd
        popsp
        im .LC0
        storesp 4
        impcrel (printf)
        callpcrel
        loadsp 4
        im _memreg+0
        store
        im 3
        pushspadd
        popsp
        poppc
        .size   main, .-main
        .ident  "GCC: (GNU) 3.4.2"

Posted by GUNDAM_IM
ASIC SoC2009. 7. 16. 16:27
이번에는 종류를 정리해 보도록 하겠습니다.

(1)  ZPU4 SMALL



에서 찾을 수 있습니다.

가장 작은 프로세서 종류이고 최소한의 명령어만을 가지고 있습니다.
크기와 간단성에 중점을 둔 프로세서 입니다.
내부에 듀얼포트 램을 써서 데이터와 코드를 넣어서 동작시킵니다.

주요 용도는 하드웨어 상태머쉰용도입니다.

3 State로 동작합니다.

fetch -> Decode -> execute

입니다. 파이프라인 형태로 동작하지 않으므로 당연히 3단계 상태로 움직입니다.
일반 8051이 6단계/12단계로 움직이는데 3단계정도야 양호하죠


(2) ZPU4 Medium



에 있고 싱글포트 메모리 인터페이스를 가지고 있습니다.
따라서 데이터와 코드 그리고 I/O를 싱글포트 메모리 인터페이스를 통해서 운용할 수 있습니다.

명령어 세트가 더 많기 때문에 메모리 인터페이스 밴드대역폭이 zpu_core_small 보다 작아도 전체 퍼포먼스는 높습니다.

(3) Pipelined ZPU

파이프라인 버전의 ZPU 입니다.
다운은 다음 명령으로 다운을 받을 수 있습니다.

git clone git://repo.or.cz/zpu/alzpu.git

관련 페이지는 아래 페이지 입니다.

http://repo.or.cz/w/zpu/alzpu.git

이 버전의 ZPU를 다운 받으면 나머지 ZPU들도 함께 다운 받을 수 있습니다.
그냥 이 버전으로 다운 받아도 될것 같습니다.

이 버전의 ZPU가 정상 동작하는지에 대해서는 확인을 해 봐야 합니다.
인터넷에는 그에 대한 정보가 아직 올라온 것이 없네요


(4) ZEALOT

프로토스의 질럿인지는 모르겠습니다.


2가지 버전이 있으며 Small과 Medium 버전이 있습니다.

이 버전은 Salvador E. Tropea.에 의해서 제작되고 관리됩니다.

주요한 특징은

(5) ZY2000


에서 찾을 수 있습니다.

ZPU4에다가 Wishbone I/F를 가지고 있습니다. 그리고 풀셋으로  페리페럴을 가지고 있습니다.
-  ZPU
- DRAM
- soft-MAC
- Wishbone bridge
- GPIO
등을 포함하고 있습니다.

(6) Verilog 버전

에 가면 베릴로그 버전의 프로세서 모델을 찾을 수 있습니다.

어떤 버전이 좋은지는 검토를 해봐야 알겠습니다만,
파이프라인이 잘 동작한다면 차라리 그쪽이 좋지 않을까 합니다.
다만, 새로운 명령어 추가에 문제가 있을 수 있겠네요




Posted by GUNDAM_IM
ASIC SoC2009. 7. 13. 20:50

(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의 변형에 대해서 정리해보겠습니다.

Posted by GUNDAM_IM
ASIC SoC2009. 6. 9. 08:51
이번에 올리는 것은 글이 아니고 자료입니다.

몇달전에 부탁받은 컴퓨터 아키텍쳐 강의 자료입니다.
그동안 빈둥거리며 놀다가 (사실 놀지는 않았습니다만, 쩝.. )
하루만에 날림으로 만들었습니다.

에효~~

수정을 해야 하는 부분도 있겠습니다. 하지만 참고로 보시면 될 것 같아서 올립니다.
사실 한번 만든 자료는 나중에 다시 손볼려고 해도 특별한 기회가 없으면 손을 보지 않죠.. ㅋㅋ

내용은 개략적인 아키텍쳐와

MIPS 24K, MIPS 34K 위주로 정리하였습니다.

MULTI-THREAD가 어떻게 움직이는지 보며주는 정도까지 정리하였습니다.
내부 구조까지 정리하면 곤란하고, 해야 할 말도 많기 때문에 외부에서 보이는 것 위주로 정리하였습니다.

그냥 참고용으로 만든자료니, 너무 큰 기대는 금물입니다.

컴퓨터 아키텍쳐 발표용 자료

Posted by GUNDAM_IM
ASIC SoC2009. 4. 7. 07:57

아래에 관련된 글을 올렸는데요


이번에는 그냥 동작하는 사진을 올립니다.

AHB 버스를 통해서 FPGA보드를 구동하는 것입니다.

예상보다 쉽게 동작을 성공시켜서 기분이 좋습니다.


보드 색상도 맘에 들고,

사실 녹색 보드는 너무 평범하고, 맘에 안들죠


다음 보드 색상은 푸른색입니다.

"기가노스의 푸른매" 를 생각해서 선택할 색상입니다.

(혹 모르시는 분들은 메탈아머 드래고나를 보시기 바랍니다.)


이제 ARM Platform 만들때 프로세서 때문에 FPGA 테스트에서 고생할 일은

많이 줄어들것 같습니다.


통상 3배의 개발 편의성 (ㅋㅋ)


사용자 삽입 이미지

Posted by GUNDAM_IM