ãã®èšäºã§ã¯ãMIPS32ãªãªãŒã¹2å²ã蟌ã¿ã®æ§æãšäœ¿çšã®ããã€ãã®äŸãæäŸããŸããããã«ã¯ãããã§èšå®ãããæ§æã®è©³çްãªèª¬æããå€éšå²ã蟌ã¿ã³ã³ãããŒã©ãŒã®æäœæ¹æ³ãèšèŒãããŠããŸãã
説æãããŠãããã¹ãŠã®ã³ãŒãã¯ãmipsfpga-plus [ L3 ]ãããžã§ã¯ãã®äžéšãšããŠgithubã§å
¬éãããŠããŸãã

ã¯ããã«
èªè
ã¯ïŒ
- ããªã¹ãšããªã¹ã®æç§æžã®å·»ã®äž»é¡é åã«ç²ŸéããŠãã[ L1 ];
- ã¿ã€ããŒãå²ã蟌ã¿ã®äœ¿çšãªã©ãïŒããããã¢ãŒããã¯ãã£ã®ïŒãã€ã¯ãã³ã³ãããŒã©ã®ããã°ã©ãã³ã°ã®çµéšããããŸãã
- ãœãŒã¹ã³ãŒãMIPSfpga [ L2 ]ããã³mipsfpga-plus [ L3 ]ã«ã¢ã¯ã»ã¹ã§ããŸãã
ãã®èšäºãæžãããšã«ãããMIPS microAptivã³ã¢ã®å²ã蟌ã¿ãåŠçãããã¹ãŠã®æ©èœãå
æ¬çã«è¿°ã¹ãã€ããã¯ãããŸããã ããã«ã¯ãããã¥ã¡ã³ãã®å€§èŠæš¡ãªç¿»èš³ãšãã»ãŒåãéã®ã³ã¡ã³ããå¿
èŠã§ãã ç®æšã¯ãäžäœäºææ§ããã¯ãã«ãå€éšã³ã³ãããŒã©ãŒã®äœ¿çšã®3ã€ã®å¯èœãªã¢ãŒãã§å²ã蟌ã¿ãæ§æããã³äœ¿çšããå®äŸã瀺ãããšã§ãã ãããã£ãŠãèªè
ãããå¿«é©ã«æããããã«ãããã¥ã¡ã³ãã®æ¬¡ã®ã»ã¯ã·ã§ã³ãããã«çè§£ããããšããå§ãããŸãã
- MIPS32 microAptiv UPããã»ããµãŒã³ã¢ãã¡ããªãŒã€ã³ãã°ã¬ãŒã¿ãŒãºã¬ã€ã[ D1 ]
ïŒã»ã¯ã·ã§ã³4ãå²ã蟌ã¿ã€ã³ã¿ãŒãã§ã€ã¹ãïŒ; - MIPS32 microAptiv UPããã»ããµã³ã¢ãã¡ããªãœãããŠã§ã¢ãŠãŒã¶ãŒããã¥ã¢ã«[ D2 ]
ïŒã»ã¯ã·ã§ã³ïŒ5.1-5.6 "microAptiv UPã³ã¢ã®äŸå€ãšå²ã蟌ã¿"ã6.2.13 "ã«ãŠã³ãã¬ãžã¹ã¿"ã6.2.15 "æ¯èŒã¬ãžã¹ã¿"ã6.2.16 "ã¹ããŒã¿ã¹ã¬ãžã¹ã¿"ã6.2.17 "IntCtlã¬ãžã¹ã¿"ã6.2 .22 "åå ã¬ãžã¹ã¿"ã6.2.28 "EBaseã¬ãžã¹ã¿"ã6.2.33 "Config3ã¬ãžã¹ã¿"ïŒ; - Codescape GNU Tools for MIPSããã°ã©ããŒãºã¬ã€ã[ D3 ]
ïŒã»ã¯ã·ã§ã³ïŒ15.5ããäŸå€ãã15.6ããå²ã蟌ã¿ãïŒã
ãã¹ãŠã®äŸã§ãããããããããããã«ãã·ãã¥ã¬ãŒã¿ãŒã§å®è¡ãããã·ã¹ãã mipsfpga-plusã§ã®èµ·åã«ã€ããŠèª¬æããŠããŸãã åæ§ã«æåããå Žåãããã¯ããŒããŠã§ã¢ã§ãå®è¡ã§ããŸããã³ãŒãå
šäœã®æ©èœã¯ãTerasic DE10-Lite [ L4 ]ããŒãã§ãã¹ããããŸããã
åãå
¥ããããæå®
ä¿¡å·ã®ååã¯ã€ã¿ãªãã¯äœïŒ SI_Int [7ïŒ0] ïŒã§ç€ºãããŠããŸãããç¹ã«æå®ããªãéãããã¹ãŠã®ä¿¡å·ã¯MIPSfpgaã·ã¹ãã ã®äžäœã¢ãžã¥ãŒã«ïŒm14k_topïŒã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ãã ã¬ãžã¹ã¿ã®å Žåã飜åãã©ã³ãïŒ Count ïŒã䜿çšãããåã
ã®ãããïŒãã£ãŒã«ãïŒã®ååã¯ãé¢é£ããã¬ãžã¹ã¿ã瀺ããããïŒ Cause.DC ïŒã§ç€ºãããŸããããã¥ã¡ã³ãã®åå¥ã®ã³ããŒã§ã¯ãã¬ãžã¹ã¿ãã£ãŒã«ãã¯äžä»ãæåïŒ Cause IV ïŒã§ç€ºãããŸãã ãã¹ãŠã®ã¬ãžã¹ã¿ã«ã€ããŠããããå¥ã«æå®ãããŠããªãå Žåãå¹
x32ãæ³å®ãããŸãã ããã¥ã¡ã³ãã®ã³ããŒã§å®æ°ãæå®ããå Žåãèšå·ããã³ããã®åã«çªå·ã·ã¹ãã ã®æç€ºããããŸãïŒ16ïŒ180ã2ïŒ00001ïŒã
ãªããªã æ®å¿µãªããããªãã·ã§ã³ãGPR Shadow RegistersãïŒShadow Register SetãSRSïŒã¯MIPSfpgaã§ã¯å©çšã§ããªãããããã®èšäºã§ã¯æ±çšã·ã£ããŠã¬ãžã¹ã¿ã«é¢ãã詳现ãçç¥ããŠããŸãã ãã®æ©èœããã€ã¢ã°ã©ã äžã«ããå Žå-ç°è²ïŒè²ãããïŒè²ã§åæ ãããŸãã
äŸå€åŠç
äŸå€ã¯ãããã»ããµãã«ãŒãã«ã¢ãŒãã«åãæ¿ãããã¹ãŠã®ã€ãã³ããšããŠçè§£ãããŸãïŒå€éšããã€ã¹ããã®å²ã蟌ã¿èŠæ±ãå«ããã¡ã¢ãªã¢ã¯ã»ã¹ãšã©ãŒããŒãé€ç®ãªã©ã èãããããã¹ãŠã®äŸå€ã®åŠçã¯åºç¯ãªãããã¯ã§ããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒOSïŒã®ã«ãŒãã«ããåãé¢ããŠæ£ããèæ
®ããããšã¯ã§ããŸãããããã¯æããã«ãã®èšäºã®ç¯å²å€ã§ãã ãã ããOSã®äœ¿çšãæå³ãããŠããªãå Žåã§ãïŒãã¢ã¡ã¿ã«ã³ãŒãïŒãéçºè
ã¯ã¡ã¢ãªå
ã«æå°éã®ãã³ãã©ãŒã»ãããæäŸããŠãäŸå€ã®çºçã«ã€ããŠåŠç¿ãããä»»æã®æ°Žæ³³ãã§ã®ããã°ã©ã ã®å®è¡ã鲿¢ããå¿
èŠããããŸãã
ãã³ãã©ãŒã¢ãã¬ã¹æ±ºå®ã¢ã«ãŽãªãºã ããããã«ççž®if Status.EXL = 1 then vectorOffset â 16#180 else if ExceptionType = TLBRefill then vectorOffset â 16#000 elseif (ExceptionType = Interrupt) then // if (Cause.IV = 0) then vectorOffset â 16#180 else if (Status.BEV = 1) or (IntCtl.VS = 0) then vectorOffset â 16#200 else if Config3.VEIC = 1 then VecNum â Cause.RIPL else VecNum â VIntPriorityEncoder() endif vectorOffset â 16#200 + (VecNum à (IntCtl.VS || 2#00000)) endif endif endif endif Cause.ExcCode â ExceptionType // , Status.EXL â 1 // , " " if Status.BEV = 1 then vectorBase â 16#BFC00200 else // EBase[31:30] = 2'b10 // kseg0 kseg1 vectorBase â EBase[31:12] || 16#000 endif // // vectorBase vectorOffset // 29 30 PC â {vectorBase[31:30], (vectorBase[29:0] + vectorOffset[29:0])}
äžèšã®ã¢ã«ãŽãªãºã ã§ã¯ã次ã®ç¹ã¯èæ
®ãããŸããã
- ããã»ããµã®ãªã»ããã«ã€ãªããäŸå€ïŒResetãSoftResetãNMI-16ïŒBFC00000ãžã®ç§»è¡ãåŒãèµ·ããïŒ;
- EJTAGäŸå€;
- ãã£ãã·ã¥/ SPRAMããªãã£ãšã©ãŒããã£ãã·ã¥ãããã»ã°ã¡ã³ãkseg0ã®ä»£ããã«Status.BEV = 0ã®å Žåããã£ãã·ã¥ãããŠããªãã»ã°ã¡ã³ãkseg1ïŒ vectorBase [29] = 1'b1ïŒãšEBase [29:12] = 0ã«ããããããŸãã ãããã³16ïŒA0000000ã ç§ãã¡ã®å Žåãããã¯éèŠã§ã¯ãããŸããã MIPSfpgaãããžã§ã¯ãã§ã¯ãã¡ã¢ãªã»ã°ã¡ã³ãã亀差ãïŒmfp_ahb_lite_decoderã¢ãžã¥ãŒã«ã®RTLã³ãŒããåç
§ïŒãã¡ã¢ãªã«ã¢ã¯ã»ã¹ãããšãã«ã¢ãã¬ã¹ã®äžäœ3ããããç¡èŠãããŸãã
- ãªãã»ãã0x80ã®XTLB RefiläŸå€ã[ D2 ]ã§ã¯èª¬æãããŠããŸãããã[ D3 ]ããã³æäŸãããŠãããã¹ãŠã®ã³ãŒãäŸã§èª¬æãããŠããŸãã èªè
ã®äžäººããã®ç¹ãæç¢ºã«ã§ããã°ããã®æ
å ±ã«æè¬ããŸãã
äŸå€ã®è©³çްã¯[ D2 ]ã«ãããŸãã
ãããã£ãŠãå²ã蟌ã¿ã䜿çšããªããŠããéçºè
ã¯æ¬¡ã®ãªãã»ããã«äŸå€ãã³ãã©ãããããšã確èªããå¿
èŠããããŸãã
- 16ïŒ000-TLBè£å
ãã³ãã©ãŒã
- 16ïŒ080-XTLB Refil;
- 16ïŒ100-ãã£ãã·ã¥/ SPRAMããªãã£ãšã©ãŒã
- 16ïŒ180-äžè¬çãªäŸå€ãã³ãã©ã
å²ã蟌ã¿åŠçã¢ãŒã
ãããã®3ã€ã ãããããŸãã
- å²ã蟌ã¿äºæã¢ãŒã-äºæã¢ãŒãã
- ãã¯ãã«å²ã蟌ã¿ïŒVIïŒã¢ãŒã-ãã¯ãã«ã¢ãŒãã
- å€éšå²ã蟌ã¿ã³ã³ãããŒã©ãŒïŒEICïŒã¢ãŒã-å€éšå²ã蟌ã¿ã³ã³ãããŒã©ãŒã®ã¢ãŒãã
ããã©ã«ãã§ã¯ãããã»ããµã¯äºæã¢ãŒãã§èµ·åããŸãã å°æ¥çã«ã¯ããããïŒãã£ãŒã«ãïŒã®å¯Ÿå¿ããå€ãèšå®ããããšã§å€æŽã§ããŸãã
- Status.BEV-å²ã蟌ã¿ãã³ãã©ãŒã®ãã¯ãã«ã®å€äœãèšç®ãããããŒã¹ã¢ãã¬ã¹ãå®çŸ©ããããã°ã©ã ã§èšå®ãããŸãããªã»ããåŸã®å€ã¯1ã§ãã
- Cause.IV-å²ã蟌ã¿ãã³ãã©ãŒã®ãã¯ãã«ã®å€äœã決å®ããããã°ã©ã ã§èšå®ãããŸãããªã»ããåŸã®å€ã¯å®çŸ©ãããŠããŸããã
- IntCtl.VS-ãã¯ãã«éã®ééã¯ããã¯ãã«éã®ãªãã»ãããæ±ºå®ããããã°ã©ã ã§èšå®ãããŸãããªã»ããåŸã®å€ã¯0ã§ãã
- Config3.VINT-ãã¹ãŠã®microAptivã³ã¢ã§1ã«çããããã¯ãã«åãããå²ã蟌ã¿ãèªã¿åãå°çšã ããã³MIPSfpgaã®å Žåã
- Config3.VEIC-å€éšå²ã蟌ã¿ã³ã³ãããŒã©ãŒã®ååšãå€å¥ããŸããèªã¿åãå°çšã§ãå€ã¯SI_EICPresentä¿¡å·ã«ãã£ãŠèšå®ãããŸãã
ãªã¹ãããããããïŒãã£ãŒã«ãïŒãšããããé¢é£ããã¬ãžã¹ã¿ã®è©³çްãªèª¬æã¯ããã¥ã¡ã³ãã«èšèŒãããŠããŸãããããã®å€ã®åèšãå²ã蟌ã¿åŠçã¢ãŒãã«äžãã圱é¿ã«æ³šæããŠãã ããã

