
       == TOPPERS/JSP ͥ 桼ޥ˥奢 ==
              (LatticeMico32 åȰ¸)

       (Release 1.4.3 б, ǽ: 7-Mar-2008)
------------------------------------------------------------------------ 
 TOPPERS/JSP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     Just Standard Profile Kernel

 Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                            Toyohashi Univ. of Technology, JAPAN

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

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

------------------------------------------------------------------------

1. LatticeMico32 (lm32) åȰ¸γ

 1.1 åȥƥȳȯĶ
LatticeMico32 ץåΥåȥƥ Lattice FPGA ܤμ
ȯɾܡɤ򥵥ݡȤƤ롣

  Lattice ; LatticeECP2 LatticeMico32/DSP ȯܡ
     (FPGA LatticeECP2-50 )

ȯĶˤϡGCC ʤɤ GNU ȯĶѤ֥ȥեե
ޥåȤ ELF ɸȤ롣


 1.2 ݡȵǽγ
LatticeMico32 ¸εǽȤơߤζػߤȵ(dis_intena_int)
ƥﻲȵǽ(get_tim)ߥޥѹ(chg_ixxget_ixx)
򥵥ݡȤƤ롣ܺ٤ʥݡȴؿˤĤƤܥޥ˥奢˰
ǤޤȤƤ롣


 1.3 ƥ๽
LatticeMico32  FPGA оݤȤƤ뤿ᡢΥץå/ڥե
Ф뼫ͳ٤礭ä JSP ͥư뤿ɬפ
̤ʥץå¸ /lm32 ˡåȥƥ¸ϡҤ
ɾܡɤξ˴ؤ /lm32/ECP2 ˤ롣
ʤFPGA Ÿ˥桼ϩץʥե
졼ˤ̤ɬפǤ롣 LatticeECP2 ⤽פǤ롣
ƥȤƤϡ餫ԴȯˤΥե졼ѥ
ݻƤɬפ롣

åȥƥ JSP ͥư뤿Ρڥե
Ǿʲ˼JTAG ǥХåݡȤǤդǤ롣
  
  UART
  ȥ졼ݡͥȡ RAM SRAMեå

ȥ졼ݡͥȤιʥ֡ˡˤȤƤ 2 Ĥ褬롣
 RAM Υ֡ȡ
ͥ륤᡼б뤳ȤǤ٤ FPGA  RAM 礭
硢ȥ졼ݡͥȤȤƤ RAM ΤߤȤƤ⹽ǽ
롣åΰ˻Ĥ SRAM ˻ĤϡϤ RAM 
Ϥ߷ˤ˰¸롣
ܥ֡ˡϡFPGA 򥳥ե졼󤹤ݤˡ RAM ⥫
륤᡼Ʊ˽ΤǤ롣֡ȥɬפȤ뤳Ȥʤ
ꥻåȸľ˥ꥻåȥ٥ɥ쥹饤᡼¹Ԥ롣

եå꤫Υ֡ȡ
 ᡼եå˳Ǽ SRAMʰ RAMˤǥ᡼
¹Ԥ硢ȥ졼ݡͥȤȤƤϳ SRAM ȥեå
ιˤʤ롣ꥻåȸ塢եåΥ֡ȥޤư
ƥǡŬڤ˽塢¹Ԥ򳫻Ϥ롣

ʤ FPGA ˺ϩʥϡɥץåȥեˤκFPGA
ե졼ѥե˴ؤܺ٤ˤĤƤϰʲλʤ
򻲾Ȥ줿
LatticeMico32 Software Developer User Guide
LatticeMico32 Development Kit User's Guide for LatticeECP2
ispLEVER ޥ˥奢ܸ

ƻϰʲ URL ǽ
http://www.latticesemi.com/dynamic/index.cfm?fuseaction=view_documents&document_type=35&sloc=01-01-08-11-48-02
http://www.latticesemi.co.jp/docs/index.cfm


 1.4 ƥॳե졼
