ASIC SoC2015. 12. 7. 13:46

길고긴 산고 끝에 나온 ARRIA 10 FPGA/SoC 보드입니다.

전신 사진은 나중에 촬영하고 일단 FPGA SoC 부분만 올립니다.




정말 우여곡절 끝에 만든 것이라 잘 되길 바랍니다.

그런데 Package에 한국이라고 되어 있는 것을 보니 모 회사에서 만든 것 같습니다.


Posted by GUNDAM_IM
ASIC SoC2014. 9. 20. 19:16

ALTERA에서 FPGA for Dummies를 무료로 오픈했습니다.

등록만 하면 다운 받아서 볼 수 있습니다.


50페이지 정도 되니까 심심할 때 금방 읽어 볼 수 있습니다.





Posted by GUNDAM_IM
ZYNQ2013. 10. 30. 09:21



이번에 개발한 Xilinx사의 ZYNQ를 이용한 양산용 보드입니다.

목적은 Vision Processing을 위한 것이지만,

보다 자세한 사양은 올리기가 어렵습니다.

- 저도 올리고 싶지만서도


우리회사로서는 (그리고, 아마도 국내에서는) ZYNQ로서는 처음 양산하는 것이라 기대중 입니다.


'ZYNQ' 카테고리의 다른 글

ZYNQ  (0) 2013.03.20
Posted by GUNDAM_IM
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
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
ASIC SoC2011. 3. 8. 00:02

ZYNQ-7000



드디어 자이링스에서 ZYNQ-7000 디바이스 라인이 발표되었습니다.
다 아시는것 처럼 작년부터 계속  자이링스  내부적으로 나오네 마네로 알려진 디바이스입니다.
ARM-A9이 들어간 제품군이 준비되고 있다는 소문이었는데 드디어 이번에 나왔습니다.


800MHz급의 A9프로세서에  NEON FPU Architecture를 포함하고 있습니다. 그외에 다양한 IP를 포함하고 있으니
남은것은 유저의 Design을 쉽게 포함 시킬 수 있는 디자인 플랫폼을 제공하는 것입니다.

가장 중요한 것이 개발 플랫폼입니다. 
특히 Xilinx는 예전에 극악의 EDK를 발표한 전과(?)가 있어서 이번에는 기대가 됩니다.
최초의 EDK를 테스트 의뢰를 받아서 한적이 있는데 사용중에 잘못 연결했을때에 UNDO조차 안되는 플랫폼에  기절했었습니다.
그떄 이후 거의 사용할 생각을 안했었습니다.
이번에는 좋은 개발 플랫폼으로 잘 만들었기를 바랍니다.

FPGA에서 SoC로 가는 서비스

그리고 재미있는 포인트는 저렇게 만든 Platform을 SoC로 바꾸어 줄 수 있는 서비스를 제공하는가 입니다.
양산을 어떤 방법으로 지원할 것인가에 대한 것인데요,
 FPGA만으로 양산할 것인가 아니면 알테라의 하드 카피 같은 서비스를 지원하여
양산 가격을 가격을 낮출 수 있도록 해줄것인가 등등.. 이래저래 관전 포인트가 많습니다.

전례로 보면, Xilinx는 정책적으로 FPGA에만 올인하고 하드카피 서비스를 제공하지 않는 정책을 펴왔기 때문에 
당장 그렇게 쉽게 SoC로 가는 Service를 제공할 것 같지는 않습니다. EasyPath라는 서비스도 있지만 이는 Hardcopy와는 조금 틀리게 Test vector를 컨트롤해서 양산 단가를 조금 낮추는 기술입니다.

FPGA Traning Kit 솔루션 회사들...
   
저 디바이스가 나오면  사용할 사람들 중에서 관심을 가질만한 회사가 FPGA Traning Kit관련 솔루션을 제공하는 회사입니다.

   FPGA Traning Kit Solution 회사들은 좀더 재미있을것 같습니다. 그동안 여러가지 트레이닝 키트에 ARM을 연결하는 과정에서 매우 복잡하였습니다.  ARM에서 제공하는 CoreTile B/D를 연결하는 것이 일반적인 솔루션이었는데  그렇게 하여도 AHB와 AXI등의 연결에서 조금 실제와 틀린 부분이 있어서 고민을 하였습니다. 하지만 이제는 아예 대놓고 ARM이 FPGA에 들어간 상태이니 나머진는 어떤 방법으로 교육용 과정을 준비하는가만 고민하면 쉽게 됩니다.

  그만큼 만들기가 쉬워졌습니다.

  그러니 반대로 이야기한다면, 업체간에 변별력을 유지하기가 쉽지 않을 것으로 보입니다.
  타사와의 차이점을 제공하는 것은 결국 교육용 플랫폼으로서의 교보재 준비일것 같습니다.
  그외에는 S/W지원 수준이 문제가 되겠네요

  
