ã¯ãããè¦ã¦ãã¨ãFPGAã¨Arduinoã¨Rasberry PIã£ã¦ããªããå°ããã¦ããã¤ã¹æ¿ãã¦ä½¿ã£ã¦ã¦ä¼¼ããã®ã®ããã«è¦ããããããã¾ããã
ãããªä¸ãã©ããéãã®ï¼ã£ã¦æã£ã¦ã人ããããã¨æã£ãã®ã§ãããããã®éãã¨ãããã¦ããããå¾ãããæè¡è
ã¨ãã¦ã®ç¥èãã¾ã¨ãã¦ã¿ã¾ãã
ã¾ããå¾ãããç¥èã¨ãã¦ãããããã®ããã¤ã¹ã®ä½¿ãæ¹ã¨å¨è¾ºç°å¢ãã£ã¦ã®ã¯ããã¾ãããããã¯å½ç¶ã¨ãã¦ããããããã®ããã¤ã¹ã®ä½¿ãæ¹ã¨å¨è¾ºç°å¢ããå¾ãã¡ãªããããããæ¯è¼ã¨ãã¦ã¾ã¨ãããã¨æãã¾ãã
æ ¹åºã¯ããªãã§æè¿FPGAããã£ã¦ãããã£ã¦ãããã¨ã®èª¬æãªã®ã§ããããããã¤ã¢ã¹ãããã¨æã£ã¦ãã ããã
FPGAã¨ããã®ã¯ãããã®ç¨®é¡ãªã®ã§ãå®éã«ã¯DE0ãªã©ã®FPGAè©ä¾¡ãã¼ãã¨ã®æ¯è¼ã§ãããä¸ã§ãDE0-nanoã¯å¤§ãããä¾¡æ ¼ãèããã¨ã豪è¯ãªArduinoãããã®ä½ç½®ã¥ãã¨ãã¦åºãã¦ããããã«ãè¦ãã¾ããã¨ãããã¨ã§ãããã§ã¯ä¸»ã«DE0-nanoã¨ã®æ¯è¼ã«ãããã¨æãã¾ãã
Arduino
ããã¯ãããã¤ã¹æä½ã«ç¹åããã³ã³ãã¥ã¼ã¿ã§ããããã¤ã³ã³ã¨ãã説æãããã¦ããã¨ãå¤ãã§ãã
ã¢ããã°å
¥åãã¤ãã¦ããã®ã§ã温度ã»ã³ãµãªã©ãã¤ãªãã ãã§å¶å¾¡ãããã¨ãã§ãã¾ãã
OSã¯è¼ããªãã®ã§ãã¿ã¹ã¯ç®¡çãå¿
è¦ãªç¨éã«ã¯åãã¾ããã
LANéä¿¡ããã®ã¾ã¾ã§ã¯ã§ãã¾ããããã¡ããArduinoç¨ã®LANã«ã¼ãã¨ããã®ã売ã£ã¦ããããã§ãããããã¯é¨åãè¦ãéãLANã«ã¼ãä¸ã§ããªãArduinoç¨ã®å¶å¾¡ãè¡ããã¦ããããã§ããArduinoã§LANæ¥ç¶ãã§ãããã¨ããããã¯ãArduinoç¨ã®LANæ¥ç¶ããã¤ã¹ã売ã£ã¦ãããã¨ããæãã§ããã*1
Arduinoé¢é£ã¨ãã¦ããã¤ã¹æä½ã®æ
å ±ãå
å®ãã¦ããã®ã§ãããã¤ã¹ãã¤ãªãã§åããåå¼·ã«ãªãã¨æãã¾ãã
ã¾ããä¸è¨LANã«ã¼ãã®ããã«ãArduinoç¨ã®ããã¤ã¹ãçµæ§æã£ã¦ãããããªã®ã§ãããã¤ã¹ã使ã£ã¦ãªã«ãããã¨ããå ´åã«ã¯ããé¸æã§ãã
Raspberry Pi
ããã¯ãå°ãããã½ã³ã³ã§ããæ®éã«LinuxãåããLANã§éä¿¡ãã§ãã¾ãã
ã¾ããSPIãI2Cã¨ãã£ãæ¹å¼ã§ICãå¶å¾¡ãããã¨ãã§ããã®ã§ã対å¿ããããã¤ã¹ãæä½ãããã¨ãã§ãã¾ããã¢ããã°å
¥åã¯ãªããããªã®ã§ã温度ã»ã³ãµãªã©ãæ¥ç¶ããå ´åã¯A/Dã³ã³ãã¼ã¿ã使ã£ã¦å¶å¾¡ããå¿
è¦ãããã¾ãã
ãã ãããã¤ã¹æä½ã主ãªã®ã§ããã°ãArduinoã®ã»ããããããããªãã§ããããã
æããããã¾ã¾ã§Linuxã使ã£ããã¨ããã人ã§ããã°ããã®ã¾ã¾Raspberry Piã§ããã°ã©ã ãåãããã¨ãã§ããããããªãã§ããããã
ãã®ãã¨ã¯ã¡ãªããã§ã¯ããã¾ããããã®ã¾ã¾ä»ã¾ã§ã®ç¥èã使ããã¨ãããã¨ã¯éã«è¨ãã°å¾ãããç¹å¥ãªæè¡çç¥èã¯ãªããã¨ãããã¨ã«ãªãã¾ãã
身ã«ã¤ãã®ã¯ãå°ãããã½ã³ã³ããã£ããä½ãã§ããããã®ãããªã½ãªã¥ã¼ã·ã§ã³ã¨ãã¦ã®ç¥èã«ãªãã¨æãã¾ãã
åå¼·ç´ æã§ã¯ãªãã¦ãéå
·ã§ããã
FPGA(DE0-nano)
Arduinoã¯ãã¤ã³ã³ã ããRaspberry Piã¯ãã½ã³ã³ã ã£ãã®ã§ããã©ãDE0-nanoã¯ã³ã³ãã¥ã¼ã¿ããããã¾ããã
ãã³ã³ãã¥ã¼ã¿ã¯ã½ããããªããã°ãã ã®ç®±ãã¨ãããã©ãDE0-nanoã¯ä½ãããªããã°ãã ã®ç®±ã§ãããªãããã§ããå®éã«ã¯åºè·æã«ãµã³ãã«ãåãè¾¼ã¾ãã¦ãã®ã§ããã«ãã«åãä½ãã§ã¯ããã®ã§ããã
(ããã§ã¯ã³ã³ãã¥ã¼ã¿ã¨ããã®ã¯ãã½ããã¦ã§ã¢ã§è¨ç®æé ãä¸ãã¦åãé»ååè·¯ã£ã¦ãã¨ã«ãã¾ã)
FPGAã¯åè·¯ãããã°ã©ã ã§ãããããã§ãããªã®ã§ä¾ãã°
led = button;
ã®ãããªè¨è¿°ã§åè·¯ãçµãã°ãLEDã¨ãã¿ã³ãé
ç·ããã ãã®åãªãé«ä¾¡é
ç·ãããã«ãªãã¾ãã
ãã¡ãããããã§CPUã®åè·¯ãçµãã°ãã³ã³ãã¥ã¼ã¿ã«ãªãã¾ããå
¬éããã¦ãARMäºæåè·¯ãx86äºæåè·¯ã使ãã°ãARMãx86ã®ã³ã¼ããåãã³ã³ãã¥ã¼ã¿ã«ãªãã¾ãã
ãããã£ãCPUã使ã£ã¦Linuxãåãããã¨ãã§ãã¾ãã
Arduinoã®ãããªåããããåè·¯ãçµãã°ãArduinoäºææ©ã®ãããªãã®ã¯æ¯è¼çç°¡åã«ã§ããããªæ°ããã¾ãã
LANã³ãã¯ã¿ã¯ã¤ãã¦ãªãã®ã§ãããLANä¿¡å·ãICã§æä½ã§ããé»æ°ä¿¡å·ã«å¤æããEthernet PHYããããã°ããã¨ã¯MACãIPãå¦çããåè·¯ãHDLã§çµã¿è¾¼ããã¨ã§LANæ¥ç¶ãã§ããããã«ãªãã¾ããä¸ã§ã§ã¦ããArduinoç¨LANã«ã¼ãã§ã¯W5100ã¨ããããããä¹ã£ã¦ãã¦ãããã¯Ethernet PHYã¨ãMACãIPãå¦çããåè·¯ãSPIæ¹å¼ã§å¶å¾¡ã§ããããã«ãããã®ã®ããã§ãããã®å¦çé¨åãFPGAã§å®è£
ãããã¨ãå¯è½ã§ãã
ããããã«FPGAã§ã¯ããããã®ä¸èº«ãæ¸ããã¨ãã§ããããã§ããããããæå³ã§ã¯ãFPGAãã¼ãã¨ããã®ã¯ããã£ã¸ã«ã«ã³ã³ãã¥ã¼ãã£ã³ã°ãã®ããã®ãã®ã¨ã¯èããªãã»ããããã¨æãã¾ãããã£ã¦ããã¨ã¯æ®éã«ã¨ã¬ã¯ããªã«ã«ã§ãã
ãã¾ã¼ãã¯ãå¶å¾¡åè·¯ãæ¸ãç·´ç¿ã¨ãã¦æ軽ãªã®ã§LEDç¹ç¯ã温度ã»ã³ãµã®å¶å¾¡ãè¡ã£ã¦ããã ãã§ããã主ç®çãLEDç¹ç¯ã温度ã»ã³ãµå¶å¾¡ãªã©ã®ããã£ã¸ã«ã«ã³ã³ãã¥ã¼ãã£ã³ã°ããªã®ã§ããã°ãä¸è¨ã®ArduinoãRaspberry Piã®ã»ãããããããã¾ãã
FPGAã§åå¼·ã§ãããã¨
ã¾ãã¯ãã½ããã¦ã§ã¢æè¡è ã®ä¸è¬å¸¸èã¨ãã¦ã®é»ååè·¯ãé»åããã¤ã¹ã®åããææ¡ãããã¨ãã§ãã¾ããFPGAãããåã¨ãã¨ã§ããã¼ãã¦ã§ã¢ã®èª¬æã®è¦ãæ¹ãå¤ããã¾ããããã¨ãã°ãããã»ããµãæ¯ããæè¡ãèªãã§ãFPGAãåå¼·ããåã¯ãç´°ãããã¨ã¾ã§ããæ¸ãã¦ãããªã¼ãã ãã ãã¨æã£ã¦ãã®ã§ãããFPGAãåå¼·ãããããã£ãããã説æã ãªã¼ãã¨ããææ³ã«ãªãã¾ããããããã»ããµãæ¯ããæè¡ãã®èª¬æãã¿ã¦ãã©ã®ãããã®HDLã³ã¼ããæ¸ãã°ãããæ³åã§ããããã«ãªãã¾ãã
CPUã®ãªãã¨ããã§ãã½ããã¦ã§ã¢ã§ã¯ãªãå¦çãæ¸ããã¨ã§ãCPUã®ããããããã½ããã¦ã§ã¢ã®ããããããå®æãããã¨ãã§ãã¾ãããã¾ã¾ã§å½ããåã®ããã«ä½¿ã£ã¦ããCPUãã½ããã¦ã§ã¢ããé常ã«ããããããã®ã«è¦ãã¦ãã¾ãããããã£ã¦å¯¾æ¯ãããã¨ã§ãCPUã¨ã¯ãªã«ããã½ããã¦ã§ã¢ã¨ã¯ãªã«ãã¨ãããã¨ãããã£ã¦ãã¾ãã
éã«ãCPUãã½ããã¦ã§ã¢ãã¾ã ãã£ãããã¦ããã¾ãã¨ãããã¨ãæããããã«ãªãã¾ãããã¨ãã°ã200μç§(0.2ããªç§)ãã¨ã«ãã¼ã¿å¦çãããã¨ããã³ã¼ããã½ããã¦ã§ã¢ã§æ¸ãã®ã¯ãé常ã«æ°ã使ãã¾ããã§ãããã¼ãã¦ã§ã¢ãªãããã¨ãã°50MHzã®ã¯ããã¯ã§åãã¦ãã¦ã1ä¸ã¯ããã¯ããã®ã§ããªãã®å¦çãã§ãã¾ãã200μç§ã§åãããã¨èªä½ã¯ã1ä¸ã¯ããã¯æ°ããã°ããã ããªã®ã§ã¾ã£ããé£ããããã¾ãããå¦çãæ¸ãã®ãã½ããã¦ã§ã¢ããé£ããã§ããã
ã¤ã¾ããCPUã«ã§ãããã¨ã¨CPUã§ãããªãã»ãããããã¨ããããã¨ãããã£ã¦ãã¾ããCPUä¸ã®ã½ããã¦ã§ã¢ã ããã£ã¦ããã¨ããããããCPUã§ãããªããã¨ããé¸æè¢ã®åå¨ãããããä½ãããããã®ãããããã¾ãããã§ããä¸ã«æ¸ããããã«ãæéå¶ç´ãæºããã¨ããã®ãé£ããã¨ãããã¨ããããã¾ããã¾ããå¦çãããã«ã¯CPUèªä½ããªã¼ãã¼ãããã§ããã¨ãããã¨ãæãããã¨ãã§ãã¾ãã
ã¢ãæãéããªãããã®FPGA
ããããã大äºã§ãã
ãã¾ãCPUã使ã£ãå¦çã«éçãè¦ããããã«ãªã£ã¦ãã¾ãããããã§CPUã使ããã«å¦çãæ¸ãå¿
è¦æ§ãåºã¦ãã¦ãã¾ãããã¾ã¯éèç³»ãªã©éãããç¯å²ã§ãããéè¦ãå¢ããã¨ã¨ãã¼ãã使ãããããªã£ã¦å®ç¾æ§ãå¢ããã¨ã¨ã§ãå¤ãã®åéã§ä½¿ããã¦ããã¨æãã¾ãã
FPGAã¯ããã¨ãã°CããJavaã«ãJavaããRuby/Scalaã«ã¨ãã£ã転æã¨ã¯ã¾ã£ããéããã½ããã¦ã§ã¢ãããã¼ãã¸ã¨ãã転æãå¿
è¦ã«ãªãã¾ããã½ããã¦ã§ã¢æè¡éã®æè¦ã§å¿
è¦ã«ãã¾ããããããã°ããã¨ãã風ã«ã¯ãªãã¾ããã
ä¸åº¦FPGAã触ããªãã¨ãã©ã®ãããªãã¨ãã§ããããã§ããªãããã¾ãã¤ããã¾ãããã©ã®ããã«ãããã¨ãã話ã¯ã¾ã£ããã§ãã¾ããã
ãã¡ãããå®éã«ä½¿ãããããã«ã¯ãããã£ããã¨ãããããªãã¦ã使ãã製åãåºã¾ã£ã¦ããã¨æãã¾ãããæè¡è
ã¨ãã¦ã®ã¢ãæã¯å®éã«ä½¿ãããããã«ãªãã¾ã§ã«ããã®ã§ãã¢ãæãã®ããã¦ãã¾ãã¾ãã
ã¨ã³ã¸ãã¢äººçã§ï¼åº¦æ¥ãã¨ããã¢ãæãã²ã¨ã¤åã¯ã¯ã©ã¦ãã§ããããã®åã¯Webã§ãããWebããå§ãã人ã®ï¼åº¦ç®ã®ã¢ãæãFPGAãéããªãããã«ããããã«ã¯ãä»ãããã£ã¦ããã¨æå©ã ã¨æãã¾ãã