JSP ͥ򿷵ȯƥǼ¹Ԥ뤿ˤϡŬڤʥåȰ¸
եΰ򤽤ΥƥͭƤ˽񤭴롣ǧԽ٤ѥ
᡼ϰʲ̤Ǥ롣

lm32/Makefile.config
     COPTS        : ѥ륪ץ
     LDFLAGS     : 󥫥ץ

lm32/sys_defs.h
     TIC_NUME    : ƥåʬ
     TIC_DENO    : ƥåʬ
     TIMER_CLOCK : ޡå͡MICO32_CPU_CLOCK_HZ ˰¸
 
lm32/ECP2/lm32.h
     MICO32_CPU_CLOCK_HZ  : CPU åȿ [Hz]ǥեȤ 25MHz
     DEFAULT_UART_BOARDRATE UART Υǥեȡܡ졼(Baud Rate) [bps]
     TIMER_BASE_REG      : TIMER Υ١ɥ쥹
     UART0_BASE_REG     : UART 0 Υ١ɥ쥹
     UART1_BASE_REG     : UART 1 Υ١ɥ쥹
     INHNO_TIMER        : TIMER γ ID
     INHNO_SIO1          : UART 0 γ ID     
     INHNO_SIO2          : UART 1 γ IDUART 2 Ѥξ

lm32/ECP2/lm32elf.ldʥ󥫡ץȡ
     _fstack : åɥ쥹̾ﳰ SRAM  ORIGIN  LENGTH


