Embedded2013. 3. 17. 19:39

Hardware Tutorial


이 장은 튜토리얼에 있는것을 따라가면서 정리하였다.

Version에 따른 Mismatch도 있어서 확인하면서 진행해야 한다.


튜토리얼은 


http://www.altera.com/literature/tt/tt_nios2_hardware_tutorial.pdf 


이고 

제공되는 하드웨어 디자인 파일은 


Design Files for Nios II Hardware Development Tutorial


에서 참조하여 정리함.


전체적으로는 하드웨어에서 소프트웨어까지 진행하는 것을 알려준다.

다만 새로운 하드웨어를 어떻게 정리하는 가에 대해서는 아직 정리가 안되어 있다.




만들고자 하는 시스템의 블럭도는 위의 그림과 같다.


Nios II System Development Flow 




NIOS II 개발 플로우는 3가지로 구분되어서 진행된다.

(1) 하드웨어 설계 단계

(2) 소프트웨어 설계 단계

(3) 시스템 설계 단계


간단한 시스템의 경우에는 한사람이 다 수행할 것이고 복잡한 시스템에서는 적당히 인력을 나누어서 설계할 것이다.

소프트웨어 개발에 대한 내용은  Getting Started with the Graphical User Interface 을 참조할 것.


시스템 분석


- 하드웨어와 소프트웨어의 분할에 대해서 판단하는 과정

- 메모리 대역폭

- NIOS-II를 어떻게 구성 할 것인가 ? ( Fast , Smaller , or... ??)

- RT/OS를 사용할 것인가 ?

- 어떤 하드웨어가 더 필요한가 ? 


뭐 말은 이렇게 하지만 이 자료에서는 그런 세부적인 것에 대해서는 설명이 당연히(?) 없다.



Defining and Generating the System in Qsys 


시스템 분석이 되었다고 가정하고,  이 예제에서는 Qsys를 이용해서 NIOS II 프로세서 코아와 메모리 그리고 다른 컴포넌트를 연결하고 설정한다.  이후에 Qsys는 설정된 내용대로, 내부 연결을 자동으로 생성된다.


Qsys에서 나오는 출력은 아래와 같다.


Qsys Design File (.qsys)  

   Qsys의 시스템의 하드웨어 구성에 대한 정보를 담고 있다.


SOPC Information file (.sopcinfo) 

   .qsys 파일에 대한 설명을 가지고 있고 이것은 XML 형태로 되어 있다.

   NIOS II EDS는 .sopcinfo 파일을 사용하여 대상 하드웨어의 소프트웨어를 생성한다.


HDL File

    당연히 생성되는 HDL File들.. 

    Quartus II에 의해서 컴파일 하여 .sof 파일을 만들어 낸다.



Integrating the Qsys System into the Quartus II Project 


Qsys에 의해서 NIOS-II를 생성한 후에, 이것을  Quartus-II 프로젝트에 통합해야 한다. 

그리고, Quartus-II에 의해서 FPGA 디자인 파일을 만들어 낸다.


앞의 그림에서 보았듯이 보통은 NIOS-II만 들어가는게 아니고 다른 Logic들도 들어가게 된다. 즉 적당한 로직이나 IP등을 Integrate 한다. 이 튜토리얼에서는 추가 로직을 포함시키는 부분까지는 포함하지는 않는다.


Quartus-II에서 핀과 I/O를 설정하고 타이밍등을 설정한다. 그렇게 한 후에 컴파일 하여서 sof 파일을 만들고, FPGA를 Configuration 한다.


Developing Software with the Nios II Software Build Tools for Eclipse 


NIOS-II의Software Build Tools (SBT)은 Eclipse를 이용해서 NIOS-II의 소프트웨어 개발을 진행하게 된다. Qsys를 이용해서 FPGA 시스템을 생성한 후에 C/C++ 어플리케이션은 Eclipse를 이용해서 만들어간다. 두개의 툴 사이에는 socinfo 라는 파일을 이용해서 정보를 교환한다. 이 파일은 Qsys에서 생성이 된다.


socinfo를 분석해서 NIOS-II용 프로그램을 빨리 진행 할 수 있는 HAL을 제공한다. 

그리고, 상황에 따라서 어플리케이션 코드를 라이브러리화 하여서 사용할 수 있도록 하여 준다.


NIOS-II를 위한 C/C++ 프로젝트를 만들어 내기 위해서 NIOS II SBT는 .sopcinfo 파일을 이용한다.


NIOS-II의 SBT에서 아래와 같은 출력물을 만들어낸다. 물론 상황에 따라서 만들어내는 것도 있고 아닌것도 있다.


- system.h file : 하드웨어를 참조할 수 있는 심폴들을 정의한다. NIOS-II SBT는 이 파일을 자동적으로 생성하고 사용자는  

                   이것을 기반으로 BSP를 만들어간다.


- .elf file  : C/C++ 코드를 컴파일하여 만들어내는 최종 결과 프로젝트이다. 

              이 코드를 NIOS-II에 직접 다운로드 할 수 있다.


- .hex file : on chip memory의 초기화 코드이다.  NIOS II SBT는 이 파일을 생성시킨다.

              ( 그냥 인텔 헥사 파일이고, 이 파일을 이용해서 ROM을 만들어서 FPGA에 넣으면 된다.

                이 과정을 초기화 코드라고 설명하고 있다. 

                : 매뉴얼에서 정리한 사람은 Embedded System Software를 잘 알지 못하는 듯.. )


- Flash memory programming data - 플래쉬 메모리에 데이터를 기록한다. NIOS II SBT는 flash programmer를 가지고 있다 이것은 사용자의 프로그램을 플래쉬메모리에 프로그램 할 수 있게 해준다. 플래쉬 프로그램은 적당한 부트 코드를 추가할 수 있기 때문에, 사용자 프로그램은 플래쉬에서 프로그램을 부팅 할 수 있다.

  ( 이것은 정확한 메카니즘은 모르겠다. 혹시 CRT0를 이야기하는게 아닐까 생각이든다. 

    그냥 부팅하면 되지 부트코드를 만드는 것은 좀 이상하고 그것을 플래쉬 프로그래머가 하는건 더 이상하다.)


