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