ã·ã¹ãã ã¿ã€ããŒ
å²ã蟌ã¿ã®åŠçã®èª¬æã«é²ãåã«ãæãé »ç¹ã«çºçãããœãŒã¹ã®1ã€ã§ããã·ã¹ãã ã¿ã€ããŒã«ã€ããŠèããŠã¿ãŸãããã ãã®æ©èœã¯éåžžã«ã·ã³ãã«ã§ãããããã»ããµã³ã¢ã®äžéšã§ãããçãšãã¢ãŒãã§åäœããããšãã§ãããããã©ã®ç°å¢ã§ã䜿çšã§ããŸãã
ããã䜿çšããã«ã¯ã2ã€ã®ã¬ãžã¹ã¿ã䜿çšãããŸãã
- ã«ãŠã³ã -ã«ãŠã³ã¿ãŒã®ç»é²ã Cause.DC == 0ïŒã«ãŠã³ãã¬ãžã¹ã¿ãç¡å¹ã«ãããããã©ã«ã= 0ïŒã®å Žåãåããã»ããµã¯ããã¯ãµã€ã¯ã«ã§1ãã€å¢å ããŸãã ã«ãŠã³ã¿ãŒããªã»ããããå¯äžã®æ¹æ³ã¯ãæ°ããå€ïŒããšãã°ããŒãïŒãæžã蟌ãããšã§ããã¿ã€ããŒå²ã蟌ã¿ä¿¡å·ïŒçåŒCount == Compareã«ãã£ãŠåŒãèµ·ããããïŒã¯ãã«ãŠã³ã¿ãŒãèªåçã«ãªã»ããããŸããã
- æ¯èŒ -æ¯èŒã¬ãžã¹ã¿ã Count == Compareããã³Compare ïŒ= 0ã®å Žåãå²ã蟌ã¿ã®ãœãŒã¹ãšããŠæ©èœããSI_TimerIntä¿¡å·ã1ã«èšå®ããã Cause.TIãããïŒã¿ã€ããŒå²ã蟌ã¿ïŒãåæã«èšå®ãããŸãã ãã®ä¿¡å·ããªã»ããããã«ã¯ã Compareã«æžã蟌ã¿ãŸãã
ãããã®ã¬ãžã¹ã¿ã䜿çšããã«ã¯ãmips / cpu.hã§å®£èšãããŠããmips32_setcompareããã³mips32_setcountãã¯ãã䜿çšããŠã¿ã€ããŒãåæåããã³ãªã»ãããããšäŸ¿å©ã§ããå®éã«ã¯ãåãã³ãŒã[ S0 ]ã䜿çšãããŸãã
mips32_setcompare(MIPS_TIMER_PERIOD);
äžã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãå²ã蟌ã¿åŠçäžã®ã¿ã€ããŒã®åæåãšãªã»ããã®ç¬éã瀺ããŠããŸãã