이 예제에서는  .elf 파일을 NIOS-II에 다운로드 하는 것에 집중한다.


Running and Debugging Software on the Target Board 


NIOS-II SBT는 프로그램을 다운로드 및 디버깅에 필요한 기능을 다 가지고 있다

보다 자세한 내용은  Nios II Software Developer’s Handbook.의 Getting Started with the Graphical User Interface 절을 참조  


Varying the Development Flow 


개발 프로세스는 그렇게 반드시 해야 하는 것은 아니다. 일반적인 내용으로 진행하면 된다.

세부적인 사항은 그때 그때 달라요가 된다.


Creating the Design Example 


순서는 아래와 같다.


  1. “Install the Design Files” 


    일단 Quartus-II 를 설치하는 것이고 디자인 파일들을 알테라 웹에서 다운 받아서 설치한다.

    Design Files for Nios II Hardware Development Tutorial

    위의 링크에 파일이 있다.


  2. “Analyze System Requirements”.


    NIOS-II 프로세서 시스템의 데모를 간단하게 해보는 것.

    - 왜 문서에서는 말로 설명하지 ?


    실제 시스템을 구성하여서 경험을 쌓는다.

    커스텀 NIOS-II 시스템을 만들어서 테스트 해보기

    어떤 보드에서도 동작 가능한 NIOS-II 시스템을 만들어서 설치

    이런 저런 시스템을 처리


    여기서 만드는 시스템은 아래와 같다.

      - NIOS-II Core/2K Cache

      - 20KB On-Chip Memory

      - Timer

      - JTAG UART

      - PIO

     - System ID Component



  3. “Start the Quartus II Software and Open the Example Project”.


    (1) Quartus-II 프로그램 실행

    (2) Open Existing Project로 하여서 

    (3) design files directory로 가서

    (4) nios2_quartus2_project.qpf를 선택해서, Open 하여서 프로젝트를 오픈





    (5) Block Diagram File을 열기 위해서 nios_quartus2_project.bdf를 이용하여 오픈하기 위해서 

         아래와 같은 순서로 진행한다.

         (a) Open을 선택하여 다이얼로그를 연다.

         (b) Design File Directory에 가서 

         (c) nios2_quartus2_project.bdf를 선택하여 연다. 그럼 아래와 같은 그림이 나타난다.


          



    아래와 같이 창이 나온다.



    Pin만 표시되고 나머지는 텅 비어 있다. 이제 여기에다가 Qsys를 이용해서 로직을 만들어 넣는다.


  4. “Create a New Qsys System”.


     Qsys를 이용해서 NIOS-II 프로세서 시스템을 만든다.  

    새롭게 NIOS-II를 만들러면 Qsys를 클릭해서 창을 띄우고 System Contents tab을 표시한다.


  5. “Define the System in Qsys”.


    Qsys 시스템을 이용해서  NIOS-II 하드웨어를 만든다.

    Qsys는 소프트웨어에 관련된 일은 하지 않는다. 그것은 Qsys에서 생성된 .socinfo를 이용해서 NIOS-II SBT에서 수행한다. 


    5.1 Specify Target FPGA and Clock Settings 


    Clock Setting과 Project Setting Tab을 선택하여, 시스템의 클럭과 디바이스를 선택할 수 있다.


    (1) Project Setting Tab에서

         Device Family 를 선택하고 적당한 Device를 선택한다.






    (2) 보드상에서의 OSC를 보고 주파수를 확인한다. 

          - 이런것 까지 자세하게 설명해 주는 알테라의 친절함.


    (3) Clock Setting Tab에서 

          MHz 컬럼에서 clk_0.clk_0의 clock frequency를 더블 클릭한다. 

          이 클럭은 Qsys의 기본 시스템 클럭이다.

         이 클럭의 값은 FPGA를 드라이빙하는 클럭과 같아야 한다.



    (4) 클럭 값을 넣고 Enter... 


    5.2  Add the on chip memory


    프로세서 시스템은 적어도 하나의 메모리를 가지고 있어야 한다. 이 디자인은 20KB의 On Chip Memory를 사용하여서 데이터와 명령어를 위해 준비한다.  다음과 같은 순서로 더한다.


    (1) Component Library tab에서 

         Memories and Memory controllers를 확장하여, On-Chip으로 해서 On-Chip Memory를 선택한다.

         대개 ROM/RAM이다.



    (2) Add로 하여서

         ROM 또는 RAM을 선택한다.

            파라미터 설정이 나타나고 아래와 같은 창이 나타난다.



    (3)  Block Type은 Auto로

          Total Memory size는 20480으로 해서 20KB로 

          - 그외의 설정은 건드리지 말자 모드 기본 값을 사용.


    (4) Finish


    (5) System contents tab에서 on chip memory의 인스턴스가 나타난다.



    (6) Name 컬럼에서 Rename을 클릭 그리고, onchip_mem을 넣는다.






    5.3 Add the NIOS-II Processor Core


    여기서는 NIOS-II/s 코아를 2KB I Cache를 만든다. 

    설명을 위해서 NIOS-II/s를 만들어서 사용한다. NIOS-II/s는 간단하지만 성능이 잘 나오는 프로세서이다. (라고 주장..)


    (1) Component Library tab에서

          Processors -> NIOS-II Processor를 클릭

          NIOS-II Tab 윈도우가 나타난다.



    (2) NIOS-II Core에서 NIOS-II/s를 선택



    (3) H/W Multiplication type에서는 NONE으로 선택 

         곱셈기가 소프트웨어로 선택


    (4) H/W Div를 Off로 

         나눗셈은 없는 걸로...


    (5) Finish를 선택

          그러면 Qsys System Contents tab에서

          들어가면 NIOS-II가 나타나있지만 오류가 두개 나와 있다. 일단 무시




    (6) Name 컬럼을 선택하고 rename 하고, 이름을 cpu로 설정


    (7) Connections 컬럼에서

          clk 포트를 clk_0클럭에 연결한다.

         마찬가지로 on-chip memory의 clk1 포트에 연결한다.

         연결 크로스 되는 지점에서 원이 채워져 있으면 연결 비워져 있으면 연결이 안된 것으로 표시된다.

         -> Xilinx의 MB와 기본적으로 같은 시스템이다.


    (8) clk_0 클럭 소스의 clk_reset 포트를 on-chip memory에 reset1에 연결, NIOS-II 프로세서의 reset_n에 연결한다.


    (9) on chip memory의 s1 포트를 NIOS-II의 instruction master와 data_master 포트에 연결한다.


    (10) NIOS-II의 프로세서의 reset_n 포트와 on-chip memory의 reset1 포트를 clk0 클럭의 clk_reset 포트에 연결한다.


    (11) NIOS-II 프로세서의 설정 창을 다시 더블클릭해서 창을 연다.

            

    (12) Reset Vector에서 reset vector memory list에서 onchip_mem.s1을 선택하고, Reset vector offset box에서 

            0x0을 넣는다. 

         

    (13) Exception vector에서

            Exception vector memory 리스트에서 on_chip_mem.s1을 선택하고 Exception Vector offset box에서 

           값을 0x20을 넣는다.





     


    (14) Cache and Memory Interface tab을 클릭


    (15) Instruction cache list에서 2KB를 선택


    (16) Burst Transfer는 Disable로


    (17) Number of tightly coupled instruction master port(s)에서 None으로 선택





    그외의 다른 세팅은 건드리지 말고 


    (18) Finish를 선택한다.


    5.4 Add the JTAG UART


    JTAG UART는 NIOS-II와 Host PC간의 인터페이스를 할 수 있다.

    USB-Blaster를 이용해서 통신하게 된다.


    (1) Component Library tab에서 interface protocols -> Serial -> JTAG UART

         를 선택



    (2) Add

        



    위와 같이 하고

    그외의 설정은 건드리지 않는다.


    이름은 jtag_uart로 넣는다.

    JTAG UART의 clk 포트는 clk_0에 연결한다.

    NIOS-II의 data_master 포트를 avalon_jtag_slave 포트에 연결한다.






    5.5 Add the interval timer


    이것도 그냥 앞서와 같이 연결한다.


    Component Library-> Peripherals -> Micro controller peripherals -> Interval timer




    이름은 sys_clk_timer 로 설정




    5.6 Add the System ID peripheral


    Components Library -> Peripherals -> Debug and Performance -> System ID Peripheral


    다른 것은 건드리지 말자




    이름은 sys_id 로 한다.





    5.7 Add the PIO



    Component Library -> Peripherals -> Microcontroller peripherals -> PIO




    이름은 led_pio로 설정


    나머진 잘 연결한다.






    5.8 Specify Base addresses and Interrupt Request Priorities


    이 시점에서 필요한 하드웨어가 전부 다 연결되어 있다. 이제 각 컴포넌트의 상호 동작을 설정하는 작업을 해야 한다.

    이 섹션에서는 각각의 컴퍼넌트의 base address를 설정하고, 인터럽트 우선 순위를 설정한다.


    Qsys는  Assign Base Addresses 커맨드를 통해서 각 컴포넌트의 base address 설정을 할 수 있다.  


    주의 할 점은 

    - NIOS-II 프로세서는 31비트 공간을 사용한다. 따라서 0x0000 0000 ~ 0x7FFF FFFF 을 접근한다.

    - NIOS-II는 Symbolic constant를 이용해서 어드레스를 참조한다.  이 값은 기억하기 쉬운 방식으로 준비되어 있다.

      (누가, 어떻게 ??)

    - Qsys는 연속된 메모리 공간을 꽉꽉 채워서 활용할 필요는 없다. 적당하게 배열하여서 설정하면 된다.





    Qsys는 Assign Interrupt Number 커맨드를 이용하여 IRQ를 할당할 수 있다. 


    NIOS-II HAL에서 낮은 IRQ 값을 높은 우선 순위로 판단한다. 


    적절한 IRQ를 할당은 다음과 같이 한다.


    (1) System menu에서 Assign Base Address를 클릭하고, 

          Base와 End를 설정한다. 

          

    (2) IRQ 컬럼에서,

         NIOS-II를 JTAG UART와 Interval timer와 연결한다.

     

    (3) jtag_uart에서 IRQ값을 설정한다. 여기서는 16으로 설정한다.


    (4) sys_clk_time의 IRQ값은 1로 설정한다.




    설정은 IRQ 컬럼에서 연결을 시키면 작은 박스가 표시되는데 여기에다가 값을 넣으면 된다.


    위와 같이 나온다.


    5.9 Generate the Qsys System


    이제 Generation Tab에서 적당하게 설정하고 Generate를 설정한다.






    이상이 없으면 잘 만들어 내고 에러가 없다.

    이상이 있으면 다시 잘 설정한다.



  6. “Integrate the Qsys System into the Quartus II Project”.


    이제, Qsys에서 만든 Instance를 Quartus II에서 사용하는 과정을 보여준다.


      FPGA 디바이스와 Pin위치를 설정

      Quaruts-II에서 컴파일

     타이밍 확인


    6.1 Instantiate the Qsys System Module in the Quartus II Project

      

    Qsys의 결과물은 system module을 부른다.

    예제에서는  블럭다이어그램으로 처리하기 때문에 이름을  first_nios2_system으로 하여서 .bdf에 통합한다.


    .bfd에 통합하기 위해서 다음 과정을 거친다.


    (1) 블럭도의 화면중 빈 공간에서 더블 클릭해서 심볼 다이얼로그 박스를 오픈한다.

    (2) Libraries -> Project

    (3) first_nios2_system을 선택


    (주) 이름은 그냥 틀려도 Pass 귀찮게 이름까지 맞출 필요는 없다.


    (4) OK를 누르면 다이얼로그가 없어지고 마우스를 이용해서 블럭을 배치할 수 있게 된다.

    (5) 적절한 위치에 배치후 핀들을 연결한다.

    (6) 적당하게 핀들중 없는 핀들은 삭제한다.

          - 마우스를 클릭해서 삭제.. 참 친절한 튜토리얼이다.






    6.2 Add IP Variation File


    Qsys에서 생성된 IP를 Quartus II의 프로젝트에 추가하는 과정이다.

    Qsys에서 .qip 파일을 만들어 내는데 이 파일이 스크립트로 되어 있으며 quartus-II에서 IP로 인식하기 위한 정보를 가지고 있다.


    전체적으로는 프로젝트에 IP를 추가하는 것이어서 Assignment->Setting에서 프로젝트 세팅 정보에 의해서 추가된다. 아래 과정은 그에 대한 추가 과정을 설명한 내용이다.



    1. On the Assignments menu, click Settings . The Settings  dialog box appears.






    2. Under Category , click Files . The Files  page appears.


    3. Next to File name , click the browse (... ) button.

    4. In the Files of type  list, select Script Files (*.tcl, *.sdc, *.qip) .




    5. Browse to locate <design files directory>/first_nios2_system/synthesis/first_nios2_system.qip  and click Open  to select the file.



    6. Click Add  to include first_nios2_system.qip  in the project.

    7. Click OK  to close the Settings  dialog box.



    6.3 Assign FPGA Device and Pin Locations


    앞서의 디바이스 할당은 Qsys에서 할당된 것으로 NIOS-II의 설정에만 영향을 준다.

    여기서는 역시 프로젝트에서 디바이스 할당을 하는 과정을 설명한다.


      1. On the Assignments menu, click Device . The Device  dialog box appears.



     2. In the Family  list, select the FPGA family that matches your board.

     3. Under Target device , select Specific device selected in 'Available devices' list .

    4. Under Available devices , select the exact device that matches your board.

     5. Click OK  to accept the device assignment.




    핀 위치 할당하기


     1. On the Processing menu, point to Start , and click Start Analysis & Elaboration  to prepare for assigning pin locations. 



        The analysis starts by displaying a   “data not available” message and can take several minutes. 

        A confirmation message box appears when analysis and elaboration completes.

     


     2. Click OK .

     3. On the Assignments menu, click Pin Planner . The Quartus II Pin Planner appears.




    아래 그림은 Pin Planner이다.



     4. In the Node Name  column, locate PLD_CLOCKINPUT .

     5. In the PLD_CLOCKINPUT  row, double-click in the Location  cell to access a list of available pin locations.







     6. Select the appropriate FPGA pin that connects to the oscillator on the board.

     7. In the PLD_CLOCKINPUT  row, double-click in the I/O Standard  cell to access a list of available I/O standards.

    8. Select the appropriate I/O standard that connects to the oscillator on the board.

    9. If you connected the LED pins in the board design schematic, repeat steps 4 to 8

    for each of the LED output pins (LEDG[0] , LEDG[1] , LEDG[2] , LEDG[3] ,

    LEDG[4] , LEDG[5] , LEDG[6] , LEDG[7] ) to assign appropriate pin locations.

    10. On the File menu, click Close  to save the assignments.

    11. On the Assignments menu, click Device . The Device  dialog box appears.

    12. Click Device and Pin Options . The Device and Pin Options  dialog box appears.

    13. Click the Unused Pins  page.





     14. In the Reserve all unused pins  list, select As input tri-stated with weak pull-up . With this setting, all unused I/O pins on the FPGA enter a high-impedance state after power-up.


     15. Click OK  to close the Device and Pin Options  dialog box.

     16. Click OK  to close the Device  dialog box.



    6.4 Compile the Quartus II Project and Verify Timing


    이제 컴파일 할 준비가 되었다. 컴파일하여서 sof 파일을 만들어 낸다.

    컴파일한 뒤에 타이밍 정보를 확인한다.


    1. On the File menu, click Open .

    2. In the Files of type  list, select Script Files (*.tcl, *.sdc, *.qip) .

    3. Browse to locate <design files directory>/hw_dev_tutorial.sdc  and click Open . The file opens in the text editor.



    4. Locate the following create_clock  command:

        create_clock -name sopc_clk -period 20 [get_ports PLD_CLOCKINPUT]



     5. Change the period setting from 20 to the clock period (1/frequency) in nanoseconds of the oscillator driving the clock pin.

    6. On the File menu, click Save .

    7. On the Assignments menu, click Settings . The Settings  dialog box appears.

    8. Under Category , click TimeQuest Timing Analyzer .






     9. Next to File name , click the browse (... ) button.

    10. Browse to locate <design files directory>/hw_dev_tutorial.sdc  and click Open  to select the file.

    11. Click Add  to include hw_dev_tutorial.sdc  in the project.



    12. Turn on Enable multicorner timing analysis during compilation .


       

    Multiconer support에 대한 내용이 없고, 다른 카테고리에 그 부분이 있다.

    - 좀더 확인이 필요하다.


    13. Click OK .


    컴파일은 아래와 같은 순서로 진행한다.


     1. On the Processing menu, click Start Compilation . The Tasks window and percentage and time counters in the lower-right corner display progress. The compilation process can take several minutes. When compilation completes, a dialog box displays the message "Full Compilation was successful."



    2. Click OK . The Quartus II software displays the Compilation Report  tab.


      (주) 여기서 Compilation Report Tab의 의미가 좀 헤깔렸다. 

            그냥 Table of Contents가 즉 Navigation panel 자체가 Report Tab을 의미한다.

            이 Contents는 Report에 대한 Contents이다.



    3. Expand the TimeQuest Timing Analyzer  category in the compilation report.

    4. Click Multicorner Timing Analysis Summary .





    5. Verify that the Worst-case Slack  values are positive numbers for Setup , Hold , Recovery , and Removal . If any of these values are negative, the design might not operate properly in hardware. To meet timing, adjust Quartus II assignments to optimize fitting, or reduce the oscillator frequency driving the FPGA.



    이제 겨우 다운로드 할 준비가 되었다.

    - 정말 길다. 에휴




  7. “Download Hardware Design to Target FPGA”.

    SoF파일을 타겟 보드에 다운로드 한다.


     1. Connect the board to the host computer with the download cable, and apply power to the board.

    2. On the Tools menu in the Quartus II software, click Programmer . The Quartus II Programmer appears and automatically displays the appropriate configuration file (nios2_quartus2_project.sof ). 



     3. Click Hardware Setup  in the upper left corner of the Quartus II Programmer to verify your download cable settings. The Hardware Setup  dialog box appears.

    4. Select the appropriate download cable in the Currently selected hardware  list. If the appropriate download cable does not appear in the list, you must first install drivers for the cable.


    5. Click Close .

    6. In the nios2_quartus2_project.sof  row, turn on Program/Configure .

    7. Click Start . The Progress  meter sweeps to 100% as the Quartus II software configures the FPGA.


    이제 구동할 준비가 되어 있지만, 프로그램이 없으니 구동이 안된다. 

    다음 부분에서 프로그램을 준비한다.



  8. “Develop Software Using the Nios II SBT for Eclipse”.


    이제 NIOS-II SBT를 이용하여 간단한 C 코드를 만들고 컴파일해서 구동을 하는 과정을 보여준다.

    다음과 같은 것을 진행한다.


    Create new Nios II C/C++ application and BSP projects.

    Compile the projects.


    프로그램 관련된 일을 진행하기 위해서는 .sofinfo 파일을 가지고 있어야 한다.

    이 파일은 앞서 만들어 두었다.


    8.1 Create a New Nios II Application and BSP from Template

     

     1)      NIOS-II BST를 실행한다.

     2)      Eclipse에서 NIOS-II perspective로 설정한다.

              Window->Open Perspective->Other


    다이얼로그가 나오면 NIOS-II로 설정한다.




    아래 창이 기본적으로 설정된 창이다.





    3) File->New->NIOS II Application and BSP from template 를 선택한다.

       그럼 다이얼로그 박스가 나온다.



    아래 다이얼로그가 나타난다.



     5. Under Target hardware information , next to SOPC Information File name , browse to locate the <design files directory> .

    6. Select first_nios2_system.sopcinfo  and click Open . You return to the Nios II Application and BSP from Template wizard showing current information for the SOPC Information File name  and CPU name  fields.

    7. In the Project name  box, type count_binary .

    8. In the Templates  list, select Count Binary .

    9. Click Finish .



    적당하게 세팅하고 OK를 두르면 된다.


    count_binary—Your C/C++ application project

    count_binary_bsp—A board support package that encapsulates the details of the Nios II system hardware



    8.2 Compile the Project


    현재 빌드된 NIOS-II는 20KB의 메모리 공간만 가지고 있으므로 그에 맞게 시스템을 재 조정해야 한다.


     1. In the Project Explorer view, right-click count_binary_bsp  and click Properties . The Properties for count_binary_bsp  dialog box appears.

    2. Click the Nios II BSP Properties  page. The Nios II BSP Properties  page contains basic software build settings. Figure 1–21  shows the GUI.





    3. Adjust the following settings to reduce the size of the compiled executable:

       a. Turn on Reduced device drivers .

       b. Turn off Support C++ .

       c. Turn off GPROF support .

       d. Turn on Small C library .

       e. Turn off ModelSim only, no hardware support .


    4. Click OK . The BSP regenerates, the Properties  dialog box closes, and you return to the Nios II SBT for Eclipse.

    5. In the Project Explorer view, right-click the count_binary  project and click Build Project .



    8.3 Run the Program on Target Hardware


    이제 드디어 다운로드 한다.


     1. Right-click the count_binary  project, point to Run As , and then click Nios II Hardware . The Nios II SBT for Eclipse downloads the program to the FPGA on the target board and the program starts running.


     When the target hardware starts running the program, the Nios II Console view displays character I/O output. Figure 1–22  shows the output. If you connected

    LEDs to the Nios II system in “Integrate the Qsys System into the Quartus II Project” on page 1–24 , then the LEDs blink in a binary counting pattern.


    2. Click the Terminate  icon (the red square) on the toolbar of the Nios II Console view to terminate the run session. When you click the Terminate  icon, the Nios II SBT for Eclipse disconnects from the target hardware.



    실행 결과를 확인하면 OK



  9. “Run the Program on Target Hardware” on page 1–35