가격은 ?
   이런 디바이스에게 가격을 묻는것은 실례곘죠 ?
   감히 어따 대고 가격을 묻는거야 ? 어따 대고 질문질이야 라는 말을 지금 하는것 같습니다
    그래도 그만큼 저렴하게 나와서 많이 사용해볼 수 있으면 합니다.

   ATMEL에서도 ARM9+FPGA 솔루션으로 만들어서 판적이 있는데 
   요새도 그 명목이 유지되는지는 모르겟습니다. 나올 때는 기대가 컸고 많이 사용하기를 바랬지만,  
    너무 저렴한게 유지(?) 하기 위해서 FPGA 용량을 많이 줄이는 바람에 가격도 성능도 어정쩡한 제품이 되어 버렸습니다.
    
   가격 정책을 발표한 자료를 보면 수량이 많다면 15불 밑으로도 가능합니다 라고 발표하고 있습니다.
   http://www.computertimes.co.kr/news/articleView.html?idxno=30556
   이정도 가격이면 엔트리 디바이스일테니 가장 낮은 성능 (용량)의 가격이겠고 실질적인 가격대는 좀더 두고봐야 하곘습니다. 
    당연한 이야기이지만,  가격 조건에서 수량이 많다면에 방점이 크게 찍힐것 같습니다.

기존의 프로세서랑 관계는
   가격이 15불이면 좋을것 같은데 또 그렇지도 않습니다.
   요새 하도 좋은 프로세서들이 저렴하게 시중에 돌아다니기 때문에 15불이면 일부에서는 비싸다는 소리를 들을 수 있겠습니다.

   그럼 그에 걸맞는 우수한 또는 고유한 성능의 엔진을 FPGA부에 넣어서 그만큼의 가치를 창출해야 하는데 
   FPGA 부에서 그정도의 부가가치를 창출할 만큼 큰 또는 우수한 성능을 넣을 수 있는가가 관건이 될 것 같습니다.
  
    요새 프로세서 성능이 하도 좋다보니까 
   단순한 Performance는 웬만큼 빠른 ARM으로도 즉 S/W로도 대치가능할 수 있습니다.
    어정쩡한 FPGA기능은 잘못하면 S/W에 먹힐 수 있는 위치에 존재합니다. 
    그만큼 요새 프로세서 기술이 발달되어 있습니다.
    SoC쟁이들도 먹고 살기 힘든 세상이 되었습니다. TT_TT + OTL
   
사실 일반 벤쳐에서 A9을 써서 28n급으로 디자인할 기회는 거의 없습니다.
그런 분이 계시다면 복받으신분입니다. 전생에 많은 음덕을 쌓으신분이나 가능합니다.
FAB비용과 다른 비용을 합치면 웬만한 회사 하나를 가뿐히 날리는 효과를 쉽게 얻을 수 있기 때문입니다. 
하지만, 간접적으로 나마 그런 기회를 가질 수 있다면
엔지니어로서는 좋은 기회가 되겠습니다.




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

Optimized Mapping  (0) 2011.05.20
2의 보수 곱셈과 Coner case  (0) 2011.04.04
나에게 프로세서란..  (0) 2011.03.01
Mac book Pro의 thunderbolt  (0) 2011.03.01
자이링스 세미나에서 회사 제품 전시..  (0) 2011.02.26
Posted by GUNDAM_IM
ASIC SoC2011. 1. 22. 16:01
현재 개발중인 SoC용 ProtoType Board FPGA  보드입니다.

Virtex-6중 구할 수 있는것 중 가장 크고 빠른것을 사용했습니다.
그레이드가 낮으면 나중에 P&R이 잘 안되어서 불필요하게 시간을 까먹기 때문에 미리 미리 빠른것으로 주문하였습니다.  그레이드가 높아질 수록 많이 비싸지지만, 인건비 생각하면 이 방식이 더 저렴하고(?) 효율적입니다.