SI_TimerIntä¿¡å·ã®ååšã¯ãå²ã蟌ã¿ãåŒãèµ·ããã«ã¯äžååã§ãã åŠçããããã«ã¯ãRTLã¬ãã«ã§æ£ããã«ãŒãã£ã³ã°ããå¿
èŠããããŸããRTLã¬ãã«ã¯ã以äžã§èª¬æããçŸåšã®å²ã蟌ã¿ã¢ãŒãã«äŸåããŸãã
å²ã蟌ã¿äºæã¢ãŒã
MIPS32ãªãªãŒã¹1ãšã®äžäœäºææ§ã¢ãŒããäž»ãªæ©èœïŒ
- 8ã€ã®å€éšå²ã蟌ã¿ã䜿çšå¯èœã§ããå
¥åSI_Int [7ïŒ0]ã¯ããã©ã°Cause.IP9 - IP2ã«å¯Ÿå¿ããŠããŸãã
- 2ã€ã®ãœãããŠã§ã¢å²ã蟌ã¿ã䜿çšå¯èœã§ãïŒ Cause.IP1 - IP0 ;
- å²ã蟌ã¿ãçºçããå
¥åã«é¢ä¿ãªããå¶åŸ¡ã¯1ã€ã®ãã³ãã©ãŒã«è»¢éãããŸãããã®ãã³ãã©ãŒã¯ããšããããäŸå€ã®åŠçãæ
åœããŸãã
- ããŒããŠã§ã¢å²ã蟌ã¿ã®åªå
é äœä»ãã¯ãããŸããã
- æãåªå
床ã®é«ãå²ã蟌ã¿ã®å®çŸ©ã¯éçºè
ã«æ®ãã Cause.IP9ãIP0 ã Cause.TIãåæããããšã«ãããã³ãã©ãŒå
ã§å®è¡ãããŸãã
- ã¿ã€ããŒå²ã蟌ã¿åºåïŒ SI_TimerInt ïŒã¯ã SI_Int [7ïŒ0]å
¥åã®ããããã«é¢é£ä»ããå¿
èŠããããŸãã ãã®ãããä¿¡å·ãæç€ºçã«çžäºã«æ¥ç¶ããå¿
èŠã¯ãããŸãããå
¥åSI_IPTI [2ïŒ0]ã䜿çšã§ããŸããå€0x2ã¯SI_TimerIntã SI_Int [0]ã«ããããæ¥ç¶ãããããšãæå³ãã0x7ã¯SI_Int [5]ãžã®æ¥ç¶ãæå³ããŸãã SI_Int [5]ãžã®æ¥ç¶ã¯åŸæ¥åãšèŠãªãããŸãã
- MIPS32ãªãªãŒã¹1ããã»ããµã«ã€ããŠè©±ããšã6åã®å€éšå²ã蟌ã¿ã®ã¿ã䜿çšå¯èœã§ãïŒ Cause.IP9 - IP8ã¯ååšããŸããïŒ[ D4 ]ãããããã SI_IPTI [2ïŒ0]ã䜿çšããŠã¿ã€ããŒå²ã蟌ã¿ãä»ã®ããŒãã«åãæ¿ããããšãã§ããªãããšãç¶æ¿ããŸããSI_Int [5]ãã ã ãããã£ãŠãäžäœäºææ§ã¢ãŒãã¯ãMIPS32ãªãªãŒã¹1ã§æåã«å©çšã§ããæ©èœãããå€ãã®æ©èœãæäŸããŸãã
æ¯èŒçæè¿ã®ãã€ã¯ãã³ã³ãããŒã©ãŒã§ã®çµã¿èŸŒã¿ã·ã¹ãã ã®éçºã§åããŠã®çµéšããã人ã¯ãäŸå€ã®å€§éšåãå«ãããã¹ãŠã®ããããã6åã®å€éšå²ã蟌ã¿ãš1ã€ã®å
±éããã»ããµãŒã«æžæããããããŸããã ããã§ã¯ãMIPSã¢ãŒããã¯ãã£ã®ããã€ãã®æŽå²ãèæ
®ããå¿
èŠããããŸããå²ã蟌ã¿ãœãŒã¹ã¯éå±€çã«æ¥ç¶ããããšæ³å®ãããå²ã蟌ã¿ãžã®ïŒããã®ïŒå
¥åã³ãŒãã¯ãã¹ãŠã®ãã³ãã©ãŒã«å
±éã§ãããšèŠãªãããŸããã å€éšããã€ã¹ã¯æ¬è³ªçã«äœéã§ããããïŒã€ãã³ãã¯ã»ãšãã©çºçããŸããïŒããœãŒã¹ãšåªå
床ã®ãæåããã§ãã¯ã«ããç¹å¥ãªããã©ãŒãã³ã¹ã®æå€±ã¯ãªããå¯èœãªæé©åã®äœå°ãããããŸãã [ L5 ]ããã®ãã®ãããªæ¥ç¶ã®äŸã以äžã«ç€ºããŸãã