'Embedded' 카테고리의 다른 글

오래간만의 Windows CE  (0) 2013.05.04
Altera NIOS-II (4)  (2) 2013.03.18
Altera NIOS-II (1)  (0) 2013.03.15
uC/GUI 데모 그림입니다.  (0) 2010.07.18
이슈 트래킹 어떻게 하나요 ?  (0) 2010.07.10
Posted by GUNDAM_IM
ASIC SoC2009. 11. 8. 22:08
학생들을 대상으로 강의한 다는 것은 많이 많이 어려운 점이 있습니다.

제가 실력이 없어서 가리키기가 힘든 것도 있습니다.

가리키기 어려운 부분이 많이 있지만, 그중에서도 경험자들에게는 당연시되는 부분인 Protocol이나 Timing Chart를 해석하는 것이 처음 배우는 학생들에게는 가리키는 것도 배우는 것도 어려운 부분인듯 합니다.  
   매년 이런 부분은 학생들 보고 알아서 준비하라는 다소간 무책임한 형태로 넘어갔지만, 올해는 한번 잘 설명해볼려고 자료를 만들어 봤습니다. 쉽게 쉽게 설명할려고 글은 최대한 배제하고 만들었습니다.

  부족한 부분은 실제 버스 프로토콜을 설명하는 부분과,
  진짜 시간에 대한 설명등이 필요하지만,
 
  그것까지 만들기에는 게을러서.. 건너 뛰었습니다.
  나머진 다음번에 추가시키겠지만, 아마 올해가 마지막 강의가 될것이어서...  더이상의 업데이트는 없겠습니다.
    