당장의 손익계산서 때문에 선택을 잘못하면 나중에 반드시 누군가가 고생하게 되어 있더군요

작은 불꽃(?) 쇼가 있었지만,  한방에 동작중이니. 다행입니다.

보드가 A4 두장보다 더 커서 iPhone으로 찍으면 잘 안나오네요
나중에 다시 잘 찍어서 정리하고,이번에는 패스...

보드의 Layer나  사이즈에 제한을 받지않고 만들 수 있어서 다행입니다.

그동안 보드 노우하우가 쌓여서 이젠 이정도 보드는 2년차 직원이 해도 금방 하네요.
그만큼 울회사 교육이 빡셀런지도 모르겠습니다만, 하여튼 수고하셨습니다.
( 이 멘트는 검심의 스승 히코 세이쥬로를 연상케하는 멘트입니다. 다 나의 강하고 완벽한 트레이닝이 너를 성장시켰다는 ㅋㅋ)

사용자 삽입 이미지

Posted by GUNDAM_IM
ASIC SoC2010. 4. 18. 15:00
Xilinx Vertex 6 760을 4개 사용하는 보드

도전해 볼만한 과제인데,

그동안 만든 보드 중에서는 사상 최강의 보드가 될듯..
 FPGA도 못구하지만 , 일단 보드 설계 부터 준비해야 하는 상황..

제작 기간 x 년
연인원    xx 명
스펙터클 + 쓰릴러 * 심리 추리물 = 환상의 3D 아바타 보드..
(주 : 요기서 3D는 3차원 그래픽이 아닌 3D업종의 3D 임)

암튼 동작한다면, 그동안 만든 보드중 최강의 보드가 될 듯 합니다.

후후훗...

보드도 보드지만, 그안에 넣을 회로 설계는..  설계하다가 미쳐갈듯..



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

맥에서 Verilog Simulation 하기  (0) 2010.11.13
EMACS에 Verilog Mode 설치하고 활용하기  (2) 2010.10.30
[MIPS] MIPS assembler simulator XSPIM  (8) 2010.03.21
HD Quad Display/Processing Engine  (1) 2010.03.12
Sound Effect Processor  (0) 2010.02.01
Posted by GUNDAM_IM
Embedded2009. 6. 25. 16:24
개발용으로 만든 TI DSP DM6467 + FPGA Board 입니다.

사용자 삽입 이미지
 Xilinx FPGA에다가 Video I/F 및 Audio Interface 그리고 PCI에 카메라 등등 FPGA+DSP 개발 솔루션으로 개발된 플랫폼 보드입니다.

컬러는 황금색이 좋았는데,
바빠서 (그리고 게을러서) 색지정 절차를 깜박했더니, 멤버들이 그냥 녹색으로 후딱 떠버렸습니다. 쩝..

그분 전용 붉은 컬러에서 그분이 두번째 기체인 황금의 기체로 바꾸어 타셔서,
우리도 붉은색 보드에서 황금색 보드로 만들고 싶었습니다.

다음에 보드는 꼭 황금색으로 떠야지..

'Embedded' 카테고리의 다른 글

Eclipse + eCOS =??  (0) 2009.11.23
H.264 SVC 참고 사이트 입니다.  (0) 2009.07.04
FFMPEG /X264를 MAC에서 빌드  (0) 2009.06.14
H.264 SVC 다운로드 커맨드  (0) 2009.06.12
LVDS Owner’s Manual [3]  (0) 2009.05.16
Posted by GUNDAM_IM
Embedded2009. 5. 16. 12:20

[3] LVDS Owner’s Manual


SerDes Architecture


SerDes : 약자는 Serializer , Deserializer 입니다.

      당근 병렬을 직렬로, 직렬을 병렬로 전송하거나 수신하는 방식을 말합니다.


SerDes 디바이스는 어플리케이션 용도에 따라서 몇개의 아키텍쳐로 나눌 수 있습니다.



3.2 Parallel Clock SerDes


사용자 삽입 이미지


이 방식은 Data-Address Control 등이 병렬로 된 것을 직렬화 시키는데 사용된다. 예를 들면 PCI 버스나,

UTOPIA 같은 병렬 버스 규격을 직렬화 할때 사용한다.

전체 버스를 하나의 멀티 플렉서에서 직렬화시키지 않고 Parallel Clock SerDes 아키텍쳐는 n-to-1 멀티플렉서 구조로 만들어진다.

