Embedded2013. 3. 15. 11:30

개요


알테라사에서 제공하는 NIOS-II 프로세서는 FPGA내에 내장 시킬 수 있는 프로세서이다.

FPGA에 프로세서를 내장 시킬 필요가 있는 경우가 생기는데 

그럴때 찾을 수 있는 유용한 프로세서 중 하나이다. 

- 물론 알테라 FPGA에서 사용할 수 있다.




프로세서로 기본적인 골격은 당연히 가지고 있고 

기본 무기 세트도 가지고 있어서 사용할 때에는 맘편하게 구성해서 사용할 수 있다.


Core는 3가지 모드로 구성할 수 있는데


1) FAST : 속도 우선 모드 

2) Economy : 크기 최적화 모드

3) Standard Mode : 표준 모드


중 하나를 선택할 수 있다.


Fast와 Ecomony모드의 크기차이는 2~3배 차이가 난다.

속도가 필요 없는 경우 굳이 Fast로 할 필요는 없다.



IPs


제공되는 IP는 아래와 같다.


  • DMA Controller
  • Scatter Gather DMA Controller
  • SDR SDRAM Controller
  • CFI Flash Controller
  • EPCS Serial Flash Controller
  • JTAG UART Controller
  • UART Controller
  • SPI Controller
  • PIO Controller
  • Mutex Core
  • Mailbox Core
  • Timer Core
  • Vector Interrupt Controller Core
  • Performance Counter
  • Phase-locked loop (PLL)
  • Avalon® Interconnect Components


모두 기본적으로 제공되므로 무료이다.

쉽게 쉽게 사용할 수 있다.


관련된 문서는 여기에서 다운받을 수 있다.

http://www.altera.com/literature/lit-nio2.jsp


Cyclon3에 NIOS 올리기 : Sample


Cyclon3에서 NIOS를 포팅하는 것에 대해서는 AN548 문서에 잘 나와 있다.

제한 사항은 Active Parallel Configuration을 지원하는 디바이스에서 사용할 수 있다는 부분이다.

AP는 Flash Memory를 Parallel로 사용하는 경우를 의미한다.


구성은 아래와 같다.


이것은 NIOS-II /e 즉 Economy 옵션으로 컴파일한다.

프로세서는 내부에 있는 메모리에서 부팅하게 된다. 


Remote Update Controller는 내부 회로를 Remote로 Update할 경우에 사용한다.


이 시스템은 50MHz입력을 PLL에게 넣고 PLL에서 60MHz와 40MHz 출력을 만들어 낸다.

60MHz는 내부 컴퍼넌트용 클럭이고 40MHz는 Remote Update Controller용 클럭이다.


LED 

Push button PIO

JTAG UART


3가지 Peripheral을 내장하고 있다.


Software flow


예제용 소프트웨어의 플로우 차트는 아래와 같다.





 

기본적으로 간단한 프로그램이어서 자세한 설명은 생략



Example design


Example Design의 폴더 구조는 아래와 같다.




디자인은 두가지인데


application image ex

factory image ex


이다. 디자인은 완전히 같고 차이점은 소프트웨어 관련된 부분이다. 

LED3를 깜박이냐 아니면 LED4를 깜박이냐의 차이점이다.


Push Button을 누를떄 마다 application image와 factory image가 번갈아서 구성되고 실행된다.

아래 그림을 참조




예제 디자인의 실행


1) 보드와 PC를 USB를 이용하여 연결

2) NIOS Command Shell을 열어서, 

    (주) NIOS Command shell은 CYGWIN환경이다.

3) <work_directory>/compact_config/utilities

로 이동한다.

4) 보드의 플래쉬에 output.flash 프로그램을 프로그램한다.


 ./program_flash.sh output.flash <programming hardware>


  programming hardware는 보드의 이름이며 프로젝트의 이름이다.

  특별한 이름이 없다면  jtagconfig 으로 한다.


5. 보드상의  RECONFIGURE  버튼을 눌러서 Flash 프로그램을 완료한다. 잘 되면 LED3가 깜박인다.


6. nios2-terminal을 열으면 아래와 같은 메시지가 나온다.




7. 버튼 1을 누르면 app image로 전환된다. 그러면 아래와 같은 메시지가 나오면서 LED4가 깜박인다.



8. 다시 터미널을 열면 아래와 같은 메시지가 나온다.



여기서 Button 2를 누르면 Factory Image로 재 configuration 된다.


이런식으로 예제는 계속 디자인을 옮겨가며 깜박이게 된다.



디자인을 다시 빌드하기


(1) Quartus-II에서 

              <work_directory>/compact_config/ factory_image_ex

     에 있는  

              niosII_cycloneIII_compact.qpf 

        를 오픈한다.




 (2) Tool Menu에서 

       SOPC Builder

      를 선택한다.



(주) 알테라 Quartus - 12.1 버전에서는 Qsys로 업그레이드해서 사용하길 권하고 있다.




여기서는 그냥 진행한다.


아래와 같은 창이 나타난다.




(3) SoPC Builder에서 Generate를 선택한다.


그럼 Platform을 제너레이션 하고 아래와 같은 메시지를 낸다.




그럼 exit를 눌러서 프로그램을 빠져 나온다.


(5) 이제 보드에 프로그램을 한다. 다음과 같은 과정을 거쳐서 프로그램한다.

 a) NIOS-II 커맨드 쉘을 열어서 

 b) 아래 폴더로 이동한다.

        <work_directory>/compact_config/factory_image_ex/software/app/factory_image.

 c) 다음 커맨드를 넣는다.

      ./create-this-app



   컴파일하고 위와 같은 log가 나타난다.


   생각보다 많은 파일들을 컴파일한다. (나중에 바꿀려면, 귀찮게스리.. )

   (주) 프로그램 크기를 줄이기 위해서는 “Software Board Support Package (BSP) Settings” 을 참조


   결과로 elf 파일과  ../../../onchip_mem.hex 파일이 만들어진다.

   hex 파일은 flash 프로그램용 파일이다.


(6) 이제 Quartus-II에서 Start Compiliation을 선택하여 프로젝트 전체를 컴파일한다.



 이 과정은 좀(?) 시간이 걸린다.


 

(7) 정상적이면 SoF 파일이 생성된다. 이 파일에는 Hex가 포함되어 있다.


(8) 같은 과정을 application image ex에서도 진행한다. 


(9) 폴더를 

       <work_directory>/compact_config/utilities

     폴더로 이동한다.


 (10) 두개의 SoF파일 즉 Factory와 Application 파일을 하나의 flash로 합친다.

     아래의 커맨드로 합친다.


 ./flash_convert.sh \

../factory_image_ex/niosII_cycloneIII_compact.sof \

../application_image_ex/niosII_cycloneIII_compact.sof \

0x20000 0xA00000


이제 결과로 output flash가 만들어진다. 이것을 앞서의 과정처럼 프로그램해서 보드에서 테스트 할 수 있다.



'Embedded' 카테고리의 다른 글

Altera NIOS-II (4)  (2) 2013.03.18
Altera NIOS-II (3)  (1) 2013.03.17
uC/GUI 데모 그림입니다.  (0) 2010.07.18
이슈 트래킹 어떻게 하나요 ?  (0) 2010.07.10
1초만에 부팅되는 Embedded Linux  (0) 2010.07.02
Posted by GUNDAM_IM