부족한 자료이지만, 참고하시기 바랍니다.

GUNDAM


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

[MIPS] OSX에서 MIPS C Compiler를 빌드하기  (0) 2009.12.17
PERL TIP  (0) 2009.12.05
SystemC에서 main() 함수 넣기  (0) 2009.11.04
SystemC에서 배포가능 버전 만들기  (0) 2009.11.01
취업 씨즌이 시작되었군요  (0) 2009.10.27
Posted by GUNDAM_IM
ASIC SoC2009. 2. 3. 09:14

사람을 찾습니다.


어디에 


C  언어 이해하고 있으면서

Computer Architecture를 이해하는 사람을 보셨나요 ?


취업 사이트에 올린 구인 광고나 회사 홈피에 있는 구인 광고는 정말 거창한것 같지만 사실 딱 두가지만 바라는 겁니다. C언어와 Computer Architecture 입니다. (신입은 C만 잘해도 됩니다. ^^)


몇년 전부터 사람을 찾느라고 매달 2~3명씩 면접을 보는 것 같습니다.

그런데 아직도 사람을 찾고 있습니다. 


거듭 말씀드리지만, 신입사원이라면 C언어만 이해해도 좋은데 사람 찾기가 쉽지 않네요


회사가 크고 작고의 문제가 아닌듯 합니다.