각각의 멀티플렉서는 적당수의 채널을 받아서 직렬화 시켜서 보내는 것이다.


위의 그림은 7:1 멀티플렉싱을 사용하여 Parallel Clock SerDes로 구성하는 것을 보여주는 그림입니다.

여기서 수신단은 클럭을 이용하여 데이터를 복원해야 하므로 패러럴 포트와 직렬화 구간 및 수신 구간에서 클럭 스큐등에

조심해야 합니다.



3.3 Embedded Clock (Start-Stop) Bit SerDes



사용자 삽입 이미지

클럭을 사용하지 않고 전송 데이터 시그널 선에서 특정 조건을 만족시키는 시그널을 클럭의 시작 기준점으로 보고

동조를 맞추어서 데이터를 얻는 방식입니다.


위의 그림처럼 원래 하나가 1이면 하나가 0이 되는 데이터 전송 방식에서 클럭의 시작/끝 부분에서 두개 모두 동시에 0으로 간후

1로 가면 그 시점을 클럭의 시작 시점으로 잡고 운용하는 방식입니다.


이 방식은 별도의 클럭을 위한 라인이 필요 없다는 점이 장점입니다.

또한가지 장점은 받으시 2:1 혹은 8:1 처럼 정해진 Multiplxer등이 필요 없다는 점입니다.

클럭 구간 안에서 데이터를 전송하기 떄문에 또다른 이름으로는 Start Stop bit SerDes 로 불리운다.


사용자 삽입 이미지


파워가들어오면 Deserializer는 자동적으로, 클럭을 찾아서 동기를 맞추어야 한다. 일단 동기가 맞게 클럭이 세팅되면,

입력 스트림에서 데이터를 꺼낼 수 있다. 이렇게 데이터를 락킹시키는 과정을 lock to random data 라고 부른다.


이러한 방식은 수신기가 시스템의 콘트롤 범위 내에 들어오지 않는 상황일 경우 유용하다.

리시버는 데이터 라인에서 클럭 라인을 동기를 맞추고 세팅을 맞추는 방식이므로 클럭라인과 데이터라인 사이의 지터 등을

고민할 필요가 없고, 트랜스미터에서 이러한 부분을 고려하여 전송할 필요가 없기 때문입니다.





3.3 8b/10b SerDes


사용자 삽입 이미지


이 방식은 8b의 데이터를 10b의 데이터로 전송하고 그 역으로 받아서 병렬로 8비트의 데이터를 만드는 방식입니다

10b의 코드는 IBM에서 1980년대 초기에 개발한 것이었다. 이것은 거의 매 사이클마다 Transition이 발생되도록 구성된 방식입니다.


이렇게 함으로서 가능한것은 수신단에서 데이터 스트림에서 클럭에 대한 동기를 찾아낼 수 있다는 점입니다.


수신기가 정확한 동기를 맞추기 위해서 트랜스미터는 경계를 표시하는 마커를 보냅니다.  이것을 Comma Character라고 부릅니다.

이것은 일반 데이터에서 절대 나타나지않는 비트 패턴을 가지고 있으습니다.


이 방식은 외부 레퍼런스 클럭을 가지고 있기 떄문에 지터라던가 노이즈에 좀더 신경을 써야 하는 구조입니다.


3.5 FPGA Attach SerDes


사용자 삽입 이미지


이 구조는 2가지 단계로 구성됩니다.

FPGA에서 시그널을 느린 몇개의 LVDS로 붙입니다. 그리고 두번째 단계에서 하나의 고속의  LVDS로 만듭니다.

이런 방식이 내셔널에서 제공하는 LVDS 예제 보드인 스파르탄 3에 들어있습니다.



3.6 Application


Parallel Clock SerDes


이것은 전통적인 버스를 시리얼로 바꾸어 보내는 어플리케이션을 의미합니다.

따라서 “Virtual Ribbon Cable”이라고 부르기도 합니다.


사용자 삽입 이미지


저전력, 긴 전달거리, 저가격 , 낮은 노이즈 , EMI 등등의 장점을 제공합니다.

가격대 성능비로 괜찮기 떄문에 많은 데서 사용하고 있습니다.


칩셋에 따라서 21비트 , 28비트, 48 비트 등을 사용합니다.


사용자 삽입 이미지


