
              TOPPERS/JSPJ[l [UY}jA 
                     iNios2 ^[Qbgˑj

             iRelease 1.4.2 ΉAŏIXV: 10-Feb-2006j
                 iNiosII Development Kit 5.1 Ήj

------------------------------------------------------------------------ 
 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    

 L쌠҂́Cȉ (1)`(4) ̏CFree Software Foundation 
 ɂČ\Ă GNU General Public License  Version 2 ɋL
 qĂ𖞂ꍇɌC{\tgEFAi{\tgEFA
 ς̂܂ށDȉjgpEEρEĔzziȉC
 pƌĂԁj邱Ƃ𖳏ŋD
 (1) {\tgEFA\[XR[ȟ`ŗpꍇɂ́CL̒
     \C̗pщL̖ۏ؋K肪Ĉ܂܂̌`Ń\[
     XR[hɊ܂܂Ă邱ƁD
 (2) {\tgEFACCu`ȂǁC̃\tgEFAJɎg
     pł`ōĔzzꍇɂ́CĔzzɔhLgip
     ҃}jAȂǁjɁCL̒쌠\C̗pщL
     ̖ۏ؋Kfڂ邱ƁD
 (3) {\tgEFAC@ɑgݍނȂǁC̃\tgEFAJɎg
     płȂ`ōĔzzꍇɂ́Ĉꂩ̏𖞂
     ƁD
   (a) ĔzzɔhLgip҃}jAȂǁjɁCL̒
       쌠\C̗pщL̖ۏ؋Kfڂ邱ƁD
   (b) Ĕzž`ԂCʂɒ߂@ɂāCTOPPERSvWFNg
       񍐂邱ƁD
 (4) {\tgEFA̗pɂ蒼ړI܂͊ԐړIɐ邢Ȃ鑹
     QCL쌠҂TOPPERSvWFNgƐӂ邱ƁD

 {\tgEFÁCۏ؂Œ񋟂Ă̂łDL쌠҂
 TOPPERSvWFNǵC{\tgEFAɊւāC̓Kp\
 ܂߂āCȂۏ؂sȂD܂C{\tgEFA̗pɂ蒼
 ړI܂͊ԐړIɐȂ鑹QɊւĂC̐ӔC𕉂ȂD

 @(#) $Id: nios2.txt,v 1.1 2008/06/17 00:04:40 suikan Exp $
------------------------------------------------------------------------


1. Nios2 ^[Qbgˑ̊Tv

1.1 ^[QbgVXe

Nios2 vZbT̃^[QbgVXeƂẮANios2 T|[gĂ 
FPGA 𓋍ڂVXeT|[gĂB^[QbgVXeƂẮA
ȉ̃{[hT|[gĂB̃{[hgp邷ۂɂ́A{
[hɕtfUC Standard  Full Featured  FPGA 
KvD

 ENiosII Development Board Cyclone Edition
 ENiosII Development Board Stratix Edition
 ENiosII Development Board Stratix Professional Edition 
 ENiosII Development Board StratixII Edition

1.2 JƎs

Jɂ́CNiosII Development KitɊ܂܂Ă GCC Ȃǂ GNUJ
pCIuWFNgt@CtH[}bg ELF WƂD

J[l̃RpCyу_E[hEclipsepR}hC
(CygwinNiosII SDK Shell)sD

1.3 T|[g@\̊Tv

Nios2 ˑ̋@\ƂāC\]pVXeQƋ@\ivxget_timj
T|[gĂD݂̋֎~E(dis_int, ena_int)T|[gD
܂C݃}XN̕ύXEQ(chg_ixxCget_ixx)̓T|[gĂȂD

1.4 ̃^[Qbgւ̃|[eBO

JSPJ[l𓮍삳ɂ́A64Kbytex̃ƁAWTIMER
JTAG-UARTiUARTjꂼ1KvłBۂ̃R[hύXӏ
ɂĂ͌qB


2DNios2 vZbTˑ̋@\

̐߂ł́CJ[lуVXeT[rX̋@\̒ŁCNios2 ˑ̕
ɂĉD

2.1 f[^^

signed int^ unsigned int^̃TCY 32rbgłD

2.2 ݊Ǘ@\Ɗ݃nh

DEF_INH Ŏw肷銄݃nhԍiinhnoj́CSOPC BuilderłɎw
ݔԍ\C̃f[^^iINHNOj unsigned int^ɒ`
ĂDDEF_INH ŁCݗDxƂėLłȂlCۂ̊ݗD
xƂ͈قȂԍw肵ꍇ͕̓ۏ؂ȂD

2.4 X^[gAbvW[

Nios2 ˑ̃X^[gAbvW[istart.Sjł́C̏
sD

(A) ߃LbV̏

߃LbVĂꍇCinitiŖ߃LbVD

(B) f[^LbV̏

f[^LbVĂꍇCinitiŖ߃LbVD

(C) X^bN|C^̏ƃO[o|C^[̐ݒ

X^bN|C^(sp)STACKTOPɐݒ肵CɃO[o|C^[(gp)
_gpŏ 

(D) hardware_init_hook ̌ďo

hardware_init_hook  0 łȂꍇɂ́Chardware_init_hook ĂяoD
hardware_init_hook ́CJ[lNOɍsKv^[Qb
gˑ̏s߂ɗpӂĂDhardware_init_hook ǂł
`ĂȂꍇCJł̃V{ 0 ɒ`iJXN
vgɋLqjD

(E) bssZNV̏

bssZNV[NADȂCdataZNVɂẮCRAM̎g
pʂ炷ړIŁCROMɑΉ͍sĂȂD

(F) software_init_hook ̌ďo

software_init_hook  0 łȂꍇɂ́Csoftware_init_hook ĂяoD
software_init_hook ́CJ[lNOɍsKv\tgEF
Ai̓Iɂ́CCujˑ̏s߂ɗpӂĂD
software_init_hook ǂł`ĂȂꍇCJł̃V{
 0 ɒ`iJXNvgɋLqjD

(G) J[l̋N

kernel_start ֕򂵁CJ[lNDkernel_start 烊^[
Ă邱Ƃ͑z肵ĂȂD

2.5 \]pVXeQƋ@\

Nios2 ˑł́C\]pVXeQƋ@\ivxget_timjT|[
gĂD\]pVXe̐x̓^C}ɋNbNɂ
Č܂DȂCSYSUTIM^ UD^i64rbg̕^jɒ`
ĂD

2.6 VAC^tF[XhCo

Nios2 ˑ̃VAC^tF[XhCóCUART  
JTAG-UART T|[gĂDUART  JTAG-UART ̑I̓VXeˑ
 sys_defs.h  USE_JTAG_UART `΂悢B


3. J[l̍\z@ & s@

3.1 \z@
J[l̍\zɂGUNJ̑ɁCmake  perl KvƂȂD̂
߁CWindows ł Cygwin  NiosII SDK Shell gpKv
BNiosII SDK Shell  JSPJ[l̍\zɕKv perlXNvgŎg
p郉CupӂĂ߁AW̍\z@ł͍\złȂB
ł́ACygwin  NiosII SDK Shell ɕĐB

3.1.1 Cygwin

NiosII Development Kit Ɋ܂܂ĂRpCGNUc[ Cygwin 
Ăяo悤pXʂB

    $nios2_install$/bin/nios2-gnutools/H-i686-pc-cygwin/bin/
     i$nios2_install$  NiosII Development Kit ̃CXg[fBNgj

́Aʏ̍\z菇iuser.txt 7.3̕@jɏ]J[l\z
B

3.1.2 NiosII SDK Shell 

NiosIIT|[gy[Wihttp://www.ertl.jp/~honda/niosII/jAȉ
t@C_E[hB

   ERpCς݂̃RtBM[^icfg.exejƃ`FbJ[ichk.exej
   Egetopt.plCu(perlCu)

J[l\[XR[hWJAfBNg ./cfg ɃRpCς
̃RtBM[^icfg.exejƃ`FbJ[ichk.exejRs[B

getopt.pl ́ANiosII SDK Shell  perl Cu̎QƐɃRs[
B
     : $quartus_install\sopc_builder\bin\perl_lib
         ($quartus_install QuartusIĨCXg[) 

J[l\[XR[hWJfBNgɒɂ perlXNvg 
./configure  JAget_object֐ȉ̂悤ɏ

  IWi
	sub get_objext {
	   	local(@uname);

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

   
	sub get_objext {	  
		return("");
	 }

ȏ̍Ƃ̌Aʏ̍\z@ɏ]J[l\zBȉ̓J[l
\[XR[hWJfBNgł̍Ƃ̗łB

      fBNg쐬
        $makdir obj       
        $cd obj

      RtBM[VXNvgs
        $../configure -C nios2 -S altera_dev_board

      J[l\z
        $make depned
        $make 
  
J[l\zAIuWFNgt@C jsp.elf oĂ΍\z͐
łB


3.2 s@

Cygwin  NiosII SDK Shell ̃R\[JAgdbserver s
B
    
     $nios2-gdb-server --cable=USB-Blaster --tcpport=1234 -r

JTAG-UART gpꍇ́Anios2-terminalsB

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

J[l\zfBNg gdb săJ[l_E[h
ĎsB

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


4. ̃^[Qbg{[hւ̃|[eBO

4.1 fBNg\

ʏ̃^[Qbg̏ꍇ́C./config ȉ

   ivZbTj/i^[Qbg{[h1j
                 /i^[Qbg{[h2j

Ƃ\ŃfBNg쐬ĂCivZbTj̓vZbTR
AvZbTpbP[WICɃpbP[Wꂽ̂CvZb
TˑƌĂԁDi^[Qbg{[hj͂IC𓋍ڂ{[hˑ̋@\
ɂẴR[huĂꏊŃ^[QbgˑƌĂԁD
Nios2 ́CVXe\RɕύXł邽߁Ĉ悤ɖmȐ؂蕪
͂łȂDŁCJSPJ[l𓮍삳邽߂̕Kvŏ̍\
vZbTˑƂāivZbTjɒuDvZbTˑƂẮC
JSPJ[l𓮍삳邽߂̍ŏ\ȉɎD

 EvZbT
 E(64kbytex)
 ETIMER
 EUART  JTAG UART

UARTJTAG UART͔rIɎgp\łAfBtHgłJTAG-UARTg
p悤ɂĂBUART gpꍇ́Asys_defs.h  
USE_JTAG_UART 𖢒`ɂ邱ƁDȊŐ@\̃R[h̓^[Qbg
ƂāCi^[Qbg{[hjȉ̃fBNgɔzuD

zzpbP[WɊ܂܂Ă^[QbgˑȉɎD

  E./altera_dev_board
      NiosII Development Boardp


4.2 VXeRtBM[V

    VȃVXeJSPJ[l𓮍삳ꍇ́CL NiosII 
    Development Board p̃^[Qbgˑ̃t@CAΏۂƂVX
    e\ɂ킹ď΂悢DVXeɍ킹ĕҏWKv
    鍀ڂȉɎD

      E./sys_defs.h
        STACKTOP    : X^bNAhX
        TIMER_CLOCK : ^C}[NbN
        TIC_NUME    : ^CeBbN̕q
        TIC_DENO    : ^CeBbN̕
        TIM_BASE    : TIMER̃x[XAhX
        UART_BASE   : UARTx[XAhX
        TIM_INTLVL  : TIMER̊ݔԍ
        UART_INTLVL : UART̊ݔԍ
        NIOS2_ICACHE_SIZE        : ߃LbVTCY
        NIOS2_DCACHE_SIZE        : f[^LbVTCY
        NIOS2_ICACHE_LINE_SIZE   : ߃LbVCTCY
        NIOS2_DCACHE_LINE_SIZE   : f[^LbVCTCY

      E./Makefile.config
        COPTS              : RpCIvV
        LIBS               : Cuw
        LDFLAGS            : JIvV
        TEXT_START_ADDRESS : TEXTZNṼX^[gAhX
        DATA_START_ADDRESS : DATAZNṼX^[gAhX
        
        Nios2 ̃RpCIvVƂĂ͈ȉ̂̂B
            -mno-hw-mul  : ZȂ
            -mno-hw-div  : ZȂ
            -mhw-mul     : Z킠   
            -mhw-div     : Z킠
        
      E./nios2elf.l
        NiosII IDC(Eclipse)ŃTvvO\zƐ
        NXNvg

          xxx_syslib/Debug/system_description/generated.x

        Ɉȉ̍sǉĎgpB

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

    
        ÕGgR[h́C.exceptionɔzu悤ɏĂ
        ߁CJXNvgł́C̃ZNV𐳂vZbT
        OGgɔzuKvD
          
              .exceptions :
              {
                  . = ALIGN(0x20);
                  *(.irq)
                  KEEP (*(.exceptions));
              } > sdram


5D̑

5.1 fBNgEt@C\

Nios2 ^[Qbgˑ̊et@C̊Tv͎̒ʂD

    config/nios2/
        Makefile.config    Makefile  Microblazeˑ`
        cpu_defs.h         vZbTˑ̃AvP[Vp`
        cpu_config.h       vZbTˑ̍\`
        cpu_config.c       vZbTˑ̊֐
        cpu_support.S      vZbTˑ̃Tu[`
        cpu_context.h      ReLXg
        makeoffset.c       offset.h T|[gvO
        cpu_insn.h         ჌x̃vZbT샋[`
        start.S            X^[gAbvW[
        cpu_rename.def     J[l̓ʖ̃l[`
        cpu_rename.h       J[l̓ʖ̃l[
        cpu_unrename.h     J[l̓ʖ̃l[
        nios2.h            Nios2 ̒`
        nios2.c            Nios2 pR[h
        hw_serial.h        UART/JATG-UARThCo
        hw_serial.cfg      UART/JATG-UARThCõRtBM[Vt@C
        hw_timer.h         ^C}샋[`
        tool_defs.h        Jˑ̃AvP[Vp`iGNUJpj
        tool_config.h      Jˑ̍\`iGNUJpj

    config/nios2/altera_dev_board
        Makefile.config    Makefile  MIREF ˑ`
        nios3elf.l         JXNvg
        sys_defs.h         VXeˑ̃AvP[Vp`
        sys_config.h       VXeˑ̍\`
        sys_config.c       VXeˑ̊֐
        sys_support.S      VXeˑ̃Tu[`
        sys_rename.def     J[l̓ʖ̃l[`
        sys_rename.h       J[l̓ʖ̃l[
        sys_unrename.h     J[l̓ʖ̃l[


5.2 T|[g

oO𔭌ꍇ toppers-users  ML ɕ񍐂́CNios2 ˑ
̊J҂̈ȉ̃[AhXɘAĒ

  honda@ertl.jp

܂Cȉ̃y[WɊ֘AfڂĂB

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


ȏ