사상 최대의 취업 난이네 하여도 회사는 사상 최대의 구인난에 시달리고 있으니 아이러니 합니다.


그동안 면접 본 사람이 못해도 000명은 넘은 것 같습니다만, 실제 채용된 사람은 3명 정도입니다.

그렇다고 회사가 정말 고난도의 인력을 요청하는 것도 아니라는 생각을 합니다.

정말 기본적인 것이죠.


채용 기준을 낮추라는 압력(?)이 조언이 주변에서 들어오지만, 이미 이정도의 채용 기준이면 한껏 낮추었다고 생각합니다.

 

요새는 왜 이렇게 사람뽑기가 힘들까요 ?


생각해보면 


1. 반도체 설계라는 직업군이 사실은  3D업종 이라는 비밀이 만천하에 공개 되었고

2. 공대 기피현상의 여파가 구인난까지 밀려들어온것 같습니다.


1번에 대해서는

3D직군이라는 것은 재론의 여지가 없이 사실입니다. 엄청 몸빵하는 직군임에 틀림이 없습니다. FAB-IN할때에는 모두 신경이 곤두서서 밤을 새며 지내기 일쑤이기 떄문에, 엄청 고로운 직군입니다. 이건 사실이기 때문에 변명할 거리가 없네요 하지만 다른 직군을 좀 봐주세요.. 다른 직군도 힘들기는 매 한가지 입니다.


