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

             Release 1.1 бǽ: 19-Sep-2006
                 NiosII Development Kit 5.1 б

----------------------------------------------------------------------
 TOPPERS/FDMP Kernel
    Toyohashi Open Platform for Embedded Real-Time Systems/
     Function Distributed Multiprocessor Kernel 

 Copyright (C) 2004-2006 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.3 2006/09/21 09:55:08 honda Exp $
----------------------------------------------------------------------

1. Nios2 åȰ¸γ

1.1 åȥƥ

Nios2 ץåΥåȥƥȤƤϡNios2 ݡȤƤ 
FPGA ܤƥ򥵥ݡȤƤ롥åȥƥȤƤϡ
ʲΥܡɤ򥵥ݡȤƤ롥

  Altera Nios II ȯå Cyclone ǥ 
    (http://www.altera.co.jp/products/devkits/altera/kit-nios_1C20.html)
  Altera Nios II ȯå Stratix ץեåʥ륨ǥ
    (http://www.altera.co.jp/products/devkits/altera/kit-nios_1S40.html)
  Altera Nios II ȯå StratixII ǥ
    (http://www.altera.co.jp/products/devkits/altera/kit-niosii-2S30.html)

嵭Υܡɤܥͥư뤿Υϡɥǥptf
뤬ܥѥå ./tools/ALTERA/ptf ˰ʲ̾Ǥ롥

  std_1c20.ptf : Altera Nios II ȯå Cyclone ǥ 
                 2ץå

  std_1s40.ptf : Altera Nios II ȯå Stratix ץեåʥ륨ǥ 
                 4ץå

  std_2s30.ptf : Altera Nios II ȯå Stratix ץեåʥ륨ǥ 
                 4ץå

ptfեϡNiosII Development Kit °Ƥ륵ץ
 standard ١ˤƤ뤿ᡤstandard Υեptfե
򥳥ԡ SOPC Builder ˤ NiosII ƥ
Ф褤ޤɸΥڥեˤϴޤޤƤʤץåֳ
ߥڥե(proc_int)ɬפȤʤ롥Υڥե 
./tools/ALTERA/peripheral/proc_int ˤΤǡSOPC Builder Υ饤֥
ѥ̤äƤǥ쥯ȥ˥ԡ뤳ȡ

FDMPͥư뤿ˤϡƥץåϰʲΥڥե
줾ɬפ롥ΤץåֳߡMutexڤӥ
֥MutexƤΥץå饢ǽǤɬפ롥

  ץåֳ(proc_int)
  Mutex(Mutex)
  ֥Mutex(Mutex)
  (Interval timer)
  UART(JTAG UART)

ʤץåֳߥڥեѤץåֳߤƤ
ץåƱեåȥɥ쥹ˤ뤳ȤꤷƤ뤿ᡤɥ
γդˡ󤬤롥ѹˤϡmp_config.h  
raise_ipi Խ뤳ȡ

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 ¾ΥåȤؤΥݡƥ

FDMPͥưˤϡ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. ͥιˡ & ¹ˡ

Altera Nios II ȯå Cyclone ǥ ˥ϡɥǥ
ιۤ顤ץץμ¹ԤޤǤμˤĤƲ⤹롥

3.1 ϡɥǥι

NiosII Development Kit Υ󥹥ȡǥ쥯ȥμξˤ롤
CycloneѤstandard ץǥŬʥǥ쥯ȥ˥ԡ롥

  ./nios2/examples/vhdl/niosII_cyclone_1c20/standard

ԡǥ쥯ȥܥѥå°ƤCycloneѤptfե
(std_1c20.ptf)򥳥ԡ()롥˥ץåֳߥڥե
(proc_int)եȥԡ롥

standard.qpf  QuartusII ǳSOPC Builer¹Ԥ롥SOPC 
Builder¹Ԥ줿顤񤭤ptfɤ߹ޤ졤System Contetns Υ
ɥǡ2ץåΥǥǤ뤳Ȥǧ롥ǧ顤
Generate ܥ򲡤HDLե롥ե顤
QuartusIIǥӥåȥȥ꡼ơFPGA򥳥ե졼
롥

3.2 ץץμ¹

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

3.2.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.2.2 NiosII SDK Shell Ķ

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

   getopt.pl饤֥(perl饤֥)

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("");
	 }

3.2.3 ֥ȥե

./dual ʲ2ץåѤΥץץȤ롥
Makefile.target Խ CPU  SYS 򼡤Τ褦ꤹ롥

   CPU = nios2
   SYS = nios2_dev_board_cyclone

˥ǥ쥯ȥ ./dual  

   $ make depend;
   $ make

¹ԤȥץåΥǥ쥯ȥ˥֥ȥե뤬롥

   ./dual/PE1/fdmp_PE1.elf
   ./dual/PE2/fdmp_PE2.elf

3.2.4 &¹

줾Υץå JTAG UART 򥳥󥽡Ѥ뤿ᡤ
nios2-terminal  JTAG UART ³롥

   PE1
    $ nios2-terminal.exe --cable=USB-Blaster --instance=1

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

󥹥ֹϡ0ID꿶뤬ʣ jtag_uart 
硤ɤˤɤֹ椬꿶뤫Τʥ롼Ϥʤᡤɬ
嵭γդˤʤȤϸ¤ʤե󥹥ǥξϼΤ
˥󥹥ֹ椬꿶Ƥ롥

   Stratix 2ץå
      PE1 : 0
      PE2 : 1

   Stratix 4ץå
      PE1 : 1
      PE2 : 2
      PE3 : 3
      PE4 : 0

gdb-server¹Ԥ롥
   
   PE1
    $ nios2-gdb-server.exe -r --instance=1 --cable=USB-Blaster --tcpport=1234

   PE2
    $ nios2-gdb-server.exe -r --instance=0 --cable=USB-Blaster --tcpport=1235

󥹥ֹϡ0ID꿶Ƥ뤬jtag_uartƱͤ˳
꿶Υ롼Ϥʤե󥹥ǥξϼΤ褦˥󥹥
ֹ椬꿶Ƥ롥

   Stratix 2ץå
      PE1 : 1
      PE2 : 0

   Stratix 4ץå
      PE1 : 1
      PE2 : 2
      PE3 : 3
      PE4 : 0

gdb-server¹Ԥ顤줾Υץåǥ쥯ȥgdb ¹Ԥ
ƥ֥ȥեɤ롥ʤͥνδط
塤ξΥץåǥ֥ȤΥ(load)λƤ
Ԥ򳫻Ϥ뤳ȡ

   PE1
   $ cd ./dual/PE1
   $ nios2-elf-gdb fdmp_PE1.elf <- gdbεư
   (gdb) target remote localhost:1234  <- gdb-serverؤ³
   0x00000000 in ?? ()                 <- ꥻåȥɥ쥹ɽ
   (gdb)load                           <- 
   Loading section .entry, size 0x1c lma 0x800000
   Loading section .exceptions, size 0x35c lma 0x800020
   Loading section .text, size 0x8048 lma 0x80037c
   Loading section .rodata, size 0x106c lma 0x8083c4
   Loading section .rwdata, size 0x34 lma 0x809430
   Loading section .shared, size 0xe0 lma 0x900000
   Start address 0x80037c, load size 38208
   Transfer rate: 305664 bits/sec, 483 bytes/write.
   (gdb)c                              <- ¹

   PE2
   $ cd ./dual/PE2
   (gdb) target remote localhost:1235  <- gdb-serverؤ³
   0x00040000 in ?? ()                 <- ꥻåȥɥ쥹ɽ
   (gdb)load                           <- 
   Loading section .entry, size 0x1c lma 0x5000000
   Loading section .exceptions, size 0x35c lma 0x5000020
   Loading section .text, size 0x8188 lma 0x500037c
   Loading section .rodata, size 0x10e0 lma 0x5008504
   Loading section .rwdata, size 0x34 lma 0x50095e4
   Loading section .shared, size 0xe0 lma 0x900000
   Start address 0x500037c, load size 38644
   Transfer rate: 309152 bits/sec, 489 bytes/write.
   (gdb)c                              <- ¹


¹ԤϤȥ󥽡˵ưСʡɽ졤Ʊ
ȥᥤ󥿥¹ԤưʲΥФ
    
    sample program starts (exinf = 0)

θ女ޥɼվ֤ˤʤ롥ޥɤ˴ؤƤϡץץ
Ƭ˥ȤΤǡ򻲾ȤΤȡ

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 ̤ˤ뤳ȡʳεǽΥɤϥåȰ
¸Ȥơʥåȥܡɡ˰ʲΥǥ쥯ȥ֤롥

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. ROMΥݡ

ͥ Flash ROM 鵯ư뤿εǽ򥵥ݡȤƤ롥ܵ
ǽϡȥåץ롼ƬˡͥΤ Flash ROM  
RAM˥ԡ롼äͥöRAMư褦˥
 Flash ROM ˽񤭹ळȤǡץåεư塤ͥ
ɤ RAM ˥ԡƤư뤳ȤǤ롥

ͥ Flash ROM 鵯ưϡMakefile.target ˤ

        BOOT_ROM = TRUE

ΥȥȤ򳰤ͭˤ롥

6¾

6.1 ǥ쥯ȥꡦե빽

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

    config/nios2/
        Makefile.config    Makefile  Nios2 ¸
        cpu_defs.h         ץå¸Υץꥱ
        cpu_config.h       ץå¸ι
        cpu_config.c       ץå¸δؿ
        cpu_support.S      ץå¸Υ֥롼
        cpu_context.h      ƥ
        makeoffset.c       offset.h ݡȥץ
        cpu_insn.h         ٥Υץå롼
        start.S            ȥåץ⥸塼
        mp_config.h        ޥץåѤΥץå¸      
        mp_config.c        ޥץåѤΥץå¸δؿ
        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/nios2_dev_board_cyclone
        Makefile.config    Makefile  CYCLONE ¸
        nios2elf_PE1.l     ץå1ѥ󥫥ץ
        nios2elf_PE2.l     ץå2ѥ󥫥ץ
        sys_defs.h         ƥ¸Υץꥱ
        sys_config.h       ƥ¸ι
        sys_config.c       ƥ¸δؿ
        sys_support.S      ƥ¸Υ֥롼
        sys_rename.def     ͥ̾Υ͡
        sys_rename.h       ͥ̾Υ͡
        sys_unrename.h     ͥ̾Υ͡

    config/nios2/nios2_dev_board_stratix
        Makefile.config    Makefile  STRATIX ¸
        nios2elf_PE1.l     ץå1ѥ󥫥ץ
        nios2elf_PE2.l     ץå2ѥ󥫥ץ
        nios2elf_PE3.l     ץå1ѥ󥫥ץ
        nios2elf_PE4.l     ץå2ѥ󥫥ץ
        sys_defs.h         ƥ¸Υץꥱ
        sys_config.h       ƥ¸ι
        sys_config.c       ƥ¸δؿ
        sys_support.S      ƥ¸Υ֥롼
        sys_rename.def     ͥ̾Υ͡
        sys_rename.h       ͥ̾Υ͡
        sys_unrename.h     ͥ̾Υ͡        

    tools/ALTERA/ptf 
        std_1c20.ptf       Cyclone 2ץåǥ ptf
        std_1s40.ptf       Stratix 2ץåǥ ptf
        std_2s60.ptf       StratixII 2ץåǥ ptf
    
    peripheral/
        proc_int           ץåֳ߲ϩ

6.2 ݡ

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

  honda@ertl.jp

ޤʲΥڡ˴ϢǺܤƤ롥

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