반응형
Nios에서는 2개의 data transfer방식이 있다.
1. registered 방식 (avalon native)
2. memory 방식 (avalon dynamic)
일반적으로 registered방식은 external peripheral 같은 곳에 사용이 되고, memory방식은 memory같은 곳에
사용이된다.
이러한 두가지 transfer을 구분하기 위해 < io.h >에서 아래와 같은 function들이 제공된다.
1. Registered 방식 access : IOWR(), IORD()
2. Memory 방식 access : IOWR_xxDIRECT(), IORD_xxDIRECT() [xx : data width]
한가지 예로써 32bit sdram을 write 할때를 보면
IOWR(sdram_base_addr, 0, 11);
IOWR(sdram_base_addr, 1, aa);
IOWR(sdram_base_addr, 2, bb);
IOWR(sdram_base_addr, 3, cc);
이렇게 하면 0x0 -> 77, 0x4 --> aa, 0x8 -> bb, 0xc -> cc가 쓰여진다.
하지만 아래와 IOWR_xx를 사용하면,
IOWR_32DIRECT(sdram_base_addr, 0, 11);
IOWR_32DIRECT(sdram_base_addr, 1, aa);
IOWR_32DIRECT(sdram_base_addr, 2, bb);
IOWR_32DIRECT(sdram_base_addr, 3, cc);
이렇게 하면 sdram_base_addr에 계속해서 over write하는 결과가 되어서
결국 0x0 -> cc가 되면 결과가 된다.
만일 memory방식의 device에 8bit씩 사용하고 싶으면 아래와 같이 위의 syntax를 변경해야한다.
IOWR_32DIRECT(sdram_base_addr, 0, 11); --> IOWR_8DIRECT(sdram_base_addr, 0, 11);
IOWR_32DIRECT(sdram_base_addr, 1, aa); --> IOWR_8DIRECT(sdram_base_addr, 1, aa);
IOWR_32DIRECT(sdram_base_addr, 2, bb); --> IOWR_8DIRECT(sdram_base_addr, 2, bb);
IOWR_32DIRECT(sdram_base_addr, 3, cc); --> IOWR_8DIRECT(sdram_base_addr, 3, cc);
이렇게 하면 0x0-> 11aabbcc가 쓰여지게 된다.
1. registered 방식 (avalon native)
2. memory 방식 (avalon dynamic)
일반적으로 registered방식은 external peripheral 같은 곳에 사용이 되고, memory방식은 memory같은 곳에
사용이된다.
이러한 두가지 transfer을 구분하기 위해 < io.h >에서 아래와 같은 function들이 제공된다.
1. Registered 방식 access : IOWR(), IORD()
2. Memory 방식 access : IOWR_xxDIRECT(), IORD_xxDIRECT() [xx : data width]
한가지 예로써 32bit sdram을 write 할때를 보면
IOWR(sdram_base_addr, 0, 11);
IOWR(sdram_base_addr, 1, aa);
IOWR(sdram_base_addr, 2, bb);
IOWR(sdram_base_addr, 3, cc);
이렇게 하면 0x0 -> 77, 0x4 --> aa, 0x8 -> bb, 0xc -> cc가 쓰여진다.
하지만 아래와 IOWR_xx를 사용하면,
IOWR_32DIRECT(sdram_base_addr, 0, 11);
IOWR_32DIRECT(sdram_base_addr, 1, aa);
IOWR_32DIRECT(sdram_base_addr, 2, bb);
IOWR_32DIRECT(sdram_base_addr, 3, cc);
이렇게 하면 sdram_base_addr에 계속해서 over write하는 결과가 되어서
결국 0x0 -> cc가 되면 결과가 된다.
만일 memory방식의 device에 8bit씩 사용하고 싶으면 아래와 같이 위의 syntax를 변경해야한다.
IOWR_32DIRECT(sdram_base_addr, 0, 11); --> IOWR_8DIRECT(sdram_base_addr, 0, 11);
IOWR_32DIRECT(sdram_base_addr, 1, aa); --> IOWR_8DIRECT(sdram_base_addr, 1, aa);
IOWR_32DIRECT(sdram_base_addr, 2, bb); --> IOWR_8DIRECT(sdram_base_addr, 2, bb);
IOWR_32DIRECT(sdram_base_addr, 3, cc); --> IOWR_8DIRECT(sdram_base_addr, 3, cc);
이렇게 하면 0x0-> 11aabbcc가 쓰여지게 된다.
반응형
'FGPA_Verilog_VHDL' 카테고리의 다른 글
Flash Memory을 위한 Nios II HAL API (0) | 2008.05.07 |
---|---|
CFI_FLASH Control functions (0) | 2008.05.07 |
HAL에 SDRAM 접근 표준 함수는 없는 것 같음... (0) | 2008.05.07 |
VHDL로 구현한 스탑워치(Stop watch) DE2-70 Base (0) | 2008.03.29 |
DE-70 보드를 이용한 P161-MAN LED Dot Matrix Module 테스트 (0) | 2008.03.28 |