2번에 대해서는 

사실, 지금은 영업, 연구, 마케팅의 구분이 없는 시대가 되기 시작했습니다.

직군의 구분은 있을런지 모르지만, 생각과 행동은 구분이 없습니다. 

엔지니어가 마케팅을 이해하여야 하고, 세일즈를 이해해야 하는 것 처럼

마케팅이 엔지니어링을 이해하지 못하고는 발 붙이기 힘든 시대입니다. 

시작할때야 차이가 존재하지만 점점 차이가 없어지고, 결국 종합적인 능력을 가진 사람이 더 높은 세상을 향해 

나아가게 되어 있습니다.


아무것도 모르는 사람이 마케팅을 한다고 자리에 눌러 앉아서 기울어가는 회사를 보는게 한두군데가 아니어서

더욱 그런 시대라는 것을 절감하게 됩니다.





그렇지만~~!!!! 버뜨...


자신이 만든 칩이 움직이는 것을 보는 것이 


얼마나 신기한 것인지,

얼마나 두군거리는 것인지 

얼마나 황홀한 것인지


느낄 수 있는 사람이라면, 느껴보고 싶은 사람이라면 연락을 주세요.. 



얼마전에 연구 결과물을 보니 국내에 약 150개 정도의 FAB-Less가 있고 인력은 4000명 정도 된다고 합니다.


마치 F.S.S( 파이브 스타 스토리의 약어죠.. 유명한 애니)에 보면 

기사는 숫자가 늘지도 줄지도 않는다는 대사가 나옵니다.  한사람의 기사가 만들어질려면 한사람의 기사가 죽어야 하는것 처럼

한사람의 엔지니어가 은퇴할때가 되어야 한사람의 엔지니어가 탄생하는게 아닌가 하는 생각이 듭니다.


우리나라 반도체 인력 종사자가 4000명일지에 대해서는 약간 의문이긴 합니다만,  (실상은 더 적을것이라 생각합니다.)

4000명의 엔지니어로 이 넓은 세상을 커버하기는 버거울 것 같습니다.


지금 있는 회사에서도 사람을 채용하기 위해서는 기존의 방법으로는 안된다고 생각이 됩니다.

뭔가 다른 방법과 대안을 찾아서 준비를 시작해야 합니다.


개인적으로도

회사에서도

국가에서도


다른 방안이 필요한 때입니다.



===========================

오해의 소지가 좀 있을것 같아서.. 

- 우리회사 대우가  낮지는 않습니다. 

- 다른 것들도 잘 해주는 편입니다.

- 위치가 불리한 것은 인정.. 음.. 얼렁 이사가야지..




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

"그분" 전용의 SilverChip  (0) 2009.03.26
한사람의 기사를 맞이 하기 위해서는... (2)  (0) 2009.02.09
DSP Design [2]  (0) 2009.01.30
소프트 마이크로프로세서의 네 가지 라이선싱 모델  (0) 2009.01.20
DSP Design [1]  (0) 2009.01.15
Posted by GUNDAM_IM
ASIC SoC2009. 1. 20. 09:19

아래 글은 EE에서 발췌한 글입니다. 원문을 그대로 옮깁니다.


마이크로 프로세서IP를 어떤 모델로 라이센싱할 것인가에 대한 의견을 개진한 글입니다. 여러가지 방법이 있지만 FPGA라는 특성을 반영하여 라이센스하는 것을 말하고 있습니다. 이 글에서는  프로세서를 어떻게 파느냐의 글입니다. 어떻게 시장에서 자리매김하는가에 대해서는 언급하지 않고 있습니다. 파는것 보다도 중요한 부분은 자리매김이라고 생각합니다. 자리 매김이 되어야 파는 부분에 대해서도 성립하기 때문에 자리매김에 대한 내용이 정리되어야 합니다.   


소프트 마이크로프로세서의 가지 라이선싱 모델


Gordon Hands

Director of Strategic Marketing 

Lattice Semiconductor Corp.


FPGA 설계자들은 점점 많은 디자인에 소프트 마이크로프로세서를 내장하고 있다. 이에 따라, FPGA 벤더들과 써드파티 IP 벤더들은 가장 최신 모델인 오픈소스를 비롯하여 여러 가지 방식의 라이선스를 갖는 다수의 소프트 마이크로프로세서를 개발해왔다.

설계자들은 보통 자신들의 소프트 마이크로프로세서를 위한 소프트웨어 코드 개발에 상당한 시간을 투자한다. 때문에 이들이 관련 라이선싱 모델들이 무엇을 의미하는 이해하는 것은 중요한 일이다.


