åå°äœç£æ¥ã¯ããSystem on Crystalãã¬ãã«ã®è¶ å°ååè·¯ã®éç©åºŠãéæããæšæº0.18ÎŒm以äžã®æè¡ããã»ã¹ãç¿åŸããŠããããããã®ãããªè¶ å°ååè·¯ã«å®è£ ãããæ©èœãããã¯ã®å éšãžã§ã€ã³ãã«ã€ããŠå€ãã®ä»æ§ãç»å ŽããŸããã ã»ãšãã©ã®å Žåããããã®ãžã§ã€ã³ãã¯ãAMBA APBãAHBãAXIããŠã£ãã·ã¥ããŒã³ãOCP [1ã2ã3ã4ã5ã6]ãªã©ã®åæã·ã¹ãã ãã¹ã§è¡šãããŸãã ãã¹ãšã¯é¢ä¿ã®ãªãå ã®ããããžãææ¡ãããŸãããããšãã°ãã¯ãªã¹ã¿ã«ãããã¯ãŒã¯-NOCïŒNetworks-On-ChipïŒ[7]ã§ãã
ãã®åºçç©ã®äž»é¡é åã¯ãVLSIãŸãã¯FPGAãããã®å¢çãè¶ ããããšãªããã³ã³ãã¥ãŒãã£ã³ã°ããã€ã¹ã®æ©èœãããã¯ã®é¢ä¿ã®æ§ç¯ã«éå®ãããŠããŸãã ãã®ãããªæ¥ç¶ã®ç¹åŸŽã¯ã亀æãããã³ã«ã«é¢ä¿ããä¿¡å·ç·ã®æ°ã«å€§ããªå¶éããªãããšã§ãã ãã®æ©èœã¯ãæ°Žæ¶ããªã¥ãŒã ã«è¿œå ã®ä¿¡å·ãå°å ¥ãããšããã©ã³ãžã¹ã¿ãªãœãŒã¹ãå æããè«çåè·¯ãå€§å¹ ã«ç°¡çŽ åãããäžæ¹ããã¬ãŒã¹ãªãœãŒã¹ã¯ããã»ã©å€ããªãããã§ãã ãŸããRTLã¬ãã«ã¢ãã«ã§æ瀺çã«èšè¿°ãããäžéšã®ä¿¡å·ã¯ãçµã¿åããããžãã¯ã®æé©åã«ãããåæåè·¯ããã³æè¡èŠçŽ ã®ã¬ãã«ã®æ¥ç¶ãªã¹ãã§å©çšã§ããªãå Žåãããããšã«æ³šæããŠãã ããã
ãããå ã·ã¹ãã ãã¹ã®æ¢åã®ä»æ§ã®ã»ãšãã©ã¯ãé 延ãã©ã³ã¶ã¯ã·ã§ã³ããããã¯è»¢éïŒããŒã¹ãã¢ãŒãïŒãããªãã§ããå¯èœãªèªã¿åãããã©ã³ã¶ã¯ã·ã§ã³ã®äžæ¢ãèŠæ±ã®åè©Šè¡ãå®çŸ©ããé«åºŠãªãããã³ã«ã䜿çšããŠããŸãã ãã®æ©èœã«ã¯ããã¹ãŠã®ãã¹ãšãŒãžã§ã³ãããã®ãµããŒããå¿ èŠã§ãããå¶åŸ¡ãã·ã³ã®ã¹ã€ããã³ã°ã¢ã«ãŽãªãºã ãå€§å¹ ã«è€éã«ãªããŸãããå€ãã®å Žåã¯äœ¿çšãããŸããã ç¹ã«ãæ°Žæ¶ã®äœéãŸãã¯åçŽãªåšèŸºãããã¯ãžã®ã¢ã¯ã»ã¹ãæŽçããå Žåã¯åé·ã§ãã
ããšãã°ãWishboneãã¹[5]ãªã©ã®ä»æ§ã§ã¯ããšãŒãžã§ã³ããçžäºã«æ¥ç¶ããåçã¯èŠå¶ãããŠããããã€ãã·ãšãŒã¿ãŒïŒã€ãã·ãšãŒã¿ãŒïŒãšãšã°ãŒãã¥ãŒã¿ãŒïŒã¿ãŒã²ããïŒã®ã€ã³ã¿ãŒãã§ãŒã¹ã®ã¿ãå®çŸ©ãããŠããŸãã
æ¢åã®ã€ã³ã¿ãŒãã§ãŒã¹ã®äž»ãªå©ç¹ã¯ãéçºããã³æ€èšŒãããå¹ åºãæ©èœãããã¯ïŒIPã³ã¢ïŒã§ãã
西æŽã§ãã£ãšåã«éçºãããæ°Žæ¶ãã¹ã·ã¹ãã çšã®æšæºãããã³ã«ã䜿çšããããšã«æ £ããŠããå€ãã®éçºè ãçåãæ±ãå¯èœæ§ããããŸãã æåã«ãæ°ããä»æ§ãäœæããäž»ãªç®æšã¯ããã¹ãŠã®ãžã§ã€ã³ãããã¹ãžã®æ¥ç¶ã«é¢ãããšãŒãžã§ã³ãã®å éšçµç¹ãããã³ãã¹èªäœã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã®æ§ç¯æ¹æ³ã管çããæãåçŽãªåæã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ãèšè¿°ããããšã§ããã 第äºã«ãå ã®ä»æ§ã¯è±èªã§ã¯ãªããã·ã¢èªã§äœæããå¿ èŠããããŸãã
éçºç®æšãå®çŸ©ãããµããžã§ã¯ãé åãå¶éããåŸãã€ã³ã¿ãŒãã§ã€ã¹ä»æ§ã®çŽæ¥èª¿æ»ã«ç§»ããŸãã
ããŒãžã§ã³1.0ã®åçŽãªãšã°ãŒãã¥ãŒã¿ãŒ-Simple Target Interface v.1.0ïŒä»¥é-STIïŒã®ãžã£ã³ã¯ã·ã§ã³ã¯ã1ã€ã®FPGAæ§æãããžã§ã¯ããŸãã¯VLSIãããïŒä»¥é-ãããžã§ã¯ãïŒã®ããªã¥ãŒã å ã®ããã€ãã®æ©èœãããã¯ã®æ¥ç¶ãæäŸããè«çä¿¡å·ãšå¯Ÿè©±ãããã³ã«ã®ã»ããã§ãã
ãããžã§ã¯ãèšè¿°ã®RTLã¢ãã«ã§ã¯ãSTIã€ã³ã¿ãŒãã§ã€ã¹ã®æ°ã«å¶éã¯ãªããåæã«ãäºãã«ç¬ç«ããŠäžŠè¡ããŠåäœã§ããŸãã ãããã®åã€ã³ã¿ãŒãã§ã€ã¹ã¯ã以éSTIã»ã°ã¡ã³ããšåŒã°ããŸãã
åãSTIã»ã°ã¡ã³ãå ã®çžäºäœçšã¯1ã€ã®ãããžã§ã¯ãåæãã¡ã€ã³ã«å®è£ ãããŸããã€ãŸãã1ã€ã®STIã»ã°ã¡ã³ãã§æ¥ç¶ãããã€ãã·ãšãŒã¿ãŒãšãã¹ãŠã®ã¢ãŒãã£ã¹ãã«åäžã®ã¯ããã¯ä¿¡å·ïŒCLKïŒã䜿çšããŸãã
å ±éSTIã»ã°ã¡ã³ãã«ãã£ãŠæ¥ç¶ããããããžã§ã¯ãæ©èœãããã¯ã®ã»ããã«ã¯ã1ã€ïŒããã³1ã€ã®ã¿ïŒã®äº€æã€ãã·ãšãŒã¿ãŒãšäº€æãšã°ãŒãã¥ãŒã¿ãŒã®ã»ãããå«ãŸãããããã¯ãã®ã»ããã®æ®ãã®ãããã¯ã«ãã£ãŠè¡šãããŸãã
STIã€ã³ã¿ã©ã¯ã·ã§ã³æ¹åŒã¯ãã³ã³ãã¥ãŒãã£ã³ã°ããã€ã¹ã®ããã»ããµã®ã¢ãã¬ã¹ã¹ããŒã¹ã®1ã€ã«ããç¹å®ã®ã¢ãã¬ã¹ã§å©çšå¯èœãªããŒã¿ã¯ãŒãã®æžã蟌ã¿ãšèªã¿åãã§æ§æãããŸãã ã¯ãŒãå¹ ã¯ãç¹å®ã®STIã»ã°ã¡ã³ãçšã«éžæãããã€ã³ã¿ãŒãã§ã€ã¹å®è£ ã®ããŒã¿ãã¹ã®ããã深床ã«ãã£ãŠæ±ºå®ããã8ã16ã32ããŸãã¯64ãããã«ããããšãã§ããŸãã
ããŒã¿ã®åäžã¯ãŒãã®æžã蟌ã¿ãŸãã¯èªã¿åãã¯ãSTIã€ã³ã¿ãŒãã§ãŒã¹ãä»ãã亀æãµã€ã¯ã«ïŒä»¥éããµã€ã¯ã«ãšåŒã³ãŸãïŒã§ãã
STIããŒã¿äº€æã¯ãã»ã°ã¡ã³ãå ã®äº€æãéå§ããå¯äžã®ãããã¯ïŒä»¥éãã€ãã·ãšãŒã¿ãŒãšåŒã³ãŸãïŒããå§ãŸããŸãã å ±éSTIã»ã°ã¡ã³ãã«æ¥ç¶ããã亀æãšã°ãŒãã¥ãŒã¿ãŒïŒä»¥äžããšã°ãŒãã¥ãŒã¿ãŒãšåŒã¶ïŒã®ããã€ãã®ãããã¯ãååšããå ŽåããããŸãã å®è¡è ã®æ倧æ°ã¯ãéçºè ã«ããVLSIãããžã§ã¯ãã®å®è£ ã«äŸåãããã®ãããã³ã«ã«ãã£ãŠèŠå¶ãããŸããã ãã ããããã©ãŒãã³ã¹ã®æé©åã®ããã8人ãè¶ ããã¢ãŒãã£ã¹ãã1ã€ã®STIã»ã°ã¡ã³ãã«æ¥ç¶ããããšã¯ãå§ãããŸããã STIã»ã°ã¡ã³ãã«2ã€ä»¥äžã®ããã©ãŒããŒãååšããå Žåãèªã¿åããã¹ã§ã®ããŒã¿åãæ¿ããšå¶åŸ¡ä¿¡å·ã®åãæ¿ãã¯ãçµã¿åããåè·¯ãçµã¿åãããŠå®è¡ãããŸãã è€æ°ã®ã¢ãŒãã£ã¹ãããéžæãããã¢ãã¬ã¹ã¹ããŒã¹ïŒSTIã³ãã³ãïŒã«åºã¥ããŠããŸãã¯åèšã¢ãã¬ã¹ã¹ããŒã¹ã®éã§éžæãããã¢ãã¬ã¹ç¯å²ã«åºã¥ããŠåãæ¿ããããŸãã
æžã蟌ã¿ãµã€ã¯ã«ã§ã¯ãã€ãã·ãšãŒã¿ãŒãããšã°ãŒãã¥ãŒã¿ãŒã«ããŒã¿ã転éãããèªã¿åããµã€ã¯ã«ã§ã¯ãå察æ¹åã«ããŒã¿ã転éãããŸãã åæèªã¿åãããã³æžã蟌ã¿æäœã®è€åãµã€ã¯ã«ããã®STIãããã³ã«ã¯èš±å¯ããŸããã
ã¢ãã¬ã¹ç©ºéã®éžæã¯ãSTIã³ãã³ãïŒS_CMDïŒã§ãšã³ã³ãŒããããŸãã éžæããã¢ãã¬ã¹ç©ºéã®éã®ã¢ãã¬ã¹ã¯ãã¢ãã¬ã¹ãã¹ïŒS_ADDRïŒã«æ²¿ã£ããã¹ãŠã®ãµã€ã¯ã«ã§ã€ãã·ãšãŒã¿ãŒãããšã°ãŒãã¥ãŒã¿ãŒã«è»¢éãããŸãã
ã¢ãã¬ã¹ãã¹ã®å¹ ã¯ãéçºè ã«ãããããžã§ã¯ãã®å®è£ ã«äŸåãããã®ãããã³ã«ã«ãã£ãŠèŠå¶ãããŸããã äžéšã®æ©èœãããã¯ã§ã¯ãè«è² æ¥è ãã·ã¹ãã ã¢ãã¬ã¹ç©ºéã®1ã€ã®çµã¿åããïŒæžã蟌ã¿çšã«1ã€ã®ã¬ãžã¹ã¿ãŒããã³/ãŸãã¯èªã¿åãçšã«1ã€ã®ã¬ãžã¹ã¿ãŒïŒã䜿çšããå ŽåãSTIãžã£ã³ã¯ã·ã§ã³ã®ã¢ãã¬ã¹ãã¹ãååšããªãå ŽåããããŸãã
ãã·ã¹ãã ãªã³ããããã¯ã©ã¹ïŒSoCïŒã®VLSIãããã®äŸã§ã®STIã€ã³ã¿ãŒãã§ã€ã¹ã®å Žæã¯ãå³2ã«ç€ºããããã¯å³ã«ç€ºãããŠããŸãã 1. STIã»ã°ã¡ã³ãã«é¢é£ããé¢ä¿ã¯ç°è²ã§åŒ·èª¿è¡šç€ºãããŸãã
å³ 1. VLSIãããã®ããªã¥ãŒã å ã®STIã€ã³ã¿ãŒãã§ã€ã¹ã®å Žæ
STIãžã£ã³ã¯ã·ã§ã³ã䜿çšãããšãããŒã«ã«ãã¹ã€ãã·ãšãŒã¿ãŒæ©èœã®ãµããŒããå¿ èŠãšããªããããžã§ã¯ãæ©èœãããã¯ãç°¡åã«æ¥ç¶ã§ããŸãã STIãããã³ã«ã¯ãåã¯ããã¯ãµã€ã¯ã«ã§ããŒã¿ã¯ãŒããèªã¿æžãããæ©èœãæäŸããåãããã深床ãšã¯ããã¯åšæ³¢æ°ã§ãå®å šã«æ©èœããã·ã¹ãã ãã¹ã®ã¬ãã«ã§åž¯åå¹ ãæäŸããŸãã
STIãšã°ãŒãã¥ãŒã¿ãŒã®åå ã«ããããŒã¿é åã®ãããã¯è»¢éã¯ãSTIã»ã°ã¡ã³ãããªããžã®äžéšãšããŠå®è£ ããããã€ã¬ã¯ãã¡ã¢ãªã¢ã¯ã»ã¹ããã»ããµ-DMAã«ãã£ãŠããŸãã¯STIã»ã°ã¡ã³ãããªããžã«ã¢ã¯ã»ã¹ããããŒã«ã«ã·ã¹ãã ãã¹ã«æ¥ç¶ãããã€ãã·ãšãŒã¿ãŒãæã€ä»ã®ãããã¯ã«ãã£ãŠå®è¡ã§ããŸãã
STIã»ã°ã¡ã³ãã®ããªã¥ãŒã å ã®ãšãŒãžã§ã³ãã®éä¿¡ããããžãŒãèæ ®ããŠãã ããã
STIã»ã°ã¡ã³ãã®çžäºäœçšã¯ãè¡š1ã«ç€ºãä¿¡å·ã»ããã䜿çšããŸãã
è¡š1
8ããŒãž ããŒã¿ãã¹ | 16ããŒãž ããŒã¿ãã¹ | 32ããŒãž ããŒã¿ãã¹ | 64ããŒãž ããŒã¿ãã¹ | ã€ãã·ãšãŒã¿ãŒ | åºæŒè |
---|---|---|---|---|---|
S_EX_REQ | S_EX_REQ | S_EX_REQ | S_EX_REQ | ã¯ãšãªãªã¯ãšã¹ã | å ¥åããªã¯ãšã¹ã |
S_ADDR [n-1ïŒ0] / S_ADDR_0 | S_ADDR [n-1ïŒ1] / S_ADDR_1 | S_ADDR [n-1ïŒ2] / S_ADDR_2 | S_ADDR [n-1ïŒ3] / S_ADDR_3 | ã¢ãã¬ã¹åºå | äœæå ¥å |
ãã | S_NBE [1ïŒ0] | S_NBE [3ïŒ0] | S_NBE [7ïŒ0] | ãã€ã解å床åºå | ãã€ã解ååºŠå ¥å |
S_CMD [2ïŒ0] | S_CMD [2ïŒ0] | S_CMD [2ïŒ0] | S_CMD [2ïŒ0] | ã³ãã³ãã³ãŒãåºå | ã³ãã³ãã³ãŒãå ¥å |
S_D_WR [7ïŒ0] | S_D_WR [15ïŒ0] | S_D_WR [31ïŒ0] | S_D_WR [63ïŒ0] | æžã蟌ã¿ããŒã¿åºå | èšé²çšããŒã¿å ¥å |
S_EX_ACK | S_EX_ACK | S_EX_ACK | S_EX_ACK | 確èªãã°ã€ã³ | 確èªåºå |
S_D_RD [7ïŒ0] | S_D_RD [15ïŒ0] | S_D_RD [31ïŒ0] | S_D_RD [63ïŒ0] | ããŒã¿å ¥åã®èªã¿åã | ããŒã¿åºåã®èªã¿åã |
CLK | CLK | CLK | CLK | ã¯ããã¯å ¥å | ã¯ããã¯å ¥å |
Rst | Rst | Rst | Rst | ã·ã¹ãã ãªã»ããå ¥å | ã·ã¹ãã ãªã»ããå ¥å |
STIãšã°ãŒãã¥ãŒã¿ãŒã«ããããŒããŠã§ã¢å²ã蟌ã¿èŠæ±ã®ã·ã°ãã«ã«ã¯ãSTIã»ã°ã¡ã³ãã«é¢é£ããªããµã€ããã³ãä¿¡å·ã䜿çšã§ããŸãããã®å¶åŸ¡é åºã¯ãåãããžã§ã¯ãã®éçºè ã«ãã£ãŠå¶åŸ¡ãããŸãã
1ã€ã®STIã»ã°ã¡ã³ãã®ããªã¥ãŒã å ã®è«çä¿¡å·ã®æ¥ç¶ã®ããããžãå³5ã«ç€ºããŸãã 2.ãã®äŸã§ã¯ã2人ã®ããã©ãŒããŒã®åãæ¿ããããã³ããã©ãŒããŒãšã€ãã·ãšãŒã¿ãŒã®å ¥åãšåºåã®æ§æã瀺ãããŠããŸãã ããã©ãŒããŒã®è»¢æµã¯ãã¢ãã¬ã¹ã¹ããŒã¹ã2ã€ã®çããéšåã«åå²ããããšã«ãã£ãŠè¡ãããŸãã ãããã£ãŠãS_ADDR [n-1]ã¢ãã¬ã¹ã®é«äœãããã®äœã¬ãã«ã§ã¯ãã¿ãŒã²ããAãšã°ãŒãã¥ãŒã¿ãŒãéžæãããé«ã¬ãã«ã§ã¯ãã¿ãŒã²ããBãéžæãããŸãã ã¢ãã¬ã¹ã®çµã¿åããã ãã§ãªããã¢ãã¬ã¹ã¹ããŒã¹ãåé¢ããããã®ã³ãã³ãã³ãŒãããããã©ãŒããŒãéžæããããžãã¯ã«å«ããããšãã§ããŸãã
å³ 2. STIã»ã°ã¡ã³ãã®æ¥ç¶ããããž
STIã€ã³ã¿ãŒãã§ã€ã¹ã€ãã·ãšãŒã¿ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®ããããžã«ã¯ã次ã®å¶éã課ãããŸãã
- S_ADDRã¢ãã¬ã¹ã®åºåã«ã¯ãCLKä¿¡å·ã«åæããã¬ãžã¹ã¿åºåã®åœ¢åŒã®ãœãŒã¹ãå¿ èŠã§ãã ãããã£ãŠãã¯ããã¯ä¿¡å·ã®åäœãšããžããã®S_ADDRã®åºåã®é 延ã¯ãããªã¬ãŒT-coã®åºåé 延ïŒClock-to-Outputé 延ïŒã«çãããªããŸãã
- ã€ãã·ãšãŒã¿ãŒåºåä¿¡å·ã®æ®ãã¯ãå ¥åä¿¡å·S_EX_ACKããã³S_D_RDã«å¿çããªãçµã¿åããåè·¯ããŸãã¯ã¬ãžã¹ã¿ãŒã«ãã£ãŠçæã§ããŸãã
STIã€ã³ã¿ãŒãã§ã€ã¹ãšã°ãŒãã¥ãŒã¿ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®ããããžã«ã¯ã次ã®å¶éã課ããããŸãã
- ã«ãŒã確èªåºåS_EX_ACKã«ã¯ãCLKä¿¡å·ã«ãã£ãŠåæåãããã¬ãžã¹ã¿åºåã®åœ¢åŒã®ãœãŒã¹ãå¿ èŠã§ãã ãããã£ãŠãã¯ããã¯ä¿¡å·ã®åäœãšããžããã®åºåé 延S_EX_ACKã¯ãT-coããªã¬ãŒã®åºåé 延ïŒClock-to-Outputé 延ïŒã«çãããªããŸãã æžã蟌ã¿äº€æãµã€ã¯ã«ãšèªã¿åã亀æãµã€ã¯ã«ã§åŸ æ©ãµã€ã¯ã«ãå°å ¥ããªãå®è¡è ã®å Žåãé«ã¬ãã«å®æ°ã®åœ¢åŒã§S_EX_ACKä¿¡å·ãçæããããšãã§ããŸãã
- S_D_RDãã¹ã«åºåã¬ãžã¹ã¿ããªãå ŽåãããŒã¿èªã¿åããã¹ã®ãã«ããã¬ã¯ãµã¯ããšã°ãŒãã¥ãŒã¿ã®ããªã¥ãŒã å ã®å éšã¬ãžã¹ã¿ã®åºåïŒCLKä¿¡å·ã«åæïŒããŸãã¯ã¢ãã¬ã¹ãã¹S_ADDR [n-1ïŒk]ã®å ¥åãããã®ãµãã»ããã«ãã£ãŠå¶åŸ¡ããå¿ èŠããããŸãã
STIãžã£ã³ã¯ã·ã§ã³ã§ã®ã€ãã·ãšãŒã¿ãŒããã³ãšã°ãŒãã¥ãŒã¿ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®ããããžãŒã®ãªã¹ããããèŠä»¶ã¯ãè€éãªçµã¿åããã«ãŒãã®çæãé€å€ããå¿ èŠãããããã«çºçããŸãã
åãSTIã»ã°ã¡ã³ãå ã§è€æ°ã®ããã©ãŒããŒãåãæ¿ããçµã¿åããåè·¯ã®æ¥ç¶ã¯ãS_EX_REQèŠæ±åè·¯ã®ãANDãè«çã²ãŒããšãã€ãã·ãšãŒã¿ãŒã®å ±éå ¥åãžã®ããã©ãŒããŒåºåã®ãã«ããã¬ã¯ãµãŒã«ãã£ãŠè¡šãããŸãã ãªã³ã¯è«çæ§ç¯ã®äŸãå³ã«ç€ºããŸãã 2ã
ãããžã§ã¯ãã®åæã¢ãã«ã§ã¯ãçµã¿åããè«çã®æé©åãšè«çåè·¯ãä»ããã¬ãžã¹ã¿ã®è»¢éã«ãããåã ã®STIã»ã°ã¡ã³ãã®ç¹å®ã®è«çä¿¡å·ãååšããªãå ŽåããããŸãã åæçµæã¯ãéçºè ïŒCADïŒã䜿çšããèšèšããŒã«ã§æå®ããããŠãŒã¶ãŒèšå®ã«ãäŸåããŸãã
1ã€ã®STIã»ã°ã¡ã³ãã®ãšãŒãžã§ã³ãã®çžäºäœçšãããã³ã«ãæ€èšããŠãã ããã
ã·ã¹ãã åæã©ã€ã³CLKããã³åæã€ã³ã¹ããŒã«ïŒãªã»ããïŒRSTãé€ãSTIã€ã³ã¿ãŒãã§ã€ã¹ã®ãã¹ãŠã®ããžãã¯ä¿¡å·ã¯ãã¯ããã¯ä¿¡å·CLKã®åäœãšããžã«é¢é£ããåæã®èŠä»¶ãæºãããªããã°ãªããŸããã ãã®ãããã³ã«ã§ã¯ãäœæ¥é¢ã¯æé ã§ãããšæ³å®ãããŸãããã®å Žåãäœã¬ãã«ãé«ã¬ãã«ã«çœ®ãæããããŸãã
ä¿¡å·S_NBEã¯ãçŸåšã®ãµã€ã¯ã«ã§æžã蟌ãŸãããŸãã¯èªã¿åãããã¢ã¯ãã£ããªãã€ãã«é¢ããæ å ±ãæ¬éããŸãã 8ãããSTIã€ã³ã¿ãŒãã§ã€ã¹ã®å Žåããã®ä¿¡å·ã¯äœ¿çšãããŸãããããã¯ããã¹ãŠã®ãµã€ã¯ã«ã§1ãã€ãããéä¿¡ããããç¡å¹ã«ã§ããªãããã§ãã 8ãããSTIã»ã°ã¡ã³ãã®ç¡å¹ãªãã€ãã¯ãã«ãŒãããªãããšã§ãã
16ãããSTIã§ã¯ãS_NBEä¿¡å·ã®ããã深床ã¯2ãããã§ãã äœã¬ãã«S_NBE [0]ã¯ããããS_D_WR [7ïŒ0]ãŸãã¯S_D_RD [7ïŒ0]ã®ããŒã¿ã®æå¹æ§ã瀺ããŸãã äœã¬ãã«S_NBE [1]ã¯ããããS_D_WR [15ïŒ8]ãŸãã¯S_D_RD [15ïŒ8]ã«æå¹ãªããŒã¿ãååšããããšã瀺ããŸãã S_NBE [x]ã®é«ã¬ãã«ã¯ã察å¿ãããããã«ããŒã¿ããªãããšã瀺ããŸãã ãããã£ãŠããããã®ãã€ããæžã蟌ãã ããèªã¿åããšèŠãªãããããªãã§ãã ããã
32ãããSTIã§ã¯ãS_NBEä¿¡å·ã®ããã深床ã¯4ãããã§ãã 2ã€ã®è¿œå ãããS_NBE [3ïŒ2]ã¯ãããŒã¿ãã¹ã®äžååãå¶åŸ¡ããŸãã äœã¬ãã«ã®S_NBE [2]ã¯ããããS_D_WR [23:16]ãŸãã¯S_D_RD [23:16]ã®ããŒã¿ã®æå¹æ§ã瀺ããŸãã äœã¬ãã«S_NBE [3]ã¯ããããS_D_WR [31:24]ãŸãã¯S_D_RD [31:24]ã«æå¹ãªããŒã¿ãååšããããšã瀺ããŸãã åæ§ã«ããããS_NBE [7ïŒ4]ã¯64ãããã€ã³ã¿ãŒãã§ã€ã¹ã®äžäœãã€ããå¶åŸ¡ããããã4ã¯ãã€ã[39:32]ãããã5-ãã€ã[47:40]ãããã6-ãã€ã[55:48]ãå¶åŸ¡ããŸããããã7ã¯äžäœãã€ã[63:56]ã§ãã
S_CMD [2ïŒ0]è¡ã§ãçŸåšã®äº€æãµã€ã¯ã«ã®ã¿ã€ãã決å®ããã³ãã³ããéä¿¡ãããŸãã STIã³ãã³ããè¡š2ã«ãªã¹ãããŸãã
è¡š2ã
S_CMD [2] | S_CMD [1] | S_CMD [0] | ãµã€ã¯ã«ã¿ã€ã |
---|---|---|---|
0 | 0 | 0 | IOæžã蟌ã¿-æçµçãªãšã°ãŒãã¥ãŒã¿ãŒïŒããŒã¿ã¬ã·ãŒããŒïŒã®æºåãæŽã£ãŠããããšãæåŸ
ããIOã¬ã³ãŒã
|
0 | 0 | 1 | ã¡ã¢ãªæžã蟌ã¿-æåŸã®ãšã°ãŒãã¥ãŒã¿ïŒããŒã¿ã¬ã·ãŒãïŒã®æºåãæŽããŸã§ã¡ã¢ãªã«æžã蟌ã¿ãŸã
|
0 | 1 | 0 | ãã¹ããããIOæžã蟌ã¿-é
延æžã蟌ã¿IO
|
0 | 1 | 1 | ãã¹ãã¡ã¢ãªæžã蟌ã¿-é
延æžã蟌ã¿ã¡ã¢ãª
|
1 | 0 | 0 | IOèªã¿åã-IOã®èªã¿åãïŒããŒã¿ã®ããªãã§ãããªãïŒ
|
1 | 0 | 1 | ã¡ã¢ãªãŒèªã¿åã-ã¡ã¢ãªãŒã®èªã¿åãïŒããŒã¿ã®ããªãã§ãããªãïŒ
|
1 | 1 | X | Programm Memory Read-ããã°ã©ã ã¡ã¢ãªã®èªã¿åãïŒããŒã¿ããªãã§ãããªãïŒ
|
STIã€ã³ã¿ãŒãã§ã€ã¹ã¯ã3çš®é¡ã®ã¢ãã¬ã¹ã¹ããŒã¹ããµããŒãããŠããŸãã
- IOã¹ããŒã¹I / OããŒãã¹ããŒã¹ã
- ã¡ã¢ãªç©ºéïŒãŸãã¯ããŒã¿ã¡ã¢ãªïŒã¡ã¢ãªç©ºéã
- ããã°ã©ã ã¡ã¢ãªç©ºéïŒåå¥ã®ããã°ã©ã ã¡ã¢ãªãšããŒã¿ã¡ã¢ãªãåããããã»ããµã¢ãŒããã¯ãã£çšïŒããã°ã©ã ã¡ã¢ãªç©ºéã
S_ADDRãã¹ã¯ãä»»æã®ã¢ãã¬ã¹ã¹ããŒã¹ã®ã¢ãã¬ã¹ã®çµã¿åãããäŒéããŸãã STIã®8ãããããŒãžã§ã³ã§ã¯ãã¢ãã¬ã¹ã®æäžäœãããã¯S_ADDR [0]ã§ç€ºããã16ãããããŒãžã§ã³ã§ã¯S_ADDR [1]ã§ç€ºããã32ãããããŒãžã§ã³ã§ã¯ã¢ãã¬ã¹ã®æäžäœãããã¯S_ADDR [2]ã§ããã64ãããããŒãžã§ã³ã§ã¯S_ADDR [ 3]ã ããã¯ãSTIãžã£ã³ã¯ã·ã§ã³ã§ã¢ãã¬ã¹å¯èœãªæå°ããŒã¿å€ããã€ãã§ããã16ã32ã64ãããããŒãžã§ã³ã§ã¯ãã¢ãã¬ã¹S_ADDR [0]ãS_ADDR [1ïŒ0]ãS_ADDR [2ïŒ0]ã®äžäœãããããããã眮ãæããããããã§ãããã€ãéžæã³ãŒãïŒS_NBE [1ïŒ0]ãS_NBE [3ïŒ0]ãS_NBE [7ïŒ0]ã
S_D_WRãã¹ã¯æžã蟌ã¿çšã®ããŒã¿ã¯ãŒããäŒéããèšé²ãã¹ã§ãã
S_D_RDãã¹ã¯èªã¿åãããŒã¿ã¯ãŒããæ¬éããèªã¿åããã¹ãè¡šããŸãã
S_EX_REQãµã€ã¯ã«èŠæ±ä¿¡å·ã¯ã¢ã¯ãã£ãHighã§ãæžã蟌ã¿ãŸãã¯èªã¿åããµã€ã¯ã«ã®æç¡ãéç¥ããŸãã
ã«ãŒã確èªä¿¡å·S_EX_ACKã¯ããšã°ãŒãã¥ãŒã¿ãŒã«ãã£ãŠçæãããã¢ã¯ãã£ããªé«ã¬ãã«ãæã£ãŠããŸãã äœã¬ãã«ã¯ãè«è² æ¥è ãèšé²ãããããŒã¿ãåãå ¥ããæºåãã§ããŠããªãããèªã¿åããã¹ã«æå¹ãªèªã¿åãããŒã¿ããªãããšãéç¥ããŸãã
STIãžã£ã³ã¯ã·ã§ã³ã§ã®äº€æãµã€ã¯ã«ã¯ãã¯ããã¯ä¿¡å·ã®ã¯ãŒãã³ã°ãšããžã®S_EX_REQããã³S_EX_ACKã©ã€ââã³ã«ãã€ã¬ãã«ãåæã«ååšãããšããäºå®ãä¿®æ£ããåŸãå®äºãããšèŠãªãããŸãã
èšé²ãµã€ã¯ã«ã説æããã¿ã€ãã³ã°å³ãå³1ã«ç€ºããŸãã 3ã
å³ 3.èšé²ã¿ã€ãã³ã°ãã£ãŒãã®äŸ
èªã¿åããµã€ã¯ã«ã説æããã¿ã€ãã³ã°å³ãå³5ã«ç€ºããŸãã 4ã
å³ 4.ã¿ã€ãã³ã°ãã£ãŒãã®èªã¿åãäŸ
STIãžã£ã³ã¯ã·ã§ã³ã§ä¿¡å·ã®ç¶æ ãå€æŽããæé ã¯ã次ã®äžé£ã®èŠåã«ãã£ãŠèŠå¶ãããŠããŸãã
ã«ãŒã«In-1
ã€ãã·ãšãŒã¿ãŒã¯ããµã€ã¯ã«èŠæ±ãã¢ã¯ãã£ããªãã¹ãŠã®ã¯ããã¯ãµã€ã¯ã«ïŒé«ä¿¡å·ã¬ãã«S_EX_REQïŒã§ä¿¡å·S_ADDRãS_NBEãS_CMDã®æå¹ãªå€ãæäŸããå¿ èŠããããŸãã
ã«ãŒã«In-2ã
ã€ãã·ãšãŒã¿ãŒã¯ããµã€ã¯ã«èŠæ±ãã¢ã¯ãã£ãã§ïŒé«ä¿¡å·ã¬ãã«S_EX_REQïŒããã¹ãŠã®æžã蟌ã¿ã³ãã³ãã®çµã¿åãããS_CMDã©ã€ã³ã«èšå®ãããŠãããã¹ãŠã®ã¯ããã¯ãµã€ã¯ã«ã§S_D_WRä¿¡å·ã®æå¹ãªå€ãæäŸããå¿ èŠããããŸãã
ã«ãŒã«ã€ã³-3ã
ã€ãã·ãšãŒã¿ãŒã¯ãä¿¡å·S_EX_REQããã³S_EX_ACKã®é«ã¬ãã«ã®åæåºå®ïŒã¯ããã¯ä¿¡å·ã®åäœãšããžã§ïŒåŸã®æ¬¡ã®ãµã€ã¯ã«ã®éãããã³ä¿¡å·ã¬ãã«S_EX_REQãäœãå Žåã«ã®ã¿ãä¿¡å·S_ADDRãS_NBEãS_CMDãS_D_WRã®ç¶æ ãå€æŽã§ããŸãã
ã«ãŒã«ã€ã³-4ã
ã€ãã·ãšãŒã¿ãŒã¯ãS_EX_REQããã³S_EX_ACKä¿¡å·ã®é«ã¬ãã«ãåæã«ïŒã¯ããã¯ä¿¡å·ã®åäœãšããžã§ïŒåºå®ããåŸã®æ¬¡ã®ã¯ããã¯ãµã€ã¯ã«äžã«ã®ã¿ãS_EX_REQä¿¡å·ãäœã¬ãã«ã«èšå®ã§ããŸãïŒäœã¬ãã«ã®ä¿æãšæ··åããªãã§ãã ããïŒã
ã«ãŒã«Isp-1
è«è² æ¥è ã¯ãS_EX_ACKãµã€ã¯ã«ã®é«ã¬ãã«ã®ç¢ºèªä¿¡å·ãšS_CMDã©ã€ã³ã§ã®èªã¿åãã³ãã³ãã®ååšã«ãããS_D_RDã©ã€ã³ã§æå¹ãªèªã¿åãããŒã¿å€ãæäŸããå¿ èŠããããŸãã ïŒS_EX_REQèŠæ±ä¿¡å·ã®é«ã¬ãã«ãåŸ ããã«ãS_EX_ACKãµã€ã¯ã«ã®é«ã¬ãã«ã®ç¢ºèªä¿¡å·ãäºåã«çºè¡ãããšã°ãŒãã¥ãŒã¿ãŒã¯ãã¯ããã¯ä¿¡å·ã®æãè¿ãäœæ¥ãšããžãå°çãããŸã§ã1ã¯ããã¯ãµã€ã¯ã«äžã«å ¥åã®çµã¿åãããå€æŽãããšãã«ããŒã¿ãèªã¿åãæ©èœãæäŸããå¿ èŠããããŸãïŒ
ã«ãŒã«Isp-2ã
è«è² æ¥è ã¯ãS_EX_ACKãµã€ã¯ã«ã®ç¢ºèªä¿¡å·ã®é«ã¬ãã«ãå ¥åS_EX_REQã®é«ã¬ãã«ãããã³S_CMDã©ã€ã³äžã®æžã蟌ã¿ã³ãã³ãã®çµã¿åããã®ååšãšãšãã«ãã¯ããã¯ä¿¡å·ã®äœæ¥ãšããžã«æ²¿ã£ãŠS_D_WRã©ã€ã³ããèšé²çšã®ããŒã¿ãåä¿¡ããŠââä¿åããå¿ èŠããããŸãã ïŒS_EX_REQèŠæ±ä¿¡å·ã®é«ã¬ãã«ãåŸ ããã«ãS_EX_ACKãµã€ã¯ã«ã®é«ã¬ãã«ã®ç¢ºèªä¿¡å·ãäºåã«çºè¡ããå®è¡è ã¯ãã¯ããã¯ä¿¡å·ã®æãè¿ãäœæ¥ãšããžãå°çãããŸã§ã1ã¯ããã¯ãµã€ã¯ã«å ã§å ¥åã®çµã¿åãããå€æŽãããšãã«ããŒã¿ãèšé²ããæ©èœãæäŸããå¿ èŠããããŸãïŒ
ã«ãŒã«Isp-3ã
ãšã°ãŒãã¥ãŒã¿ã¯ãS_EX_REQããã³S_EX_ACKä¿¡å·ã®é«ã¬ãã«ãåæã«ïŒã¯ããã¯ä¿¡å·ã®åäœãšããžã§ïŒåºå®ããåŸã次ã®ã¯ããã¯ãµã€ã¯ã«äžã«ã®ã¿ããã®åºåã§S_EX_ACKãµã€ã¯ã«ã®ç¢ºèªä¿¡å·ã®äœã¬ãã«ãèšå®ã§ããŸãã ïŒS_EX_ACKä¿¡å·ã®ç¶æ ããå³4ã®å³ã®ããã«ããŒãããã€ãã€ãã·ãšãŒã¿ãŒåŽãããã€ããããŒã®äž¡æ¹ã«å€æŽããããšã¯ãçµã¿åããåè·¯ãæ¥ç¶ããããšã«ããã¢ãŒãã£ã¹ãã®æŽæµã«ãã£ãŠåŒãèµ·ããããå¯èœæ§ããããŸããïŒ
ã«ãŒã«Isp-4ã
è«è² æ¥è ã¯ã次ã®ããããã®æ¡ä»¶ã®äžã§ã®ã¿S_D_RDã©ã€ã³ã®ä¿¡å·ã®ç¶æ ãå€æŽã§ããŸãã
- é«ã¬ãã«ã®ä¿¡å·S_EX_REQããã³S_EX_ACKãïŒã¯ããã¯ä¿¡å·ã®åäœãšããžã«æ²¿ã£ãŠïŒåæã«ä¿®æ£ããåŸã
- S_ADDRã¢ãã¬ã¹ã®ç¶æ ãå€æŽããçŽåŸãã¯ããã¯ä¿¡å·ã®æãè¿ãäœæ¥ãšããžãå°çãããŸã§S_NBEãã€ããŸãã¯S_CMDåœä»€ã³ãŒãã解決ããŸãã
- äœä¿¡å·ã¬ãã«S_EX_ACKã®ãµã€ã¯ã«ã§ã
- åæã«ïŒ1ã¹ãããã§ïŒS_EX_ACKã®åºåã§é«ã¬ãã«ãèšå®ãã
- èªã¿åããµã€ã¯ã«ã«å¯Ÿå¿ããªãS_CMDåœä»€ã³ãŒãã®çµã¿åããã«ãããµã€ã¯ã«ã
STIããã©ãŒããŒã®å éšçµç¹ã®ååã説æããããã«ãåçŽãªæ©èœãããã¯ã®äŸãããã€ãèããŠã¿ãŸãããã
äžèšã®ãã¹ãŠã®ã«ãŒã«ãæºããSTIã€ã³ã¿ãŒãã§ãŒã¹ãåããããã©ãŒããŒã¯ãææ°ã®ãšã¬ã¡ã³ãããŒã¹ã«å®è£ ãããç°¡åãªåè·¯ãœãªã¥ãŒã·ã§ã³ã«åºã¥ããŠããŸãã
STIãšã°ãŒãã¥ãŒã¿ãŒãç·šæããæãç°¡åãªäŸã¯ãæ±çšã®ãã£ã¹ã¯ãªãŒãå ¥å/åºå-GPIOïŒæ±çšå ¥åºåïŒãå®è£ ããI / Oæ¡åŒµãŠãããã§ãã ãã®ãããªæ©èœãããã¯ã®å³ãå³ã«ç€ºããŸãã 5ã
å³ 5. I / Oæ¡åŒµãŠãããã®æ©èœå³
ãã®ãããã¯ã䜿çšãããšãè«çä¿¡å·ã®å ¥åãŸãã¯åºåçšã«32ãã£ãã«ããããããšã«æ§æã§ããŸãã 2ã€ã®32ãããã¬ãžã¹ã¿ãããŒã¿çšã«æäŸãããŠããŸãïŒRG_O [31ïŒ0]ããã³RG_I [31ïŒ0]ã ã¬ãžã¹ã¿RG_T [31ïŒ0]ã¯å¶åŸ¡ã«äœ¿çšãããããŒã¹ã¢ãã¬ã¹ïŒS_ADDR_2 = 0ïŒã§ã®èªã¿åããšæžã蟌ã¿ã«äœ¿çšã§ããŸãã ã¬ãžã¹ã¿RG_I [31ïŒ0]ã¯ããªãã»ãã+1ïŒS_ADDR_2 = 1ïŒã®ã¢ãã¬ã¹ã§ã®æžã蟌ã¿ã«äœ¿çšã§ããã¬ãžã¹ã¿RG_O [31ïŒ0]ã¯ããªãã»ãã+1ïŒS_ADDR_2 = 1ïŒã®ã¢ãã¬ã¹ã§ã®èªã¿åãã«äœ¿çšã§ããŸãã
ã¬ãžã¹ã¿ãžã®æžã蟌ã¿ã¯ããã€ã解å床S_NBE [3ïŒ0]ã®çµã¿åãããèæ ®ããŠããããããšã«å®è¡ãããŸãã
以äžã¯ãVerilogèšèªã§èšè¿°ããããæ€èšäžã®I / Oæ¡åŒµãŠãããã®åæã¢ãã«ã§ãã
`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////// // Engineer: FPGA-Mechanic // // Create Date: 11:12:38 07/24/2014 // Design Name: STI Design // Module Name: MSTI_32b_GPIO_REG_V10 - 32-bit STI GPIO Expander // Project Name: Any // Target Devices: FPGA // Tool versions: Xilinx DS 14.4 // // Revision: 1.0 (24.07.2014) // Revision 1.0 - File Created ////////////////////////////////////////////////////////////////////////// module MSTI_32b_GPIO_REG_V10( input CLK, input RST, input S_EX_REQ, input S_ADDR_2, input [3:0] S_NBE, input [2:0] S_CMD, input [31:0] S_D_WR, output S_EX_ACK, output [31:0] S_D_RD, output [31:0] GP_O, output [31:0] GP_T, input [31:0] GP_I ); // Internal signals declaration: wire IO_WR_CMD; reg [31:0] RG_T, RG_O, RG_I; //------------------------------------------ assign IO_WR_CMD = ~S_CMD[0] & ~S_CMD[2] & S_EX_REQ; //------------------------------------------ // Internal Data Registers: always @ (posedge CLK, posedge RST) if(RST) begin RG_T <= 32'hFFFFFFFF; // All Outputs Tri-Stated RG_O <= 32'h00000000; RG_I <= 32'h00000000; end else begin RG_I <= GP_I; if(~S_NBE[0] & ~S_ADDR_2 & IO_WR_CMD) RG_T[7:0] <= S_D_WR[7:0]; if(~S_NBE[1] & ~S_ADDR_2 & IO_WR_CMD) RG_T[15:8] <= S_D_WR[15:8]; if(~S_NBE[2] & ~S_ADDR_2 & IO_WR_CMD) RG_T[23:16] <= S_D_WR[23:16]; if(~S_NBE[3] & ~S_ADDR_2 & IO_WR_CMD) RG_T[31:24] <= S_D_WR[31:24]; if(~S_NBE[0] & S_ADDR_2 & IO_WR_CMD) RG_O[7:0] <= S_D_WR[7:0]; if(~S_NBE[1] & S_ADDR_2 & IO_WR_CMD) RG_O[15:8] <= S_D_WR[15:8]; if(~S_NBE[2] & S_ADDR_2 & IO_WR_CMD) RG_O[23:16] <= S_D_WR[23:16]; if(~S_NBE[3] & S_ADDR_2 & IO_WR_CMD) RG_O[31:24] <= S_D_WR[31:24]; end //------------------------------------------ assign S_EX_ACK = 1'b1; //------------------------------------------ assign GP_T = RG_T; assign GP_O = RG_O; //------------------------------------------ assign S_D_RD = S_ADDR_2 ? RG_I : RG_T; //------------------------------------------ endmodule
ãšã°ãŒãã¥ãŒã¿ã®å¥ã®äŸã¯ã8ãããã®ããã容éãæã€16åã®ã¬ãžã¹ã¿ã®å®¹éãæã€ã¬ãžã¹ã¿ãã¡ã€ã«ã§è¡šãããŸãã ã¬ãžã¹ã¿ãã¡ã€ã«ã®æ©èœå³ãå³ã«ç€ºããŸãã 6ã
16åã®ã¬ãžã¹ã¿ã¯ãããããSTIã€ã³ã¿ãŒãã§ã€ã¹ã§ã®æžã蟌ã¿ããã³èªã¿åãã«äœ¿çšã§ãããããžã§ã¯ãéå±€ã®æäžäœã§äœ¿çšãããåå¥ã®åºåä¿¡å·RG_xQ [7ïŒ0]ãåããŠããŸãã
æ©èœã¬ãžã¹ã¿ãã¡ã€ã«ã¯ãFPGA FPGAã¢ãŒããã¯ãã£ã®LUT-4ããŒãã«ã³ã³ããŒã¿ãŒã«åºã¥ã4ã€ã®ã·ã³ã°ã«ãããåæ£ã¡ã¢ãªãããã¯ã«äŒŒãŠããŸãïŒããšãã°ãXilinx瀟ã®FPGAã©ã€ãã©ãªã®RAM16X1Dããªããã£ãïŒã
æ€èšãããããã©ãŒããŒã®äŸã¯äž¡æ¹ãšãã·ã³ã°ã«ãµã€ã¯ã«ã®æžã蟌ã¿ããã³èªã¿åããµã€ã¯ã«ããµããŒãããŠãããããS_EX_ACKåºåã¯éçã«é«ã¬ãã«ãçæããŸãã
ã¬ãžã¹ã¿ãã¡ã€ã«ã®åæã¢ãã«ã¯ãVerilogã§æ¬¡ã®ããã«èšè¿°ãããŠããŸãã
`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////// // Engineer: FPGA-Mechanic // // Create Date: 11:40:08 07/24/2014 // Design Name: STI Design // Module Name: MSTI_8b_16xREG_V10 - 16x8bit Register File // in STI Memory Space // Project Name: Any // Target Devices: FPGA // Tool versions: Xilinx DS 14.4 // // Revision: 1.0 (24.07.2014) // Revision 1.0 - File Created ////////////////////////////////////////////////////////////////////////// module MSTI_8b_16xREG_V10( input CLK, input RST, input S_EX_REQ, input [3:0] S_ADDR, //input [1:0] S_NBE, input [2:0] S_CMD, input [7:0] S_D_WR, output S_EX_ACK, output reg [7:0] S_D_RD, output [7:0] RG_0Q, output [7:0] RG_1Q, output [7:0] RG_2Q, output [7:0] RG_3Q, output [7:0] RG_4Q, output [7:0] RG_5Q, output [7:0] RG_6Q, output [7:0] RG_7Q, output [7:0] RG_8Q, output [7:0] RG_9Q, output [7:0] RG_AQ, output [7:0] RG_BQ, output [7:0] RG_CQ, output [7:0] RG_DQ, output [7:0] RG_EQ, output [7:0] RG_FQ ); // Internal signals declaration: wire M_WR_CMD; reg [7:0] RG_0I, RG_1I, RG_2I, RG_3I, RG_4I, RG_5I, RG_6I, RG_7I; reg [7:0] RG_8I, RG_9I, RG_AI, RG_BI, RG_CI, RG_DI, RG_EI, RG_FI; //------------------------------------------ assign M_WR_CMD = ~S_CMD[2] & S_CMD[0] & S_EX_REQ; //------------------------------------------ // Internal Data Registers: always @ (posedge CLK, posedge RST) if(RST) begin RG_0I <= 8'h00; RG_1I <= 8'h00; RG_2I <= 8'h00; RG_3I <= 8'h00; RG_4I <= 8'h00; RG_5I <= 8'h00; RG_6I <= 8'h00; RG_7I <= 8'h00; RG_8I <= 8'h00; RG_9I <= 8'h00; RG_AI <= 8'h00; RG_BI <= 8'h00; RG_CI <= 8'h00; RG_DI <= 8'h00; RG_EI <= 8'h00; RG_FI <= 8'h00; end else begin if(M_WR_CMD) case(S_ADDR) 4'h0 : RG_0I <= S_D_WR; 4'h1 : RG_1I <= S_D_WR; 4'h2 : RG_2I <= S_D_WR; 4'h3 : RG_3I <= S_D_WR; 4'h4 : RG_4I <= S_D_WR; 4'h5 : RG_5I <= S_D_WR; 4'h6 : RG_6I <= S_D_WR; 4'h7 : RG_7I <= S_D_WR; 4'h8 : RG_8I <= S_D_WR; 4'h9 : RG_9I <= S_D_WR; 4'hA : RG_AI <= S_D_WR; 4'hB : RG_BI <= S_D_WR; 4'hC : RG_CI <= S_D_WR; 4'hD : RG_DI <= S_D_WR; 4'hE : RG_EI <= S_D_WR; default: RG_FI <= S_D_WR; endcase end //------------------------------------------ // Output MUX: always @ (S_ADDR, RG_0I, RG_1I, RG_2I, RG_3I, RG_4I, RG_5I, RG_6I, RG_7I, RG_8I, RG_9I, RG_AI, RG_BI, RG_CI, RG_DI, RG_EI, RG_FI) case(S_ADDR) 4'h0 : S_D_RD <= RG_0I; 4'h1 : S_D_RD <= RG_1I; 4'h2 : S_D_RD <= RG_2I; 4'h3 : S_D_RD <= RG_3I; 4'h4 : S_D_RD <= RG_4I; 4'h5 : S_D_RD <= RG_5I; 4'h6 : S_D_RD <= RG_6I; 4'h7 : S_D_RD <= RG_7I; 4'h8 : S_D_RD <= RG_8I; 4'h9 : S_D_RD <= RG_9I; 4'hA : S_D_RD <= RG_AI; 4'hB : S_D_RD <= RG_BI; 4'hC : S_D_RD <= RG_CI; 4'hD : S_D_RD <= RG_DI; 4'hE : S_D_RD <= RG_EI; default: S_D_RD <= RG_FI; endcase //------------------------------------------ assign S_EX_ACK = 1'b1; //------------------------------------------ // Regs Outputs: assign RG_0Q = RG_0I; assign RG_1Q = RG_1I; assign RG_2Q = RG_2I; assign RG_3Q = RG_3I; assign RG_4Q = RG_4I; assign RG_5Q = RG_5I; assign RG_6Q = RG_6I; assign RG_7Q = RG_7I; assign RG_8Q = RG_8I; assign RG_9Q = RG_9I; assign RG_AQ = RG_AI; assign RG_BQ = RG_BI; assign RG_CQ = RG_CI; assign RG_DQ = RG_DI; assign RG_EQ = RG_EI; assign RG_FQ = RG_FI; //------------------------------------------ endmodule
ã¬ãžã¹ã¿ãã¡ã€ã«ã¯ã次å é åã®ç²Ÿç¥ã䜿çšããŠãããã³ã³ãã¯ãã«èšè¿°ã§ããŸãã
`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////// // Engineer: FPGA-Mechanic // // Create Date: 11:40:08 07/24/2014 // Design Name: STI Design // Module Name: MSTI_8b_16xREG_V11 - 16x8bit Register File // in STI Memory Space // Project Name: Any // Target Devices: FPGA // Tool versions: Xilinx DS 14.4 // // Revision: 1.1 (24.07.2014) Array Coding // Revision 1.0 - File Created ////////////////////////////////////////////////////////////////////////// module MSTI_8b_16xREG_V11( input CLK, input RST, input S_EX_REQ, input [3:0] S_ADDR, //input [1:0] S_NBE, input [2:0] S_CMD, input [7:0] S_D_WR, output S_EX_ACK, output [7:0] S_D_RD, output [7:0] RG_0Q, output [7:0] RG_1Q, output [7:0] RG_2Q, output [7:0] RG_3Q, output [7:0] RG_4Q, output [7:0] RG_5Q, output [7:0] RG_6Q, output [7:0] RG_7Q, output [7:0] RG_8Q, output [7:0] RG_9Q, output [7:0] RG_AQ, output [7:0] RG_BQ, output [7:0] RG_CQ, output [7:0] RG_DQ, output [7:0] RG_EQ, output [7:0] RG_FQ ); // Internal signals declaration: wire M_WR_CMD; reg [7:0] RG_I [15:0]; // Array 16 x 8bit //------------------------------------------ assign M_WR_CMD = ~S_CMD[2] & S_CMD[0] & S_EX_REQ; //------------------------------------------ // Internal Data Registers: always @ (posedge CLK, posedge RST) if(RST) begin RG_I[0] <= 8'h00; RG_I[1] <= 8'h00; RG_I[2] <= 8'h00; RG_I[3] <= 8'h00; RG_I[4] <= 8'h00; RG_I[5] <= 8'h00; RG_I[6] <= 8'h00; RG_I[7] <= 8'h00; RG_I[8] <= 8'h00; RG_I[9] <= 8'h00; RG_I[4'hA] <= 8'h00; RG_I[4'hB] <= 8'h00; RG_I[4'hC] <= 8'h00; RG_I[4'hD] <= 8'h00; RG_I[4'hE] <= 8'h00; RG_I[4'hF] <= 8'h00; end else if(M_WR_CMD) RG_I[S_ADDR] <= S_D_WR; //------------------------------------------ // Output MUX: assign S_D_RD = RG_I[S_ADDR]; //------------------------------------------ assign S_EX_ACK = 1'b1; //------------------------------------------ // Regs Outputs: assign RG_0Q = RG_I[0]; assign RG_1Q = RG_I[1]; assign RG_2Q = RG_I[2]; assign RG_3Q = RG_I[3]; assign RG_4Q = RG_I[4]; assign RG_5Q = RG_I[5]; assign RG_6Q = RG_I[6]; assign RG_7Q = RG_I[7]; assign RG_8Q = RG_I[8]; assign RG_9Q = RG_I[9]; assign RG_AQ = RG_I[4'hA]; assign RG_BQ = RG_I[4'hB]; assign RG_CQ = RG_I[4'hC]; assign RG_DQ = RG_I[4'hD]; assign RG_EQ = RG_I[4'hE]; assign RG_FQ = RG_I[4'hF]; //------------------------------------------ endmodule
å³ 6.ã¬ãžã¹ã¿ãã¡ã€ã«ã®æ©èœå³
STI executorã®3çªç®ã®äŸã¯ãèšäº[8ã9ã10]ã§èª¬æãããŠããDTPããã³DRPããŒã¿ã®éä¿¡ããã³åä¿¡ããŒããšã®ã€ã³ã¿ãŒãã§ãŒã¹ã®ããªãšãŒã·ã§ã³ã瀺ããŠããŸãã ãã®äŸã§ã¯ãã«ãŒã確èªä¿¡å·S_EX_ACKãšå éšã¬ãžã¹ã¿ããžãŒã»ããã©ãå¶åŸ¡ããæéç¶æ ãã·ã³ã®åæãå¿ èŠã«ãªããŸããã
ãã€ããDTPããŒã¿ããŒãã«è»¢éããã«ã¯ããããã¡ã¬ãžã¹ã¿WR_DATA [7ïŒ0]ã䜿çšããŸãããã®ã¬ãžã¹ã¿ã®ããžãŒç¶æ ã¯WR_FULLã»ããã©ã«ãã£ãŠå¶åŸ¡ãããŸãã
DRPããŒã¿åä¿¡ããŒããããã€ããåä¿¡ããã«ã¯ããããã¡ã¬ãžã¹ã¿RD_DATA [7ïŒ0]ã䜿çšããããã®å æçã¯RD_FULLã»ããã©ã«ãã£ãŠå¶åŸ¡ãããŸãã
äž¡æ¹ã®ã»ããã©ã¯ãå³ã®å·Šäžé ã«ç€ºãããŠããã°ã©ãïŒå³7ïŒã«åŸã£ãŠæ©èœããåäžã®ããªã¬ãŒã§æ§ç¯ãããŠããŸãã ã€ã³ã¹ããŒã«å ¥åS1ã¯ããªã»ããå ¥åR2ããé«ãåªå 床ãæã£ãŠããŸãã ããã«ããããã®ã¬ãžã¹ã¿ã«æžã蟌ãããšã§ã1ãµã€ã¯ã«ã§ãããã¡ã¬ãžã¹ã¿ããèªã¿åãããšãã§ããŸãã
FSMã¹ããŒããã·ã³ã®äž»ãªæ©èœã¯ãèªã¿åãã¬ãžã¹ã¿ããžãŒã»ããã©ã®ãªã»ãããŸãã¯æžã蟌ã¿ã¬ãžã¹ã¿ããžãŒã»ããã©ã®èšå®ãšåæã«ãã«ãŒã確èªä¿¡å·S_EX_ACKãé«ã¬ãã«ã«èšå®ããããšã§ãã ã¡ã€ã³è¡šç€ºãªãŒãããã³ã®é·ç§»ã°ã©ãã¯å³äžã§ãã ãªãŒãããã³ã®ç¶æ ã®ãšã³ã³ãŒãã¯ãåºåS_EX_ACKãçŸåšã®ç¶æ ã¬ãžã¹ã¿ã«ãã£ãŠåœ¢æãããã¹ããŒã¿ã¹ãããã®1ã€ã«ãã£ãŠå¶åŸ¡ãããããã«éžæãããŸãã
ãªãŒãããã³WR_SETããã³RD_CLEARã®æ®ãã®åºåã¯ãçµã¿åããèŠçŽ ã«ãã£ãŠã ãŒã¢ã¹ããŒã ïŒã ãŒã¢FSMïŒã«åŸã£ãŠåœ¢æãããŸãã
ãµã€ã¯ã«S_EX_ACKã®ç¢ºèªä¿¡å·ã¯ãã¬ã³ãŒãã®ç©ºã®ãããã¡ã¬ãžã¹ã¿ã®äºå®ã«åºã¥ããŠãæžã蟌ã¿ãµã€ã¯ã«ã§ãã·ã³ã«ãã£ãŠã¢ã¯ãã£ããªé«ã¬ãã«ã«èªåçã«èšå®ãããŸãã èªã¿åããµã€ã¯ã«ã§ã¯ãèªã¿åããããã¡ã¬ãžã¹ã¿ãããžãŒã§ãããšããäºå®ã«åºã¥ããŠãã«ãŒã確èªä¿¡å·S_EX_ACKãã¢ã¯ãã£ããªãã€ã¬ãã«ã«èšå®ãããŸãã
Verilogã§èª¬æãããŠããããŒã¿éä¿¡ããŒããšåä¿¡ããŒããåããã€ã³ã¿ãŒãã§ã€ã¹ããªããžã®åæã¢ãã«ã以äžã«ç€ºããŸãã
`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////// // Engineer: FPGA-Mechanic // // Create Date: 12:37:39 07/24/2014 // Design Name: STI Design // Module Name: MSTI_8b_DTP_DRP_V10 8-bit STI to DTP & DRP Bridge // Project Name: Any // Target Devices: FPGA // Tool versions: Xilinx DS 14.4 // // Revision: 1.0 (24.07.2014) // Revision 1.0 - File Created ////////////////////////////////////////////////////////////////////////// module MSTI_8b_DTP_DRP_V10( input CLK, input RST, input S_EX_REQ, //input S_ADDR_0, //input [1:0] S_NBE, input [2:0] S_CMD, input [7:0] S_D_WR, output S_EX_ACK, output [7:0] S_D_RD, output DTP_READY_T, output [7:0] DTP_DATA_T, input DTP_READY_R, input DRP_READY_T, input [7:0] DRP_DATA_R, output DRP_READY_R ); // Internal signals declaration: wire IOW_CMD, IOR_CMD; wire IOW_REQ, IOR_REQ; reg [7:0] WR_DATA, RD_DATA; reg WR_FULL, RD_FULL; reg [1:0] FSM_STATE; wire WR_SET, RD_CLEAR; //------------------------------------------ assign IOW_CMD = ~S_CMD[0] & ~S_CMD[2]; assign IOR_CMD = ~S_CMD[0] & ~S_CMD[1] & S_CMD[2]; assign IOW_REQ = IOW_CMD & S_EX_REQ; assign IOR_REQ = IOR_CMD & S_EX_REQ; //------------------------------------------ // Internal Data Registers: always @ (posedge CLK, posedge RST) if(RST) begin WR_DATA <= 8'h00; RD_DATA <= 8'h00; end else begin if(WR_SET) WR_DATA <= S_D_WR; if(~RD_FULL & DRP_READY_T) RD_DATA <= DRP_DATA_R; end assign S_D_RD = RD_DATA; assign DTP_DATA_T = WR_DATA; //------------------------------------------ // Internal Data Semaphores: always @ (posedge CLK, posedge RST) if(RST) begin WR_FULL <= 1'b0; RD_FULL <= 1'b0; end else begin if(WR_SET) WR_FULL <= 1'b1; else if(DTP_READY_R) WR_FULL <= 1'b0; if(~RD_FULL & DRP_READY_T) RD_FULL <= 1'b1; else if(RD_CLEAR) RD_FULL <= 1'b0; end assign DTP_READY_T = WR_FULL; assign DRP_READY_R = ~RD_FULL; //------------------------------------------ // Finite State Machine: always @ (posedge CLK, posedge RST) if(RST) FSM_STATE <= 2'd0; else begin case(FSM_STATE) 2'd0 : if(IOW_REQ) if(WR_FULL) FSM_STATE <= 2'd2; else FSM_STATE <= 2'd1; else if(IOR_REQ) if(RD_FULL) FSM_STATE <= 2'd3; else FSM_STATE <= 2'd2; else FSM_STATE <= 2'd0; 2'd1 : FSM_STATE <= 2'd0; 2'd2 : if(IOW_REQ) if(WR_FULL) FSM_STATE <= 2'd2; else FSM_STATE <= 2'd1; else if(IOR_REQ) if(RD_FULL) FSM_STATE <= 2'd3; else FSM_STATE <= 2'd2; else FSM_STATE <= 2'd0; default: FSM_STATE <= 2'd0; endcase end //------------------------------------------ // Moore Outputs assign WR_SET = ~FSM_STATE[1] & FSM_STATE[0]; assign RD_CLEAR = &(FSM_STATE); //------------------------------------------ assign S_EX_ACK = FSM_STATE[0]; //------------------------------------------ endmodule
å³ 7.ã€ã³ã¿ãŒãã§ã€ã¹ããªããžSTIã€ã³ã¿ãŒãã§ã€ã¹ãšããŒã¿éåä¿¡ããŒãDTPããã³DRPã®æ©èœå³
çµè«
ã·ã³ãã«ãªSTIãšã°ãŒãã¥ãŒã¿ãŒã®ãžã£ã³ã¯ã·ã§ã³ã«ãããFPGAæ§æãããžã§ã¯ããŸãã¯VLSIãããã®ã·ã¹ãã ã€ã³ã¿ãŒãã§ãŒã¹çšã®ãšã°ãŒãã¥ãŒã¿ãŒã®ã¢ãã«ãæ§ç¯ã§ããŸãã
説æãããŠããã€ã³ã¿ãŒãã§ã€ã¹ã¯ãæ°Žæ¶ã®åšèŸºã³ã³ãããŒã©ã§äœ¿çšã§ããã ãã§ãªããI2CãSPIãQSPIãSRAMãFLASHãMicrowireãªã©ã®åŸæ¥ã®éä¿¡ãã£ãã«ãå€ãã¢ãã«ã®å€éšã·ã¹ãã ãã¹ãšã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ã䜿çšã§ããŸãã
åç §ïŒ
1. AMBA APBãããã³ã«ã ããŒãžã§ã³ïŒ2.0ã ä»æ§ã ARM IHI 0024CïŒID041610ïŒ2003-2010ãARMã
2. AMBA Specification Rev 2.0ã ARM IHI 0011Aã ARM Limited 1999ã
3. AMBA AXIãããã³ã«ã ããŒãžã§ã³ïŒ2.0ã ä»æ§ã ARM IHI 0022CïŒID030510ïŒ2003-2010ãARM
4. AMBA 4 AXI4-Streamãããã³ã«ã ããŒãžã§ã³ïŒ1.0ã ä»æ§ã ARM IHI 0051AïŒID030510ïŒã 2010幎ãARMã
5.ããŒã¿ãã«IPã³ã¢çšã®WISHBONEã·ã¹ãã ãªã³ãããïŒSoCïŒçžäºæ¥ç¶ã¢ãŒããã¯ãã£ã 2010ãOpenCoresã
6. Open Core ProtocolïŒOCPïŒä»æ§ãªãªãŒã¹2.1ã 2005幎ãOCP-IPåäŒã
7. VHDLã䜿çšããRTLããŒããŠã§ã¢èšèšïŒå¹çã移æ€æ§ãããã³ã¹ã±ãŒã©ããªãã£ã®ããã®ã³ãŒãã£ã³ã°ã ãã³P.Chuã ãžã§ã³ã»ã¯ã€ãªãŒã»ã¢ã³ãã»ãµã³ãº 2006幎ã
8. Borisenko N. V.ããã°ã©ããã«ããžãã¯ã®ããŸããŸãªãã¡ããªã«å®è£ ãããçµ±åãããäžé£ã®åæFIFOãããã¡ã¢ãã«ãç·šæããã¢ãããŒãã ããŒã1.ãã³ã³ããŒãã³ããšãã¯ãããžãŒã第12.2012ã
9. Borisenko N. V.æ å ±ã®ãœãŒã¹ãšã¬ã·ãŒããŒã®éã®ããŒã¿ãã¹ã«çµ±åãããã€ã³ã¿ãŒãã§ã€ã¹ãæã€FIFOãããã¡ãŒãçµã¿èŸŒãããã®ã¹ããŒã ã ãã³ã³ããŒãã³ããšãã¯ãããžãŒãNo. 2.2013ã
10. Borisenko N.V.ããã°ã©ããã«ããžãã¯ãããã®éã®æ±çšã¬ãžã¹ã¿ãŒäžã«æ§ç¯ããããçµ±åã€ã³ã¿ãŒãã§ãŒã¹ãåããåæFIFOãããã¡ãŒã®æ§æã ãã³ã³ããŒãã³ããšãã¯ãããžãŒãNo. 8.2016ã