위의 그림은 RACK에서 RACK으로 연결하는 것에 대한 그림입니다.


Embedded Clock ( Start-Stop ) Bit SerDes


이 방식은 RAW 데이터와 컨트롤, 패리티, 프레임 , 싱크 , Status등을 동시에 보낼때 어울리는 방식입니다.


사용자 삽입 이미지


위의 그림은 그에 대한 예제로서 데이터 외에 제어에 필요한 정보 예를들어서 패리티라던가 프레임 정보등을 함께 보내는 방식입니다.

이러한 방식에 8b/10b SerDes를 쓰는 것은 좀더 복잡한 상황이 됩니다. 즉 컨트롤 정보가 8비트 (1 바이이트) 단위로 정렬되지 않을 경우

기다렸다가 채워 보내는 방식으로 구현되는데 이러한 부분이 시간이나 컨트롤을 복잡하게 하는 부분이 될 수 있기 때문이다.


{

그냥 남는 비트 영역은 0을 채워서 보내면 될텐데 굳이 이런 이유를 대는 이유는 명확치가 않네요

}



사용자 삽입 이미지


Embedded clock bits SerDes는 수신기가 자동으로 random data를 Lock 시키는 기능을 가지고 있다는 점이다.

따라서, 수신기의 제어권이 송신기에 있지 않는 경우에 아주 적합한 방식이 된다. 또한 하나의 송신기에서 복수의 수신기로 들어가는 구조에서도 유용하다. 이러한 방식을 Broadcast라고 부르고 이런 경우에 Hot Insertion이라고 하여서 통신중에 새로운 통신 모듈이 버스에 삽입되어서 동작하는 기능을 구현할 수 있다. 즉 송신 블럭은 계속 데이터를 전송하고, 수신 블럭에서 클럭 동기를 맞추어서 데이터를 수신하는데 이때 새로운 수신 블럭이 삽입된다면 보통 송신 블럭이 데이터 송신을 중지하고 새로운 수신 블럭이 완전히 자리 잡은 뒤에 송신을 재개하는데 이럴 필요가 없이 끊김이 없이 계속 송신 블럭이 송신하여도 새로운 수신 블럭은 클럭의 동기를 맞추고 데이터를 가지고 갈 수 있는 기능이되는 것이다.


사용자 삽입 이미지



Embedded clock bits SerDes는 바이트 단위로 끊어지지 않는 어플리케이션에도 잘 어울린다. 이런 방식으로는 raw data  + control data를 전송하는 경우가 그에 해당한다.


8b/10b SerDes


이 방식은 바이트 단위의 데이터 전송을 하는 것에 잘 들어맞는 방식이다.

이 방식에서 최대 코드 길이는 5비트가 된다.  따라서, 1GHz의 통신방식에서 첫번째 harmonic frequency 는 1G와 1G/5 = 200MHz 이다.

또한 이 방식은 전송하는 0과 1의 총 합이 같게 설계되어 있어서 평균 DC값에 맞추도록 설계되어 있다.


사용자 삽입 이미지


이렇게 DC에 맞추어지는 코딩을 DC-balance coding이라고 하고, 이러한 방식은 광통신이나 AC-coupled 환경에서 신뢰성을 높일 수 있는 방식이다.

이것이 8b/10b SerDes의 최대 이점이다. 게다가 이런 방식은 Inter Symbol Interference를 줄이고, cable drive capability를 높일 수 있는 방식이다.


FPGA Attach Serdes


FPGA와 연결하여서 고속 데이터 전송을 할 경우에 적합한 방식이다.


사용자 삽입 이미지


Deserializer는 드러오는 데이터에서 외부 참조 클럭이나 콤마 캐릭터가 없이도 자동적으로 락을 시킬 수 있다. 이런 기능으로 인해서

SerDes가 비 바이트 단위 시스템에서 잘 어울린다고 볼 수 있다.



각 방식의 비교 테이블은 아래와 같다.




사용자 삽입 이미지


'Embedded' 카테고리의 다른 글

FFMPEG /X264를 MAC에서 빌드  (0) 2009.06.14
H.264 SVC 다운로드 커맨드  (0) 2009.06.12
LVDS Owner’s Manual [2]  (0) 2009.05.15
LVDS Owner’s Manual [1]  (0) 2009.05.14
인텔 컴파일러 최적화 기능 테스트  (0) 2009.03.23
Posted by GUNDAM_IM