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