1 ѥ륪ץCOPTSˤ˴ؤ
Mico32  CPU ΥץȤ̿¹ԥѥåλ
ݤ MSB ˤǤ (RTL  MSB ˡ˹碌ƥ
ѥ륪ץղä롣
-mmultiply-enabled 軻
-mbarrel-shift-enabled  Х륷ե
-mdivide-enabled
-msign-extend-enabled  ĥ

2 󥫡ץȡlm32elf.ldˤ˴ؤ
ҤΥå˴ؤʳˡ֡ȥ֡ȥλʤ
ԤCPU ι˼ͳ٤Τǡܥ󥫡ץȤ
Խˤդ줿ͤȤơlm32/ECP2/ ֥եˤϰʲ
ץ륹ץ㤬ޤޤƤ롣ʤͭʥ󥫡ץ̾
 lm32elf.ld Ǥ롣
  lm32elf_ebr.ld
FPGA ե졼塢 CPU ꥻåȸ塢꤫
֡ȡåϳ ASRAM
  lm32elf_flash.ld
FPGA ե졼塢 CPU ꥻåȸ塢եå
֡ȡåϳ ASRAM


 1.5 ¾ΥåȤؤΥݡƥ
LatticeMico32 ץåϰʲ Lattice  FPGA ǥХեߥ
ݡȤƤ롣
   LatticeECP2/ECP2MLatticeSC/SCMLatticeEC/ECP
ϩ RTL ϥץ󥽡ˤǤ롣Ūо
ǥХȤƤϤʤΤǡŪˤϤʳΥǥХؤμ
ǽǤ롣


 1.6 GDB 
LatticeMico32 ȯġ(MSB, SDK)Ǥ GDB ֤ϥݡȤƤʤ


2. LatticeMico32 ץå¸εǽ

Ǥϡͥ뤪ӥƥॵӥεǽǡLatticeMico32
¸ˤĤƽҤ٤롣

 2.1 ǡ
signed int  unsigned int  32 ӥåǤ롣

 2.2 ߴǽȳߥϥɥ
DEF_INH ǻꤹߥϥɥֹϡ"lm32.h" ǻꤷֹ
ɽΥǡ unsigned intUINTˤȤƤ롣
DEF_INH ̵γͥ٤䡢ºݤγͥ٤Ȱۤʤͤꤷ
ưݾڤʤ

ʤ㳰ϥɥϿϥե졼󡦥ե .cfg 
ʲä뤳ȤˤäƹԤ

DEF_TEX(TASK_ID, { TA_HLNG, tsk_exc_routine });
TASK_ID: Ͽ륿 ID
tsk_exc_routine: C եǵҤ륿㳰ϥɥ̾


 2.3 ȥåץ⥸塼ν
ȥåץ⥸塼 "start.S" ǤϰʲνԤ

(i) åν
̿ᥭåǡåƤ硢Ԥ

(ii) åݥ󥿤ȥХݥ󥿡ν
åݥ󥿤ȥХݥ󥿡ͤꤹ롣

(iii) 㳰ϥɥϿ
ꥻåȡХ顼ƥॳ롢ߤʤɤ㳰ϥɥ
줾Ͽ롣

(iv) bss ν
bss 򥯥ꥢ롣

(v) ͥεư
ͥư롣kernel_start ꥿󤹤뤳ȤϤʤ


3. եȥȯĶȼ

 3.1 ͥ빽ۤδĶ
ץꥱӥɤˡͥĶɬפ롣ʲ
Υåࡦ򼨤

A. LatticeMico32 ȯġ (Mico32 System Builder; MSB) 򥤥󥹥ȡ뤹

B. TOPPERS/JSP ɤꡢषMico32 MSB 󥹥ȡ롦ǥ쥯
ȥ겼֤

C. LatticeMico32 ΥåȰ¸ɡlm32ˤJSPѥå "jsp\config
Ȥ֥ǥ쥯ȥ겼ˤ뤳Ȥǧ

D. JSP ѥå "user.txt" 7.3Ϥ˵ҤƤ褦ˡGCC ʤɤΥġ
Ƴե졼ӥɤ롣λȡե "cfg.exe" 
"chk.exe" ǥ쥯ȥjsp/cfg" 롣
ʤMico32 MSBȤ߹ޤƤ Cygwin (Mico32 SDK) ϤŪ
ˤϻѤʤ

MSB ϲ URL ̵ǥɲǽʥ饤󥹥꡼ȤƱդ
ܥ򥯥åɬפ
http://www.latticesemi.com/dynamic/index.cfm?fuseaction=view_documents&document_type=65&sloc=01-01-08-11-48


 3.2 ץꥱΥӥ
LatticeECP2 FPGA 򥿡åȥǥХȤ륢ץꥱ̾"hello_world"
ȤˤĤƥӥɼʲ˼

  A. ĥҤΤߤۤʤƱ̾3ĤΥե롢hello_world.chello_world.h
hello_world.cfg Ѱդ

  B. "/jsp" ǥ쥯ȥ겼˺ȥǥ쥯ȥ lm32_hworldˤ
ե򥳥ԡ

  C. Mico32 MSB (SDK)ǥ򳫤 /jsp/lm32_hworld ˰ư塢ʲ¹
롣Makefile 
> ../configure -C lm32 -S ECP2 -A hello_world

  D.  Makefile Υ֥ȥեĥ̾71 ܡˤԽ
Ǥա
[] OBJEXT=exe
[] OBJEXT=elf

  E. Υޥɤ¹Ԥͥۤ
> make depend

  F. Υޥɤ¹Ԥ롣ŪȤ뤪ؤȥե jsp.elf ( jsp.exe)

> make
> make jsp.bin
> make; make jsp.bin ȤƤƱ

  (G. եѹ E, F 򷫤֤)


 3.3 ǥХåˡ
ʲ˥ץꥱץΥǥХåˡ򼨤

  A. Mico32 SDK 򳫤Υޥɤ¹Ԥ
    > TCP2JTAGVC2

  B. Mico32 SDK ⤦ĳ /jsp/lm32_hworld ˰ư塢ޥɤ¹
 GDB ǥХåĶ
    > lm32-elf-gdb

  C. GDB ˤƼΥޥɤǥåȤ˥󥯤
    (gdb) target remote localhost:1000

  D. Υޥɤ¹Ԥ᡼ɤ
    (gdb) load jsp.elf

3.2 F ˤ֥ȥե̾ jsp.exe ξ load jsp.exe

  E. GDB ƥޥɤѤƥǥХå롣¹Ԥ
    (gdb) cont


4. ¾

 4.1 ǥ쥯ȥ/ե빽 
LatticeMico32 ץå¸åȰ¸γƥեγפϼ
̤

  lm32/
    Makefile.config    Makefile  LatticeMico32 ¸
    cpu_rename.def     ͥ̾Υ͡
    cpu_rename.h       ͥ̾Υ͡
    cpu_unrename.h     ͥ̾Υ͡
    cpu_config.h       ץå¸ι
    cpu_config.c       ץå¸δؿ
    cpu_context.h      ƥ
    cpu_defs.h         ץå¸Υץꥱ
    cpu_insn.h         ٥Υץå롼
    cpu_support.S      ץå¸Υ֥롼
    makeoffset.c       offset.h ݡȥץ
    tool_defs.h        ȯĶ¸ΥץꥱGNU ȯĶ)
    tool_config.h      ȯĶ¸ιGNU ȯĶѡ
    start.S            ȥåץ⥸塼

  lm32/ECP2
    Makefile.config    Makefile  LatticeECP2 LatticeMico32/DSP ܡɰ¸
    lm32.h             LatticeMico32 
    lm32.c             LatticeMico32 ѥ
    sys_config.h       ƥ¸ι
    sys_config.c       ƥ¸δؿ
    sys_defs.h         ƥ¸Υץꥱ
    sys_rename.def     ͥ̾Υ͡
    sys_rename.h       ͥ̾Υ͡
    sys_unrename.h     ͥ̾Υ͡
    sys_support.S      ƥ¸Υ֥롼
    hw_serial.h        SIO ɥ饤
    hw_serial.cfg      SIO ɥ饤ФΥե졼ե
    hw_timer.h         롼
    lm32elf.ld         եå֡Ȥǳ SRAM ¹ԤΥ󥫥ץ


 4.2 ƥؿ
