
              TOPPERS/JSPͥ 桼ޥ˥奢 
                     Nios2 åȰ¸

             Release 1.4.2 бǽ: 10-Feb-2006
                 NiosII Development Kit 5.1 б

------------------------------------------------------------------------ 
 TOPPERS/JSP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     Just Standard Profile Kernel

 Copyright (C) 2004 by Embedded and Real-Time Systems Laboratory
               Graduate School of Information Science, Nagoya Univ., JAPAN    

 嵭Ԥϡʲ (1)(4) ξ狼Free Software Foundation 
 ˤäƸɽƤ GNU General Public License  Version 2 ˵
 ҤƤ˸¤ꡤܥեȥܥեȥ
 ѤΤޤࡥʲƱˤѡʣѡۡʰʲ
 ѤȸƤ֡ˤ뤳Ȥ̵ǵ롥
 (1) ܥեȥ򥽡ɤηѤˤϡ嵭
     ɽѾ浪Ӳ̵ݾڵ꤬Τޤޤηǥ
     ˴ޤޤƤ뤳ȡ
 (2) ܥեȥ򡤥饤֥ʤɡ¾Υեȥȯ˻
     ѤǤǺۤˤϡۤȼɥȡ
     ԥޥ˥奢ʤɡˤˡ嵭ɽѾ浪Ӳ
     ̵ݾڵǺܤ뤳ȡ
 (3) ܥեȥ򡤵Ȥ߹ʤɡ¾Υեȥȯ˻
     ѤǤʤǺۤˤϡΤ줫ξ
     ȡ
   (a) ۤȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭
       ɽѾ浪Ӳ̵ݾڵǺܤ뤳ȡ
   (b) ۤη֤̤ˡˤäơTOPPERSץȤ
       𤹤뤳ȡ
 (4) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
     ⡤嵭ԤTOPPERSץȤդ뤳ȡ

 ܥեȥϡ̵ݾڤ󶡤ƤΤǤ롥嵭Ԥ
 TOPPERSץȤϡܥեȥ˴ؤơŬѲǽ
 ޤơʤݾڤԤʤޤܥեȥѤˤľ
 ŪޤϴŪʤ»˴ؤƤ⡤Ǥʤ

 @(#) $Id: nios2.txt,v 1.6 2006/02/10 08:36:10 honda Exp $
------------------------------------------------------------------------


1. Nios2 åȰ¸γ

1.1 åȥƥ

Nios2 ץåΥåȥƥȤƤϡNios2 ݡȤƤ 
FPGA ܤƥ򥵥ݡȤƤ롣åȥƥȤƤϡ
ʲΥܡɤ򥵥ݡȤƤ롣ΥܡɤѤ뤹ݤˤϡ
ɤ°ǥ Standard ⤷ Full Featured  FPGA 
ɬפ롥

 NiosII Development Board Cyclone Edition
 NiosII Development Board Stratix Edition
 NiosII Development Board Stratix Professional Edition 
 NiosII Development Board StratixII Edition

1.2 ȯĶȼ¹ԴĶ

ȯĶˤϡNiosII Development Kit˴ޤޤƤ GCC ʤɤ GNUȯ
ĶѤ֥ȥեեޥåȤ ELF ɸȤ롥

ͥΥѥڤӥɤEclipseѤޥɥ饤
(Cygwin⤷NiosII SDK Shell)Ԥ

1.3 ݡȤ뵡ǽγ

Nios2 ¸εǽȤơǽɾѥƥﻲȵǽvxget_timˤ
ݡȤƤ롥ߤζػߡ(dis_int, ena_int)򥵥ݡȤ롥
ޤߥޥѹ(chg_ixxget_ixx)ϥݡȤƤʤ

1.4 ¾ΥåȤؤΥݡƥ

JSPͥưˤϡ64Kbyte٤ΥȡɸTIMER
JTAG-UARTʤ⤷UARTˤ줾1ɬפǤ롣ºݤΥѹս
ˤĤƤϸҤ롣


2Nios2 ץå¸εǽ

Ǥϡͥ뤪ӥƥॵӥεǽǡNios2 ¸
ʬˤĤƲ⤹롥

2.1 ǡ

signed int unsigned intΥ 32ӥåȤǤ롥

2.2 ߴǽȳߥϥɥ

DEF_INH ǻꤹߥϥɥֹinhnoˤϡSOPC BuilderǤ˻
ֹɽΥǡINHNOˤ unsigned int
Ƥ롥DEF_INH ǡͥ٤ȤͭǤʤͤ䡤ºݤγͥ
٤Ȥϰۤʤֹꤷưݾڤʤ

2.4 ȥåץ⥸塼

Nios2 ¸Υȥåץ⥸塼start.SˤǤϡν
Ԥ

(A) ̿ᥭåν

̿ᥭåƤ硤initi̿ᥭå롥

(B) ǡåν

ǡåƤ硤initi̿ᥭå롥

(C) åݥ󥿤νȥХݥ󥿡

åݥ(sp)STACKTOPꤷ˥Хݥ󥿡(gp)
_gpǽ 

(D) hardware_init_hook θƽФ

hardware_init_hook  0 Ǥʤˤϡhardware_init_hook ƤӽФ
hardware_init_hook ϡͥ뤬ư˹Ԥɬפ륿
Ȱ¸νԤѰդƤ롥hardware_init_hook ɤǤ
Ƥʤ硤󥫤ǤΥܥ 0 ʥ󥫥
ץ˵Ҥˡ

(E) bssν

bss򥼥ꥢ롥ʤdataˤĤƤϡRAMλ
̤򸺤餹ŪǡROMбϹԤäƤʤ

(F) software_init_hook θƽФ

software_init_hook  0 Ǥʤˤϡsoftware_init_hook ƤӽФ
software_init_hook ϡͥ뤬ư˹Ԥɬפ륽եȥ
ĶʶŪˤϡ饤֥˰¸νԤѰդƤ롥
software_init_hook ɤǤƤʤ硤󥫤ǤΥ
 0 ʥ󥫥ץ˵Ҥˡ

(G) ͥεư

kernel_start ʬͥư롥kernel_start ꥿
Ƥ뤳ȤꤷƤʤ

2.5 ǽɾѥƥﻲȵǽ

Nios2 ¸Ǥϡǽɾѥƥﻲȵǽvxget_timˤ򥵥ݡ
ȤƤ롥ǽɾѥƥ٤ϥޤ˶뤹륯åˤ
äƷޤ롥ʤSYSUTIM UD64ӥåȤ̵ˤ
Ƥ롥

2.6 ꥢ륤󥿥եɥ饤

Nios2 ¸Υꥢ륤󥿥եɥ饤ФϡUART ⤷ 
JTAG-UART 򥵥ݡȤƤ롥UART  JTAG-UART ϥƥ¸
 sys_defs.h  USE_JTAG_UART Ф褤


3. ͥιˡ & ¹ˡ

3.1 ˡ
ͥιۤˤGUNȯĶ¾ˡmake  perl ɬפȤʤ롥Τ
ᡤWindows Ǥ Cygwin Ķ⤷ NiosII SDK Shell Ѥɬפ
롣NiosII SDK Shell  JSPͥιۤɬפ perlץȤǻ
Ѥ饤֥꤬ѰդƤᡢɸιˡǤϹۤǤʤ
ǤϡCygwin Ķ NiosII SDK Shell ʬ롣

3.1.1 CygwinĶ

NiosII Development Kit ˴ޤޤƤ륳ѥGNUġ Cygwin 
ƤӽФ褦ѥ̤

    $nios2_install$/bin/nios2-gnutools/H-i686-pc-cygwin/bin/
     $nios2_install$  NiosII Development Kit Υ󥹥ȡǥ쥯ȥ

ϡ̾ιۼuser.txt 7.3ˡˤ˽ͥۤ
롣

3.1.2 NiosII SDK Shell Ķ

NiosIIݡȥڡhttp://www.ertl.jp/~honda/niosII/ˤ顢ʲ
եɤ롣

   ѥѤߤΥե졼cfg.exeˤȥåchk.exe
   getopt.pl饤֥(perl饤֥)

ͥ륽ɤŸ塢ǥ쥯ȥ ./cfg ˥ѥѤ
Υե졼cfg.exeˤȥåchk.exeˤ򥳥ԡ롣

getopt.pl ϡNiosII SDK Shell Ķ perl 饤֥λ˥ԡ
롣
     : $quartus_install\sopc_builder\bin\perl_lib
         ($quartus_install QuartusIIΥ󥹥ȡ) 

ͥ륽ɤŸǥ쥯ȥľˤ perlץ 
./configure  򳫤get_objectؿʲΤ褦˽񤭴

  ꥸʥ
	sub get_objext {
	   	local(@uname);

		use POSIX;
		@uname = do uname();
		if ($uname[0] =~ /^cygwin/i) {
			return("exe");
		}
		else {
			return("");
    	}
	 }

   񤭴
	sub get_objext {	  
		return("");
	 }

ʾκȤθ塢̾ιˡ˽ͥۤ롣ʲϥͥ
ɤŸǥ쥯ȥǤκȤǤ롣

      ǥ쥯ȥ
        $makdir obj       
        $cd obj

      ե졼󥹥ץȤ¹
        $../configure -C nios2 -S altera_dev_board

      ͥ
        $make depned
        $make 
  
ͥ빽۸塢֥ȥե jsp.elf Ƥйۤ
Ǥ롣


3.2 ¹ˡ

Cygwin ⤷ NiosII SDK Shell Υ󥽡򳫤gdbserver ¹
롣
    
     $nios2-gdb-server --cable=USB-Blaster --tcpport=1234 -r

JTAG-UART Ѥϡnios2-terminal¹Ԥ롣

     $nios2-terminal.exe --cable=USB-Blaster --instance=0

ͥۤǥ쥯ȥ gdb ¹Ԥƥͥ
Ƽ¹Ԥ롣

     $nios2-elf-gdb jsp.elf
     (gdb)target remote localhost:1234
     (gdb)load 
     (gdb)continue


4. ¾ΥåȥܡɤؤΥݡƥ

4.1 ǥ쥯ȥ깽

̾ΥåȤξϡ./config ʲ

   ʥץå/ʥåȥܡ1
                 /ʥåȥܡ2

Ȥǥǥ쥯ȥ꤬Ƥꡤʥץåˤϥץå
ץåѥåIC˥ѥå줿Τ򼨤ץ
¸ȸƤ֡ʥåȥܡɡˤϤICܤܡɰ¸εǽ
ˤĤƤΥɤ֤ƤǥåȰ¸ȸƤ֡
Nios2 ϡƥ๽ͳѹǤ뤿ᡤΤ褦Τڤʬ
ϤǤʤǡJSPͥư뤿ɬ׺Ǿ¤ι
ץå¸Ȥơʥץåˤ֤ץå¸ȤƤΡ
JSPͥư뤿κǾʲ˼

 ץå
 (64kbyte)
 TIMER
 UART ⤷ JTAG UART

UARTJTAG UART¾Ū˻ѲǽǤꡢǥեȤǤJTAG-UART
Ѥ褦ˤƤ롣UART Ѥϡsys_defs.h  
USE_JTAG_UART ̤ˤ뤳ȡʳεǽΥɤϥåȰ
¸Ȥơʥåȥܡɡ˰ʲΥǥ쥯ȥ֤롥

ۥѥå˴ޤޤƤ륿åȰ¸ʲ˼

  ./altera_dev_board
      NiosII Development Board


4.2 ƥॳե졼

    ʥƥJSPͥưϡ嵭 NiosII 
    Development Board ѤΥåȰ¸ΥեоݤȤ륷
    ƥ๽ˤ碌ƽ񤭴Ф褤ƥ˹碌Խɬ
    ܤʲ˼

      ./sys_defs.h
        STACKTOP    : åɥ쥹
        TIMER_CLOCK : ޡå
        TIC_NUME    : ƥåʬ
        TIC_DENO    : ƥåʬ
        TIM_BASE    : TIMERΥ١ɥ쥹
        UART_BASE   : UART١ɥ쥹
        TIM_INTLVL  : TIMERγֹ
        UART_INTLVL : UARTγֹ
        NIOS2_ICACHE_SIZE        : ̿ᥭå奵
        NIOS2_DCACHE_SIZE        : ǡå奵
        NIOS2_ICACHE_LINE_SIZE   : ̿ᥭå饤󥵥
        NIOS2_DCACHE_LINE_SIZE   : ǡå饤󥵥

      ./Makefile.config
        COPTS              : ѥ륪ץ
        LIBS               : 饤֥
        LDFLAGS            : 󥫥ץ
        TEXT_START_ADDRESS : TEXTΥȥɥ쥹
        DATA_START_ADDRESS : DATAΥȥɥ쥹
        
        Nios2 Υѥ饪ץȤƤϰʲΤΤ롣
            -mno-hw-mul  : 軻ʤ
            -mno-hw-div  : ʤ
            -mhw-mul     : 軻濫   
            -mhw-div     : 濫
        
      ./nios2elf.l
        NiosII IDC(Eclipse)ǥץץۤ
        󥯥ץ

          xxx_syslib/Debug/system_description/generated.x

        ˰ʲιԤɲäƻѤ롣

          PROVIDE(_hardware_init_hook = 0);
          PROVIDE(_software_init_hook = 0);
          PROVIDE(software_term_hook = 0);

    
        㳰Υȥꥳɤϡ.exception֤褦˽񤫤Ƥ
        ᡤ󥫥ץȤǤϡΥץå
        㳰ȥ֤ɬפ롥
          
              .exceptions :
              {
                  . = ALIGN(0x20);
                  *(.irq)
                  KEEP (*(.exceptions));
              } > sdram


5¾

5.1 ǥ쥯ȥꡦե빽

Nios2 åȰ¸γƥեγפϼ̤ꡥ

    config/nios2/
        Makefile.config    Makefile  Microblaze¸
        cpu_defs.h         ץå¸Υץꥱ
        cpu_config.h       ץå¸ι
        cpu_config.c       ץå¸δؿ
        cpu_support.S      ץå¸Υ֥롼
        cpu_context.h      ƥ
        makeoffset.c       offset.h ݡȥץ
        cpu_insn.h         ٥Υץå롼
        start.S            ȥåץ⥸塼
        cpu_rename.def     ͥ̾Υ͡
        cpu_rename.h       ͥ̾Υ͡
        cpu_unrename.h     ͥ̾Υ͡
        nios2.h            Nios2 
        nios2.c            Nios2 ѥ
        hw_serial.h        UART/JATG-UARTɥ饤
        hw_serial.cfg      UART/JATG-UARTɥ饤ФΥե졼ե
        hw_timer.h         롼
        tool_defs.h        ȯĶ¸ΥץꥱGNUȯĶѡ
        tool_config.h      ȯĶ¸ιGNUȯĶѡ

    config/nios2/altera_dev_board
        Makefile.config    Makefile  MIREF ¸
        nios3elf.l         󥫥ץ
        sys_defs.h         ƥ¸Υץꥱ
        sys_config.h       ƥ¸ι
        sys_config.c       ƥ¸δؿ
        sys_support.S      ƥ¸Υ֥롼
        sys_rename.def     ͥ̾Υ͡
        sys_rename.h       ͥ̾Υ͡
        sys_unrename.h     ͥ̾Υ͡


5.2 ݡ

Хȯ toppers-users  ML ⤷ϡNios2 ¸
γȯԤΰʲΥ᡼륢ɥ쥹Ϣĺ

  honda@ertl.jp

ޤʲΥڡ˴ϢǺܤƤ롣

  http://www.ertl.jp/~honda/nios2


ʾ