어려운 결정


일단 소프트 마이크로프로세서를 구현하기로 결정되었으면 설계자들은 어떤 라이선싱 모델이 자신들의 요구에 가장 맞는지를 결정해야 한다. FPGA 벤더들이 소프트 마이크로프로세서와 MCU 이용하는 기본적인 라이선싱 모델에는 가지가 있다.

써드파티 IP 벤더들은 보통 IP 구매 모델을 이용한다. 여기서 이들이 취한 접근 방식을 논하지는 않겠지만 대부분은 FPGA 벤더들의 접근 방식과 유사하다.


모델 1: IP 구매─FPGA 소프트 마이크로프로세서를 공급하는 전통적인 모델은 IP 구매이다

    이 모델은 가지 해결 과제들을 가져다준다.

마이크로프로세서 개발툴과 생성된 HDL 코드의 사용권에 비용을 지불해야 한다

    툴을 계속 사용한다든가 소프트웨어 유지 관리를 하는 경우 비용은 매년 들어가게 된다.

마이크로프로세서의 HDL 디스크립션은 보통 암호화되어있다

     이는 설계자가 구현물을 제한적으로만 최적화시킬 있도록 하며, 버그를 수정하기 위해서는 FPGA 벤더에 의존해야 한다.

마이크로프로세서를 지원하는 개발 자원들은 FPGA 벤더가 선택한 것으로 제한된다.

     설계자가 아니라 벤더가 자원들의 우선순위를 정하게 된다.

IP 구매 시의 라이선싱 조항으로 벤더의 FPGA 디바이스에 대한 구현이 제한된다

     마이크로프로세서에 대해 개발된 코드가 축적될수록 설계자가 다른 FPGA 벤더로 옮겨가기는 어려워진다.

설계자가 벤더를 전환하지 못함으로 인하여 벤더에게 경쟁 상의 이유로 압박을 가하지 못하게 된다

     이는 최종 제품이 고객들의 관심을 끌게 만든다. 또한, 미래에 FPGA 벤더로부터 가격 상의 양보를 제한적으로만 받게 한다.


모델 2: 무료 레퍼런스 디자인무료 레퍼런스 디자인 접근 방식은 IP 구매 모델과 관련된 가지 문제를 없애준다

     업프론트 비용이 없다는 것은 분명 매력적이다

     그리고 이러한 디자인들이 변함없이 소스 코드 포맷으로 제공됨으로 인해 디자인의 스트럭처에 접근할 있다.

    하지만, FPGA 벤더가 디자인의 소유권을 갖기 때문에 디자인에 대한 추가적인 코드 개발의 인센티브가 없어진다

    마지막으로, IP 구매 방식에서와 같이 레퍼런스 디자인의 구현은 벤더의 디바이스 아키텍처로 제한된다.


모델 3: IP 암호화─IP 암호화는 IP 구매 방식의 가지 문제를 해결하려는 새로운 시도이다

     모델에서 FPGA 설계툴들과 생성된 암호화 비트스트림을 이용한 디자인에 IP 통합된다.

    비트스트림을 이용하려면 미리 프로그램된 특수 FPGA 복호화 키와 함께 표준 FPGA보다 비싼 값에 구매해야 한다

    접근 방식은 업프론트 비용을 없애주며, 표준 마이크로프로세서 아키텍처가 FPGA 내에 사용될 있게 해준다.


표준 아키텍처의 이러한 사용은 코드가 독립 칩과 ASIC 같은 다른 FPGA 솔루션에 구현될 있게 해준다. 하지만, 설계자들은 다시 벤더의 디바이스에 묶이게 된다. 코드를 눈으로 없다는 문제와 벤더가 개발 우선순위를 정하게 된다는 문제는 이러한 접근 방식으로는 없다.


모델 4: 오픈소스오픈 소스 접근 방식은 다른 라이선싱 모델들과 관련된 고통스러운 문제들을 해결해 것을 약속한다. 이것은 코드를 눈으로 있게 해주어 설계자가 디자인의 기능을 이해할 있게 해주고, 자신들의 사용에 최적화시킬 있도록 한다.

이것은 설계자들이 코드를 수정할 있도록 융통성을 제공해 주며, 사용자들이 코드를 개선하여 넓은 개발 커뮤니티가 사용할 있도록 장려하는 IP 권리를 제공한다.

오픈 소스는 무료이며, 아마도 중요한 것은 이것이 어떠한 FPGA 아키텍처에도, 심지어는 ASIC 같은 FPGA 구현물에도 구현될 있게 해주는 이식성을 제공한다는 것일 것이다.


오픈소스 소프트웨어를 위한 GPL

오픈소스 운동은 소프트웨어 영역에서 시작되었다. 소프트웨어 영역에서는 많은 오픈소스 라이선싱 접근 방식들이 취해지고 있는데, 유명한 하나가 GNU General Public License (GPL)이다.


기부자가 자신의 작업을 인정받을 권리와 작업이 퍼블릭 도메인에 남아있도록 하는 , 그리고 미래 사용자의 필요요건 간에 GPL 취하고 있는 균형이 소프트웨어 개발 커뮤니티에서 이것이 인기있는 이유의 하나이다. 하지만 GPL 궁극적으로 하드웨어에 구현될 IP에는 불완전한 라이선스이다.


구매자가 알아야 것들

FPGA 내에 임베딩되는 소프트 마이크로프로세서가 널리 유행함에 따라 설계자들은 라이선싱 조항에 세심한 주의를 기울일 필요가 있다. 기사에서는 가지 라이선싱 접근 방식을 살펴보았다. 오픈소스 접근 방식을 제외한 나머지는 향후 설계자들의 FPGA 디바이스 선택을 제한시켰다. 또한 접근 방식의 일부는 설계자가 코드에 접근하는 것을 제한함으로써 버그 수정을 IP 공급업체의 손에 맡길 밖에 없게 하고 있다.


소프트 마이크로프로세서의 오픈소스 라이선싱은 설계자에게 FPGA 아키텍처를 바꿀 융통성을 제공하고 그들이 필요로 하는 프로세서 아키텍처를 눈으로 있게 해준다.