ݡȤ JSP ƥؿϰʲ̤ꡣC 饤֥ϼƤʤ

 4.2.1 ؿ
    CRE_TSK, act_tsk, iact_tsk, can_act, ext_tsk, ter_tsk,
    chg_pri, get_pri

 4.2.2 ¸Ʊؿ
    stp_tsk, tslp_tsk, wup_tsk, iwup_tsk, can_wup, rel_wai,
    irel_wai, sus_tsk, rsm_tsk, frsm_tsk, dly_tsk

 4.2.3 㳰ϥɥ󥰴ؿ
    DEF_TEX, ras_tex, iras_tex, dis_tex, ena_tex, sns_tex

 4.2.4 Ʊ̿ؿ
  ޥե
    CRE_SEM, sig_sem, isig_sem, wai_sem, pol_sem, twai_sem

  ٥ȥե饰
    CRE_FLG, set_flg, iset_flg, clr_flg, wai_flg, pol_flag,
    twai_flag

  ǡ塼
    CRE_DTQ, snd_dtq, psnd_dtq, ipsnd_dtq, tsnd_dtq, fsnd_dtq, 
    ifsnd_dtq, rcv_dtq, prcv_dtq, trcv_dtq

  ᥤܥå
    CRE_MBX, snd_mbx, rcv_mbx, prcv_mbx, trcv_mbx

 4.2.5 סؿ
  ꥵס
    CRE_MPF, get_mpf, pget_mpf, tget_mpf, rel_mpf

 4.2.6 ִؿ
  ƥॿ
    set_tim, get_tim, isig_tim

  åϥɥ顼
    CRE_CYC, sta_cyc, stp_cyc

 4.2.7 ƥִؿ
    rot_rdq, irot_rdq, get_tid,  iget_tid, loc_cpu, iloc_cpu, 
    unl_cpu, iunl_cpu, dis_dsp, ena_dsp, sns_ctx, sns_loc, 
    sns_dsp, sns_dpn

 4.2.8 ߴؿ
    DEF_INF, dis_int, ena_int, chg_ixx, get_ixx

 4.2.9 ƥॳե졼ؿ
    DEF_EXC, ATT_INI


 4.3 ݡ
Хȯ toppers-users  ML ⤷ Mico32 ¸
ôԤΰʲΥ᡼륢ɥ쥹Ϣĺ

xxxxxx@yyyy.jp

(-- ʾ --)