ãããã®æ©èœããæ¬ ç¹ããšèŠãªãããå Žåã§ããMIPSfpgaããã»ããµã³ã¢ã®å¯Ÿå¿ããã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠæ¥ç¶ãããå€éšå²ã蟌ã¿ã³ã³ãããŒã©ãŒã䜿çšããå¯èœæ§ã«ããã察å¿ããã»ã¯ã·ã§ã³ã§ç°¡åã«è£åãããŸãã
äŸ
èµ·åé åº
- 次ã®èšå®ãmfp_ahb_lite_matrix_config.vhãã¡ã€ã«ã«èšå®ãããŠããããšã確èªããŸãïŒå€éšå²ã蟌ã¿ã³ã³ãããŒã©ãŒã䜿çšããããã®èšå®ã¯ã³ã¡ã³ãåããå¿
èŠããããŸãïŒ[ S1 ]ïŒ
`define MFP_USE_WORD_MEMORY
ããã°ã©ã ãšã·ã¹ãã æ§æã®èª¬æ
RTLããããŒãã¡ã€ã«ã§èšå®ãããèšå®ã¯ãããã»ããµã³ã¢å²ã蟌ã¿ã€ã³ã¿ãŒãã§ã€ã¹[ S3 ]ã®ä»¥äžã®æ§æã«ã€ãªãããŸãã
assign SI_Offset = 17'b0; //not used assign SI_EISS = 4'b0; //not used assign SI_Int[7:4] = 4'b0; assign SI_Int[3] = uart_interrupt; assign SI_Int[2:0] = 3'b0; assign SI_EICVector = 6'b0; //not used assign SI_EICPresent = 1'b0; //no external interrupt controller assign SI_IPTI = 3'h7; //enable MIPS timer interrupt on HW5
ãã¡ã€ã«exceptions.Sã«ã¯ãæäœã«å¿
èŠãªå²ã蟌ã¿ãã¯ãã«ãå«ãŸããŠããŸãããããã¯ãã¹ãŠã»ãŒåãã¿ã€ãã§ã[ S4 ]ïŒ
.org 0x200 # set symbol offset from section beginning .weak __mips_isr_sw0 # if the symbol does not already exist, it will be created __isr_vec_sw0: la $k1, __mips_isr_sw0 # load interrupt handler (__mips_isr_sw0) addr beqz $k1, __general_exception # if it is not present then go to generic nop jr $k1 # jump to irq_sw0 nop
äŸå€ãã¯ã¿ãŒã¯ã察å¿ãããã³ãã©ãŒãããã°ã©ã ã§å®çŸ©ãããŠããªãå Žåãã³ãŒãã«ãŒã[ S5 ]ãå®è¡ããããšããç¹ã§ãå²ã蟌ã¿ãã¯ã¿ãŒãšã¯ç°ãªããŸãã
.org 0x0 # set symbol offset from section beginning .weak _mips_tlb_refill # if the symbol does not already exist, it will be created __tlb_refill: la $k1, _mips_tlb_refill # load exception handler (_mips_tlb_refill) addr beqz $k1, __tlb_refill # if _mips_tlb_refill doen not exist then just loop here nop jr $k1 # jump to _mips_tlb_refill. # we can use 'j _mips_tlb_refill' nop # but it works only with 1st 28 bits of addr
mian.cãã¡ã€ã«ã¯ãã¿ã€ããŒ[ S0 ]ãé çªã«åæåããŸãã
mips32_setcompare(MIPS_TIMER_PERIOD);
å²ã蟌ã¿ã®åæå[ S6 ]ïŒ
ãããŠãé æ¬¡ãã³ãã©ãŒãæ³å®ãã1ã€ã®ãã³ãã©ãŒã§ã®åŠçïŒãã®äŸå€ãå²ã蟌ã¿ãã©ããã確èªããã©ã®å²ã蟌ã¿ãåŠçããå¿
èŠããããã倿ããåŠçèªäœãå®è¡ããŸã[ S7 ]
void __attribute__ ((interrupt, keep_interrupts_masked)) _mips_general_exception () { MFP_RED_LEDS = MFP_RED_LEDS | 0x1; uint32_t cause = mips32_getcr();
- ãã®äŸã§ã¯ãé¢é£ããå²ã蟌ã¿ãã©ã°ïŒHW5ïŒã䜿çšããŠã·ã¹ãã ã¿ã€ããŒã®å²ã蟌ã¿ã確èªããŸãããã®ããã«ã Cause.TI ïŒãã¯ãCR_TIïŒã䜿çšã§ããŸãã
- ããã°ã©ã ã®å段éã¯ã察å¿ããç¶æ
MFP_RED_LEDSã«åæ ãããŸãã
ã¿ã€ããŒå²ã蟌ã¿ïŒHW5ïŒã§ã¯ãã«ãŠã³ã¿ãŒãã€ã³ã¯ãªã¡ã³ããããã¿ã€ããŒããªã»ãããããããã°ã©ã å²ã蟌ã¿èŠæ±ãã©ã°SW1 [ S8 ]ãèšå®ãããŸãã
n++; mipsTimerReset(); mips32_biscr(CR_SINT1);
å²ã蟌ã¿SW1ã§ã¯ãå²ã蟌ã¿ãã©ã°ã®ã¿ããªã»ãããããŸã[ S9 ]ïŒ
mips32_biccr(CR_SINT1);
- ãã©ã°ã®æäœã«äœ¿çšããããã¹ãŠã®ãã¯ãã¯ãmips / cpu.hã§å®£èšãããŠããŸãã
ã¡ã€ã³æ©èœã³ãŒãã§ã¯ãã«ãŠã³ã¿ãŒã¯7ã»ã°ã¡ã³ãã€ã³ãžã±ãŒã¿ãŒã«åšæçã«åºåãããŸã[ S10 ]ïŒ
for (;;) MFP_7_SEGMENT_HEX = n;
- ããã°ã©ã ã®çµæã¯ã次ã®ãããªä¿¡å·å³ã§ãã ã¬ãžã¹ã¿ã®å€ãç¹ã«Causeããã³Status ã PC ã Countããã³ompareããªã¢ã«ã¿ã€ã ã§èгå¯ã§ããããããããã°ã倧å¹
ã«ç°¡çŽ åãããããšã«æ³šæããŠãã ããã

ãã¯ã¿å²ã蟌ã¿ã¢ãŒã
ãã¯ãã«å²ã蟌ã¿åŠçã¢ãŒãã

äž»ãªæ©èœïŒ
- åŠçãããå²ã蟌ã¿ã®æ°ãšæ§æïŒ8ã€ã®å€éšãœãããŠã§ã¢ãš2ã€ã®ãœãããŠã§ã¢ïŒãããã³SI_TimerIntãæäœããæé ã¯ãå²ã蟌ã¿äºæã¢ãŒããšå®å
šã«é¡äŒŒããŠããŸãã
- åå²ã蟌ã¿ãåŠçããã«ã¯ãç¬èªã®ãã³ãã©ãŒïŒãã¯ã¿ãŒïŒã䜿çšãããŸãã
- å²ã蟌ã¿ã«ã¯ãããã»ããµã³ã¢ã«ãã£ãŠåŠçãããé åºã決å®ããåªå
é äœããããŸãã åªå
åºŠã®æé ïŒSW0ãSW1ïŒãœãããŠã§ã¢å²ã蟌ã¿ïŒãHW0-HW7ïŒããŒããŠã§ã¢å²ã蟌ã¿ãSI_Intä¿¡å·[7ïŒ0]ã«å¯Ÿå¿ïŒ

- æåã®ãã¯ãã«å²ã蟌ã¿ãã³ãã©ãŒã¯ãªãã»ãã0x200ã«é
眮ãããŸãã
- æåãš2çªç®ã®éã®ãªãã»ãããããã³åŸç¶ã®ãã¹ãŠã®ãã³ãã©ãŒã¯ã IntCtl.VSãã£ãŒã«ãã«ãã£ãŠæ±ºå®ãããŸãã ãããã£ãŠã IntCtl.VS = 1ã®å Žåããã®ãªãã»ããã¯0x20ã«ãªããŸãã

äŸ
èµ·åé åº
- main.cãã¡ã€ã«ã«[ S2 ]ãèšå®ããå¿
èŠãããããšãé€ããŠãäžäœäºææ§ã¢ãŒãã®å ŽåãšãŸã£ããåãã§ãã
#define RUNTYPE VECTOR
ããã°ã©ã ãšã·ã¹ãã æ§æã®èª¬æ
- RTLã·ã¹ãã æ§æã¯ãäžäœäºææ§ã¢ãŒãã®æ§æãšäŒŒãŠããŸãã
- åãexceptions.Sãã¡ã€ã«ã䜿çšãããŸã[ S4 ã S5 ]ããã³å®å
šã«åäžã®ã¿ã€ããŒåæåé åº[ S0 ];
å²ãèŸŒã¿æäœã¯ã次ã®ããã«æ§æãããŸã[ S11 ]ïŒ
ããã°ã©ã ã®æäœæé ã¯ãã¿ã€ããŒå²ã蟌ã¿ïŒHW5ïŒã§ãã©ã°ã1ã€ã§ã¯ãªã2ã€ã®ããã°ã©ã å²ã蟌ã¿ïŒSW0ããã³SW1ïŒã«èšå®ãããåªå
é äœ[ S12 ]ã§åŠçãããããšãé€ããŠãåè¿°ãšãŸã£ããåãã§ãã
void __attribute__ ((interrupt, keep_interrupts_masked)) __mips_isr_hw5 () { MFP_RED_LEDS = MFP_RED_LEDS | 0x4; n++; mipsTimerReset(); mips32_biscr(CR_SINT0);
å²ã蟌ã¿SW0ãåŠçããã«ã¯ãå¥ã®ãã¯ã¿ãŒ[ S13 ]ã䜿çšãããŸãã
void __attribute__ ((interrupt, keep_interrupts_masked)) __mips_isr_sw0 () { MFP_RED_LEDS = MFP_RED_LEDS | 0x2; mips32_biccr(CR_SINT0);
- SW1ã¯ãäžäœäºææ§ã¢ãŒãã®å Žåãšåã_mips_general_exceptionã§åŠçãããŸãããéèŠãªè¿œå ããããŸãããã®é¢æ°ãžã®ç§»è¡ã¯ãããã»ããµãããã«ãªãã»ãã0x180ã«ãªã£ãããã§ã¯ãããŸããã å®è¡ã¯0x220ã«æž¡ãããŸããã mips_isr_sw1颿°ã¯å®£èšããã ã general_exceptionã«ç§»è¡ããŸãïŒããã¯ãäžèšã®exceptions.Sã®ã¢ã»ã³ãã©ã³ãŒãã«ãã£ãŠå®è¡ãããŸãïŒ[ S14 ]ã
- ããã°ã©ã ã®çµæã¯ã次ã®ãããªä¿¡å·å³ã§ãã

å€éšå²ã蟌ã¿ã³ã³ãããŒã©ãŒã¢ãŒã
å€éšå²ã蟌ã¿ã³ã³ãããŒã©ãŒ

å€éšå²ã蟌ã¿ã³ã³ãããŒã©ãŒã¢ãŒãã§ã®æäœã®èª¬æã«é²ãåã«ããã®ã¢ãžã¥ãŒã«ãããã»ããµãŒã³ã¢ãšã©ã®ããã«çžäºäœçšãããããããŠãããäœã§ããããæ€èšããŸãã
ã³ã³ãããŒã©ã®ã¿ã¹ã¯ã¯ãå€éšå²ã蟌ã¿ãç»é²ãããããã®æé«åªå
é äœã«é¢ããæ
å ±ããã¹ã«çºè¡ããããšã§ãïŒå²ã蟌ã¿ã€ã³ã¿ãŒãã§ã€ã¹ïŒã
- SI_EICPresent-å€éšå²ã蟌ã¿ã³ã³ãããŒã©ãŒã®ååšã®å
åã
- SI_Int [7ïŒ0] -èŠæ±ãããå²ã蟌ã¿ã®åªå
床ã
- SI_EISS [3ïŒ0] -ã·ã£ããŠã»ããçªå·ã®æ°ãå®çŸ©ããŸããMIPSfpgaã®å Žå-䜿çšãããŸããã
- SI_EICVector-èŠæ±ãããå²ã蟌ã¿ã®ãã¯ãã«çªå·ã
- SI_Offset [17ïŒ1] -èŠæ±ãããå²ã蟌ã¿ã®ãªãã»ããã
次ã®å²ã蟌ã¿èŠæ±ãåŠçã«åã蟌ããšãããã»ããµãŒã¯ã³ã³ãããŒã©ãŒã«æ¬¡ã®ããã«äŒããŸãã
- SI_IAckåäžãã«ã¹ã¯ãå²ã蟌ã¿åŠçã®éå§ãéç¥ããŸãã
- SI_IPL [7ïŒ0] -åŠçãããå²ã蟌ã¿ã®åªå
床ã
- SI_IVN [5ïŒ0] -åŠçãããå²ã蟌ã¿ã®ãã¯ãã«çªå·ã
- SI_ION [17ïŒ0] -åŠçãããå²ã蟌ã¿ã®ãªãã»ããã
ã³ã³ãããŒã©ãšããã»ããµã³ã¢éã®äžè¬çãªçžäºäœçšã以äžã«ç€ºããŸãã

次ã®ããšãèæ
®ããå¿
èŠããããŸãã
- ãªããªã ãã®å Žåãå²ã蟌ã¿ã®åªå
é äœä»ãã¯ããã»ããµã³ã¢ã«ãã£ãŠå®è¡ãããªããããããã«ãã£ãŠçæããããã¹ãŠã®å²ã蟌ã¿ã¯ãã³ã³ãããŒã©å
¥åã«ãéãããå¿
èŠããããŸãïŒã·ã¹ãã ã¿ã€ããŒå²ã蟌ã¿ïŒ SI_TimerIntä¿¡å·ã Cause.TIãã©ã°ïŒãããã°ã©ã å²ã蟌ã¿ïŒ SI_SWIntä¿¡å·[1ïŒ0] ã Cause.IP1ãã©ã°- IP0 ïŒããã³ãã®ä»-[ D2 ]ã«ãã詳现ã«åæ ãããŸãã
- ã«ãŒãã«ããã³ãã©ãŒã®ãªãã»ããã¢ãã¬ã¹ãèšç®ããæ¹æ³ïŒ SI_Offset [17ïŒ1]ããçŽæ¥ååŸãããã SI_EICVectorãã倿ãããã¯ãçŸåšã¢ã¯ãã£ãã«ãªã£ãŠãããªãã·ã§ã³ãOption 1-Explicit Vector NumberããŸãã¯ãOption 2-Explicit Vector Offsetãã«ãã£ãŠæ±ºãŸããŸãã æåã®å Žå-64åã®ãã¯ã¿ãŒã䜿çšå¯èœã§ãã2çªç®ã®å Žå-ããŒã¹ãã256Kã®ã¡ã¢ãªãŒãã«ãŠã³ãããããã¯ã¿ãŒãé
眮ããŸããããã¯ãå²ã蟌ã¿ã®æ°ã«é¢ããŠæãèŠæ±ã®å³ããã¿ã¹ã¯ã«ãååãªã¯ãã§ãã MIPS microAptivã³ã¢ã®åçšé¡§å®¢ã¯ãã°ã©ãã£ã«ã«ã³ã³ãã£ã®ã¥ã¬ãŒã¿ãŒã§ãã®ãã©ã¡ãŒã¿ãŒãèšå®ããŸãã MIPSfpgaã§ã¯äœ¿çšã§ããŸãããããã®èšå®ã¯ãã¡ã€ã«m14k_cpz_eicoffset_stub.vïŒ84ã§å®è¡ã§ããŸãã ãããè¡ãã«ã¯ã eic_offsetå€ã1ã«çœ®ãæããŸãã
assign eic_offset = 1'b1
- ã³ã³ãããŒã©ã«ãã£ãŠèŠæ±ãããå²ã蟌ã¿ãåŠçããæ±ºå®ã¯ãæå°èš±å®¹åªå
åºŠïŒ Status.IPLã§èšå®ïŒã«åºã¥ããŠããã»ããµã«ãã£ãŠè¡ãããæå®ãããåªå
床ããäœãåªå
床ãæã€ãã¹ãŠã®å²ã蟌ã¿ã¯ç¡èŠãããŸãã
MIPSfpga-pluså²ã蟌ã¿ã³ã³ãããŒã©ãŒ
äž»ãªæ©èœïŒ
- MIPSfpga-plus [ L3 ]ã·ã¹ãã ã®äžéšã§ãã
- æå€§64åã®å²ã蟌ã¿ã䜿çšå¯èœã§ããã®æ£ç¢ºãªæ°ã¯æ§æãã¡ã€ã«ïŒmfp_eic_core.vhïŒã§èšå®ã§ããŸã[ S15 ]ã
- 2ã€ã®ã¿ã€ãã®å
¥åãã£ãã«ãå®è£
ãããŠããŸããçŽæ¥ïŒçŽæ¥ãã£ãã«ïŒãšæåºŠèšå®ïŒæ€åºãã£ãã«ïŒã§ãã ãŸããå²ã蟌ã¿èŠæ±ã®å
åã¯é«ä¿¡å·ã¬ãã«ã§ãã 2ã€ç®ã¯ããã®ãã©ã¡ãŒã¿ãŒãæ§æã§ããŸããããã³ãããã©ãŒã«ãäœä¿¡å·ã¬ãã«ãä¿¡å·å€åã
- ã¿ã€ãã»ã³ã¹ãã£ãã«ã®ãã£ãã«ã®æå€§æ°ã¯32ã§ãã
- ã³ã³ãããŒã©ãŒã®ã·ã³ãã«ãã«ãããå¿
èŠã«å¿ããŠãããã«å€ãã®å²ã蟌ã¿ãå®è£
ã§ããŸã;ãã®ããã«ã¯ãã³ãŒãã«å°ããªå€æŽãå ããå¿
èŠããããç¹ã«æ§æã¬ãžã¹ã¿ã远å ããå¿
èŠããããŸãã
- ã³ã³ãããŒã©ã®å
¥åã§åä¿¡ããããã¹ãŠã®ä¿¡å·ã¯åæããå¿
èŠããããŸãã
- ããªãã·ã§ã³1-æç€ºçãªãã¯ãã«çªå·ãã¢ãŒããšããªãã·ã§ã³2-æç€ºçãªãã¯ãã«ãªãã»ãããã¢ãŒãã®äž¡æ¹ã§äœæ¥ããµããŒãããŸãã
- ããã»ããµã³ã¢ã«ããåŠçã®éå§æã«å²ã蟌ã¿ãã©ã°ãèªåçã«äžããæ©èœã¯ãããã°ã©ã ã§æ§æã§ããŸãã
- å¿
èŠã«å¿ããŠãã³ã³ãããŒã©ãŒãåããå¥ã®ãµã³ãããã¯ã¹ãgithubã§å©çšã§ããŸãããã®å Žåããã®äœæ¥ã¯ãããã°ãããŸã[ L6 ]ã
- ã³ã³ãããŒã©ãŒã¯äžäœã¬ãã«ã®MIPSfpga-plusïŒmfp_system.vïŒã EIC_inputã§ããã»ããµãŒã³ã¢ã«æ¥ç¶ãããŸã-å²ã蟌ã¿ãœãŒã¹ããã®ä¿¡å·ãI / Oã®æ®ãã¯ããã»ããµãŒå²ã蟌ã¿ã€ã³ã¿ãŒãã§ã€ã¹[ S21 ]ãåç
§ããŸãã
`ifdef MFP_USE_IRQ_EIC .EIC_input ( EIC_input ), .EIC_Offset ( SI_Offset ), .EIC_ShadowSet ( SI_EISS ), .EIC_Interrupt ( SI_Int ), .EIC_Vector ( SI_EICVector ), .EIC_Present ( SI_EICPresent ), .EIC_IAck ( SI_IAck ), .EIC_IPL ( SI_IPL ), .EIC_IVN ( SI_IVN ), .EIC_ION ( SI_ION ), `endif
ã³ã³ãããŒã©ãŒã«ã¯æ¬¡ã®ãã¡ã€ã«ãå«ãŸããŸãã
- mfp_eic_core.v-ã³ã³ãããŒã©ãŒã³ã¢[ S17 ];
- mfp_eic_core.vh-ã¡ã€ã³æ§æãã¡ã€ã«ïŒå
éšã®ã³ã¡ã³ããåç
§ïŒ[ S15 ];
- mfp_eic_handler.v-å²ã蟌ã¿çªå·ããã¯ãã«/ãªãã»ããã«ããŸãã¯ãã®éã«å€æããããã®ããžãã¯ãå«ãŸããŠããŸãïŒå
éšã®ã³ã¡ã³ããåç
§ïŒ[ S18 ];
- mfp_eic_priority_encoder.v-éå±€çãªïŒããªãŒã®ãããªïŒçµç¹ãæã€åªå
é äœãšã³ã³ãŒããŒ[ S19 ];
- mfp_ahb_lite_eic.vã¯ãAHB-Liteãã¹[ S20 ]ãšã®ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããæäžäœã¢ãžã¥ãŒã«ã§ãã
ã³ã³ãããŒã©ãŒæ§æã®äžè¬çãªèãæ¹ã圢æããããã«ãæ§æã¬ãžã¹ã¿ãŒãšãã®å®å
šãªèª¬æã[ D5 ]ã«ãªã¹ãããŸãã EICR ã EISMSK_0ããã³EISMSK_1ãé€ããã¹ãŠã®ã¬ãžã¹ã¿ã§ã¯ããããçªå·ãã³ã³ãããŒã©ãŒã®å
¥åçªå·ã«å¯Ÿå¿ãããšæ³å®ãããŠããŸãã ãããã£ãŠãããšãã°ã EIFR_0 [3] = 1-å
¥å3ã¯æªåŠçã®å²ã蟌ã¿ãäºæããããšãæå³ããŸãã

äŸ
èµ·åé åº
ããã°ã©ã ãšã·ã¹ãã æ§æã®èª¬æ
RTLããããŒãã¡ã€ã«ã§èšå®ãããèšå®ã¯ãæ¬¡ã®æ§æã«ã€ãªãããŸã[ S16 ]ïŒ
wire [ `EIC_CHANNELS - 1 : 0 ] EIC_input; assign EIC_input[`EIC_CHANNELS - 1:8] = {`EIC_CHANNELS - 6 {1'b0}}; assign EIC_input[7] = SI_TimerInt; assign EIC_input[6] = 1'b0; assign EIC_input[5] = uart_interrupt; assign EIC_input[4:2] = 3'b0; assign EIC_input[1] = SI_SWInt[1]; assign EIC_input[0] = SI_SWInt[0]; assign SI_IPTI = 3'h0;
- å²ã蟌ã¿ã€ã³ã¿ãŒãã§ã€ã¹ãã¹ä¿¡å·ã¯ãäžèšã®ããã«mfp_ahb_lite_eicã¢ãžã¥ãŒã«ã«ãã£ãŠåŠçãããŸãã
exceptions.Sãã¡ã€ã«ã¯ãå²ã蟌ã¿ã®ååãšçªå·ãé€ããŠãåã®2ã€ã®äŸã«äŒŒãŠããŸãããããã£ãŠãææ°ã®HW63ã¯ãªãã»ãã0x9E0 [ S22 ]ã«ãããŸãã
.org 0x9E0 .weak __mips_isr_eic63 __isr_vec_eic63: la $k1, __mips_isr_eic63 beqz $k1, __general_exception nop jr $k1 nop
- ã³ã³ãããŒã©ã®ã¬ãžã¹ã¿ãæäœããããã«å¿
èŠãªãã¹ãŠã®ãã¯ãã¯ãeic.hãã¡ã€ã«ã«è»¢éãããŸã[ S23 ]ã
- main.cã®ã¿ã€ããŒã®åæåã¯ã以åãšåãæ¹æ³ã§å®è¡ãããŸãã
å²ã蟌ã¿ã®åæå[ S24 ]ïŒ
- RTL : interrupt_sence â [ S28 ], interrupt_channel â EIFR [ S29 ]. priority_encoder â EIC_input , [ S19 ]. handler_params_encoder [ S18 ], /;
, (Option 2 â Explicit Vector Offset), (m14k_cpz_eicoffset_stub.v), mfp_eic_core.vh [ S15 ]
`define EIC_USE_EXPLICIT_VECTOR_OFFSET
- / , .. , mfp_eic_handler.v IntCtl.VS = 1 (32 ) [ S25 ];
, [ S26 ]:
ISR(IH_SW0) { MFP_RED_LEDS = MFP_RED_LEDS | 0x1; mips32_biccr(CR_SINT0);
- ISR EH_GENERAL eic.h [ S27 ];
- :


, , .. [ L7 ]. .
[ D3 ] , :
void __attribute__ ((interrupt)) v0 (); void __attribute__ ((interrupt, use_shadow_register_set)) v1 (); void __attribute__ ((interrupt, keep_interrupts_masked)) v2 (); void __attribute__ ((interrupt, use_debug_exception_return)) v3 (); void __attribute__ ((interrupt, use_shadow_register_set, keep_interrupts_masked)) v4 (); void __attribute__ ((interrupt, use_shadow_register_set, use_debug_exception_return)) v5 (); void __attribute__ ((interrupt, keep_interrupts_masked, use_debug_exception_return)) v6 (); void __attribute__ ((interrupt, use_shadow_register_set, keep_interrupts_masked, use_debug_exception_return)) v7 (); void __attribute__ ((interrupt("eic"))) v8 (); void __attribute__ ((interrupt("vector=hw3"))) v9 ();
:
- use_shadow_register_set , .. MIPSfpga;
- interrupt("vector=hw3") ;
- , (interrupt, keep_interrupts_masked), :
(interrupt, keep_interrupts_masked) void __attribute__ ((interrupt, keep_interrupts_masked)) __mips_isr_sw0 () { 80001544: 401b7000 mfc0 k1,c0_epc 80001548: 27bdfff0 addiu sp,sp,-16 8000154c: afbb000c sw k1,12(sp) 80001550: 401b6000 mfc0 k1,c0_status 80001554: afbb0008 sw k1,8(sp)
(interrupt) void __attribute__ ((interrupt)) __mips_isr_hw5 () { 80001588: 401a6800 mfc0 k0,c0_cause 8000158c: 401b7000 mfc0 k1,c0_epc 80001590: 27bdfff0 addiu sp,sp,-16 80001594: afbb000c sw k1,12(sp) 80001598: 401b6000 mfc0 k1,c0_status // k0 cause.ip7-ip2 8000159c: 001ad282 srl k0,k0,0xa 800015a0: afbb0008 sw k1,8(sp) // k1 cause.ip6-ip2 status.im7-im2 800015a4: 7f5b7a84 ins k1,k0,0xa,0x6 // k1 status.exl,.erl,.um; // .ie ( 1) 800015a8: 7c1b2044 ins k1,zero,0x1,0x4 // status 800015ac: 409b6000 mtc0 k1,c0_status 800015b0: afbe0004 sw s8,4(sp) 800015b4: 03a0f025 move s8,sp ... } 800015b8: 03c0e825 move sp,s8 800015bc: 8fbe0004 lw s8,4(sp) //disable interrupts (status.ie = 0) 800015c0: 41606000 di 800015c4: 000000c0 ehb 800015c8: 8fbb000c lw k1,12(sp) // epc 800015cc: 409b7000 mtc0 k1,c0_epc 800015d0: 8fbb0008 lw k1,8(sp) 800015d4: 27bd0010 addiu sp,sp,16 // status 800015d8: 409b6000 mtc0 k1,c0_status 800015dc: 42000018 eret
- , keep_interrupts_masked, , . .
è¬èŸ
« », Imagination Technologies YuriPanchul MIPSfpga.
åç
§è³æ
[L1] â ;
[L2] â MIPSfpga ;
[L3] â MIPSfpga-plus github ;
[L4] â FPGA Terasic DE10-Lite ;
[L5] â Embedded Linux System Design and Development P. Raghavan, Amol Lad, Sriram Neelakandan ( );
[L6] â ahb_lite_eic github ;
[L7] â Codescape MIPS SDK ;
ããã¥ã¡ã³ã
[D1] â MIPS32 microAptiv UP Processor Core Family Integrator's Guide ;
[D2] â MIPS32 microAptiv UP Processor Core Family Software User's Manual ;
[D3] â Codescape GNU Tools for MIPS Programmer's Guide ;
[D4] â MIPS32 Architecture For Programmers Volume III: The MIPS32 Privileged Resource Architecture ;
[D5] â MIPSfpga+ External Interrupt Controller ;
[D6] â MIPS32 microAptiv UP Processor Core Family Datasheet ;
[P0] â MIPS 32 microAptiv UP Core Block Diagram (: D6 );
[P1] â ;
[P2] â MIPS. ();
[P3] â (: L5 );
[P4] â . ();
[P5] â (: D2 );
[P6] â (: D2 );
[P7] â (: D2 );
[P8] â . ();
[P9] â (: D2 );
[P10] â (: D1 );
[P11] â (: L6 );
[P12] â , ();
[P13] â , ().
[S0] â ;
[S1] â mipsfpga-plus ;
[S2] â 06_timer_irq ;
[S3] â mipsfpga-plus ;
[S4] â ;
[S5] â ;
[S6] â ;
[S7] â ;
[S8] â ;
[S9] â ;
[S10] â main 06_timer_irq ;
[S11] â ;
[S12] â ;
[S13] â ;
[S14] â ;
[S15] â mipsfpga-plus ;
[S16] â mipsfpga-plus ;
[S17] â ;
[S18] â ;
[S19] â ;
[S20] â AHB-Lite ;
[S21] â ;
[S22] â HW63 ;
[S23] â ;
[S24] â ;
[S25] â å€éšå²ã蟌ã¿ã®ã³ã³ãããŒã©ãŒã¢ãŒãã§ã®ãã¯ãã«ãªãã»ããå¢åã®èšå®ã
[S26]- å€éšå²ã蟌ã¿ã®ã³ã³ãããŒã©ãŒã¢ãŒãã§ã®å²ã蟌ã¿ãã³ãã©ãŒã
[S27]- ãã¯ãISRããã³EH_GENERAL ;
[S28]- ã¢ãžã¥ãŒã«interrupt_sence ;
[S29]-interrupt_channel ã¢ãžã¥ãŒã«ã