하지만, 오픈소스라 하더라도 라이선싱 세부 사항에 대해 세심한 주의가 필요하다. 이는 소프트웨어 영역에서 인기있는 많은 오픈소스 라이선스들이 하드웨어를 대상으로 하는 IP 적용될 때는 심각한 문제들을 드리우는 경우도 있기 때문이다. 라이선스 없이 하드웨어를 배포해야 필요나 단일 하드웨어 구현물에 공개 코드와 고유 코드를 혼용해야 필요가 그러한 문제들에 포함된다.


Posted by GUNDAM_IM
ASIC SoC2009. 1. 15. 11:49

DSP가 필요해졌습니다. 에구~~


갑자기 DSP가 필요해졌습니다. 

엄밀하게 말하면 뜬금없이 갑자기 필요한것은 아니었지만, 

그동안 굳이 개발할 필요가 있겠냐 라는 마인드로 외면하면서 버티고 있었습니다.


SoC같은 부류의 일을 하다 보면 프로세서가 2가지 종류가  필요하게 됩니다.

하나는 내부 컨트롤을 위한 MCU이고, 나머지 하나는 고속으로 동작하며 필요한 정보 처리를 씩씩하게 해낼 수 있는 프로세서 입니다. 전자를 컨트롤러개념에 가까운 프로세서 이며,  후자를 데이터 처리를 위한 프로세서 개념으로 분류를 합니다.



필요해 진것은 표준에 부합된 프로세서가 아니라 필요한 기능을 재조립 가능한 데이터 처리용 프로세서입니다.

그것도 빵빵한 속도로 돌아가는 프로세서 입니다. H/W Accelerator만으로 해결 할 수있는 부분이 

제한적이 될 것 이고, 내부에 고속으로 동작하는 프로세서가 있어서 이놈이 역활을 크게 해야 할 것으로 

생각합니다.


컨트롤로와 데이터 처리 프로세서 중에서 DSP를 먼저 설계하는 이유는 DSP에서 컨트롤러로 가는 것은 쉽지만, 컨트롤러에서 DSP로 가는 것은 결코 쉽지 않습니다  그래서 DSP를 먼저 설계하고, 튜닝해서 컨트롤러로 다운 사이징을 하는 것이 맞다고 생각합니다.




사용 가능한 것들을 총 망라해보면 비싼(?) 상용 프로세서를 사용하자니.. 곤란하구요.. 

벤쳐에서 언강생심 ARM이나 MIPS를 쓴다는 것은 큰일입니다. 그것도 데이터 처리를 위한 프로세서에

넣자고 하면 만만치 않은 투자 비용이 들어갑니다.



OpenCore에서 개발된 프로세서를 사용하는 것도 가능합니다. 그런데  이 프로세서의  재미있는 부분이 초기에는  OpenCore Processor 저자가 라이센스가 무료입니다 하고 외쳤지만, 어느날 부터인가는 조용해지더니 지금은 떡 하니 회사를 차려 놓고 있습니다.


실제로 국내에서 모 회사가 이 회사랑 계약하였습니다. 

그래서 돈주고 라이센스 하여야 하는것이 아닌가 하는 상태까지 의심이 갑니다. 실제로 국내에서 계약한 회사는 초기 라이센스 비용이 있다고 하였습니다. - 괜히 걸려서 오해사느니.. 이 OpenCore는 포기.. 


그외에는 SunSparc의 Clone프로세서인 Leon이 좋은데요. 실적도 있고 오픈도 되어 있습니다.

코드를 보신 분은 아시겠지만 VHDL이 아니라 거의 C++수준이라고 생각될 정도로 코딩이 되어 있습니다.

나중에 기능을 추가할려면,  골치아픈 구조라고 생각됩니다.


사용자 삽입 이미지
                                 위의 그림은 LEON3 프로세서입니다. 0.25 공정을 사용했다고 합니다. 

                               






공개된 프로세서를 사용하지 않고 개발한다면 몇가지 선결 과제를 고려해야 합니다.


 

 (1) 컴파일러는 어떻게 할 것인가 ?

       GCC에 포팅한다면, 프로세서의 최적화는 그렇다고 하더라도 인라인 어셈블러에 대해서는 웬만큼 

       익숙해지지 않고서는 사용하기 힘든 사태가 됩니다.  


 (2) 개발 환경은 어떻게 할 것인가 ?

       내부 용이긴 하지만, 그래도 어느정도 개발 환경을 지원해야 합니다.

       디자인 초기에 이 부분이 잘 정의 가 안되어 있으면 진행하는 과정에서 추가하는 것은 아주 어렵습니다.

      

 (3) 내부에 연산 크기는 어떻게 할 것인가 ?

       오디오 용인지 , 비디오 용인지 ,  신호 처리 용인지 등에 따라서 연산자가 많이 바뀌어야 합니다.

       복잡한 연산을 하드웨어가 한다면 편하지만, 프로세서가 한다면, 어떻게 연산자를 정하고 컴파일러/어셈블러에서 지원하는지 정의를 해야 합니다.



옵션에 따라서 파이프라인을 조절하면 컨트롤러 용으로 사용할 수 있도록 구성해 둘 생각입니다.


아키텍쳐로는 어떤게 좋을까 생각을 해보면,


(1) 상용 프로세서의 클론 프로세서로.. 하여본다.

(2) 새로운 아키텍쳐의 프로세서를 과감하게 설계해 본다.

   (3) 적당한 돈을 주면 아키텍쳐 라이센스를 주는 프로세서를 설계해본다.


중 하나를 선택해서 진행하여야 하겠죠


꿈을 가진 엔지니어라면 과감하게 (2) 번 모드로 진입을 하겠지만, 엄청난 닭질이 기다리기 때문에,

(1)번이나 (3)으로 가야겠죠. .그래서 (2)번은 아웃.. 예전에 한번 해봐서 굳이 이 모드로 갈 필요가 없습니다.


(1)번 모드일 경우 항상 두근거리는 스릴을 느끼면서 지내야 합니다. 몰래 MIPS나 ARM Clone을

만들어서 사용할 경우 당장은 무난하더라도 언젠가는 걸려서 큰일 한번 치루게 됩니다.


그래서 (3)번 모드로 갑니다.


나머진 다음에 또.. 2부에서.. 


Posted by GUNDAM_IM