MessagePack-RPC for VHDL ã¯ãåŸæ¥ã®äŒçµ±çãªã¬ãžã¹ã¿ã¢ã¯ã»ã¹ã«ããFPGA/ASIC ã®å¶åŸ¡ã«æ¿ããŠãMessagePack-RPC ã«ãã FPGA/ASIC ã®å¶åŸ¡ã詊ã¿ããã®ã§ãããã®ç®çã¯ããŠãŒã¶ãŒç©ºéã®ã¢ããªã±ãŒã·ã§ã³ãš FPGA ãçŽæ¥ MessagePack-RPC ãããã³ã«ã§ããåãããããšã«ãããããã€ã¹ãã©ã€ãã®éçºãšã¡ã³ããã³ã¹ãç°¡ç¥åããããšãšãã¹ã¯ãªããèšèªãªã©çŽæ¥ã¡ã¢ãªãã¢ã¯ã»ã¹ã§ããªãç°å¢ã§FPGAã®å¶åŸ¡ãå¯èœã«ããããšã§ãã
äžå³ã« MessagePack-RPC ã䜿ã£ãäŸã瀺ããŸããå³ã®äžååããã¹ã(CPU)äžã§åäœãããœãããŠã§ã¢ã§ãäžååãFPGA(Programmable Logic)äžã«æ§ç¯ããè«çåè·¯ã§ãã
Fig.1 MessagaPack-RPC Example Block Diagram
åŸæ¥ã®äŒçµ±çãªããŒããŠã§ã¢ãå¶åŸ¡ããæ¹æ³ã¯ãã¬ãžã¹ã¿ã¢ã¯ã»ã¹æ¹åŒã«ãããã®ã§ããããã¯ããŒããŠã§ã¢ãšãã¹ã(CPU)ãšããã¹(AXIãPCIeãªã©)ã§æ¥ç¶ãããã¹ã(CPU)ãããŒããŠã§ã¢äžã«å®è£ ããã¬ãžã¹ã¿ã«ãªãŒã/ã©ã€ãããããšã§ããŒããŠã§ã¢ã®å¶åŸ¡ãè¡ãæ¹åŒã§ãã
é·ãã䜿ãããŠããã¬ãžã¹ã¿ã¢ã¯ã»ã¹æ¹åŒã§ãããç§ã¯æ¬¡ã®ãããªåé¡ããããšèããŠããŸãã
- çŽæ¥ã¡ã¢ãª(ãŸãã¯I/O)空éã«ã¢ã¯ã»ã¹ããªããã°ãªããªã
- äœéãã€äžäœäžå¯åãªããªãŒã/ã©ã€ãã»ãã©ã³ã¶ã¯ã·ã§ã³
- BigEndian/Little Endian ã®ãããªãããŒããŠã§ã¢äŸåæ§
- åããã«ããŠæ¡åŒµæ§ã«ä¹ãããã¢ãã¬ã¹ãšããããã£ãŒã«ãã«ããã¬ãžã¹ã¿ã®æå®
ããŒããŠã§ã¢ã¯ãã¹(AXIãPCIeãªã©)ãä»ããŠãã¹ã(CPU)ã«æ¥ç¶ãããŠããŸãããã¹ã(CPU)ããã¹ãä»ããŠããŒããŠã§ã¢ã«ã¢ã¯ã»ã¹ããããã«ã¯ãéåžžããã¹ã(CPU)ã®æã€ã¡ã¢ãªã¢ã¯ã»ã¹åœä»€(CPUã«ãã£ãŠã¯I/Oã¢ã¯ã»ã¹åœä»€)ã䜿ããŸããããããããã®åœä»€ã¯ã¢ã»ã³ãã©ãªã©ã®çŽæ¥CPUã®åœä»€ã䜿ããèšèªãããããã¯Cã®ãããªäœã¬ãã«ã®èšèªã§ãªããã°äœ¿ãããšãåºæ¥ãŸãããäŸãã° Java ãRuby ãªã©ã®é«çŽèšèªããã¯çŽæ¥ã¢ã¯ã»ã¹ããããšã¯åºæ¥ãŸãã(äžéšäŸå€ãªèšèªã¯ãããŸã)ããã®ãããªèšèªã§ã¢ã¯ã»ã¹ããããã«ã¯ãéã«Cãã¢ã»ã³ãã©ã§èšè¿°ããã©ã€ãã©ãªãããã€ã¹ãã©ã€ããå¿ èŠã«ãªããŸãã
ãã¹ã(CPU)ããã¹ãä»ããŠããŒããŠã§ã¢ã®ã¬ãžã¹ã¿ã«ã¢ã¯ã»ã¹ããéã¯ãäžè¬çã«ãã¹ã®æã€ãªãŒã/ã©ã€ãã»ãã©ã³ã¶ã¯ã·ã§ã³ã»ãããã³ã«ã䜿ããŸããããã§ãã©ã³ã¶ã¯ã·ã§ã³ãšèšã£ãŠããã®ã¯ããã¹ã(CPU)ããªãŒããŸãã¯ã©ã€ãã®èŠæ±ãåºããŠãããŒããŠã§ã¢ããã®èŠæ±ã«å¯Ÿããå¿çãè¿ããšããäžé£ã®åäœãäžäœäžå¯å(èŠæ±ãšå¿çãåé¢ã§ããªã)ã ããã§ãã
äŸãã°ããã¹ã(CPU)ãããŒããŠã§ã¢ã«å¯ŸããŠãªãŒãã¢ã¯ã»ã¹ãããšããŸããCPUã¯ãã¹ã«å¯ŸããŠãªãŒãèŠæ±ãããŸãããã¹ã¯ããŒããŠã§ã¢ã«å¯ŸããŠãªãŒãèŠæ±ãããŸããããŒããŠã§ã¢ã¯ãã¹ã«å¯ŸããŠãªãŒãã®çµæãè¿ããŸãããã¹ã¯CPUã«å¯ŸããŠãã®çµæãè¿ããŸããããããªãŒãã»ãã©ã³ã¶ã¯ã·ã§ã³ã§ãã
åæ§ã«ããã¹ã(CPU)ãããŒããŠã§ã¢ã«ã©ã€ãã¢ã¯ã»ã¹ãããšããŸããCPUã¯ãã¹ã«å¯ŸããŠã©ã€ãããŒã¿ãšäŸã«ã©ã€ãèŠæ±ãããŸãããã¹ã¯ããŒããŠã§ã¢ã«å¯ŸããŠã©ã€ãèŠæ±ãããŸããããŒããŠã§ã¢ã¯ãã¹ã«å¯ŸããŠã©ã€ãã®çµæ(æåor倱æ)ãè¿ããŸãããã¹ã¯CPUã«å¯ŸããŠãã®çµæãè¿ããŸãããããã©ã€ãã»ãã©ã³ã¶ã¯ã·ã§ã³ã§ãã
ã§ã¯ãããããã©ã³ã¶ã¯ã·ã§ã³ã®éãCPUã¯äœããã£ãŠããããšãããšãå®ã¯äœãããŠããŸããããšããããäœãåºæ¥ãŸãããã²ãããå¿çãè¿ã£ãŠããã®ãåŸ ã£ãŠããŸãã
éåžžãCPUãã¡ã€ã³ã¡ã¢ãªã«å¯ŸããŠãªãŒã/ã©ã€ãããå Žåã¯ãéã«ããŒã¿ãã£ãã·ã¥ãä»åšããŠããŠããã®åŸ ã¡æéãé èœããŠããŸããããããããŒããŠã§ã¢ã®ã¬ãžã¹ã¿ã«å¯Ÿããã¢ã¯ã»ã¹ã®å Žåã¯ãã£ãã·ã¥ãç¡å¹ã«ããã®ã§ããã«ã«ãªããªããããã®åŸ ã¡æéãçºçããŸãã
ããã«äœéãªã ãã§ã¯ãªããäŸãã°ããŒããŠã§ã¢ã«ãã°ããã£ããããŠããŒããŠã§ã¢ãå¿çããªãã£ãå ŽåãCPUã¯ã²ãããå¿çãåŸ ã¡ç¶ããŸãããããªããšã·ã¹ãã ãããªãŒãºç¶æ ã«ãªããŸããã¡ãªã¿ã«å²ã蟌ã¿ãå¹ããªããªããŸããããšããšå²ã蟌ã¿ãšããã®ã¯å®è¡ãå®äºããåœä»€ã𿬡ã®åœä»€ã®éã«å²ãèŸŒãæ©æ§ãªã®ã§ãåœä»€èªäœãå®äºããªãå Žåã¯ãŸã£ããã®ç¡åã§ãã
CPUãå¿çåŸ ã¡ããå埩ããã«ã¯CPUã«ãªã»ãããããããããããŸããããªã»ããããããã«ã¯ããã«ãã³ã¢ã«ããŠå¥ã®CPUããããããããŠã©ããããã°ã¿ã€ããªã©ã®æ©æ§ãå¿ èŠã§ãã
ãã®ããã«ããã©ã³ã¶ã¯ã·ã§ã³ã«ããã¬ãžã¹ã¿ã¢ã¯ã»ã¹ã«ã¯ãã¢ã¯ã»ã¹åæ°ããªãã¹ãå¿ èŠæå°éã«ããããšã©ãŒãã·ã¹ãã ããŠã³ã«å¯ŸåŠãããªã©ã®ã现å¿ã®æ³šæãå¿ èŠã§ãã
CPUã®ã¢ãŒããã¯ãã£ã«ã¯ Big Endian ãš Little Endian ããããŸããBig Endian ãš Little Endian ã®éãã«é¢ããŠã¯ããã§ã¯èª¬æããŸããããããŒããŠã§ã¢ã®ã¬ãžã¹ã¿ã¢ã¯ã»ã¹ããéã«ã¯ã¡ãã£ãšåä»ã§ããããã«åä»ãªããšã«ãCPUã ãã§ãªããã¹ã«ãããŒããŠã§ã¢ã®ã¬ãžã¹ã¿ã«ã Big Endian ãš Little Endian ããã£ãŠããããã®çµã¿åãããèæ ®ããªããã°ãªããŸããã
ã»åããã«ããŠæ¡åŒµæ§ã«ä¹ãããã¢ãã¬ã¹ãšããããã£ãŒã«ãã«ããã¬ãžã¹ã¿ã®æå®
ããŒããŠã§ã¢ã®ã¬ãžã¹ã¿ã«ã¯åã ã«ã¢ãã¬ã¹ãå²ãåœãŠãããŠããŸãããã¹ã(CPU)ãã¬ãžã¹ã¿ã«ã¢ã¯ã»ã¹ããéã«ã¯ããã®å²ãåœãŠãããã¢ãã¬ã¹ãæå®ããŸãããŸããäžã€ã®ã¬ãžã¹ã¿ã«è€æ°ã®æ©èœãããããã£ãŒã«ããåããŠå²ãåœãŠãããŠããããšãå€ã ãããŸã(ç¹ã«ã¡ã¢ãªç©ºéã貎éãªãªãœãŒã¹ã ã£ãæ)ã
ãã¹ã(CPU)ãããŒããŠã§ã¢ãå¶åŸ¡ããéã¯ããããã®ã¢ãã¬ã¹ãšããããã£ãŒã«ããç¥ããªããã°ãªããŸããããããã®ã¢ãã¬ã¹ãšããããã£ãŒã«ãæ å ±ã¯ãããŒããŠã§ã¢ã®ããŒã¿ã·ãŒããšãã圢ã§ãœãããŠã§ã¢ãšã³ãžãã¢ã«æç€ºãããŸããã§ããŸã倧æµãã®ããŒã¿ã·ãŒãã£ãŠããã®ããœãããŠã§ã¢ãšã³ãžãã¢ã«ã¯ãåããã«ãããééããå€ããšãã§ãããžãäžè©ã ã£ããããŸãã
ãŸããäžã€ã®ã¬ãžã¹ã¿ã«è€æ°ã®æ©èœãããããã£ãŒã«ããåããŠå²ãåœãŠãããŠããå Žåããããã®ããããã£ãŒã«ãã«ã¢ã¯ã»ã¹ããéã¯ãããæŒç®ãå¿ èŠã«ãªããŸããäŸãã°ãããã¬ãžã¹ã¿ã®ããããããã£ãŒã«ãã ããæžãæãããå ŽåãäžåºŠãã®ã¬ãžã¹ã¿ãå šéšãªãŒãããŠããã®ããããã£ãŒã«ãã ãããããæŒç®ãé§äœ¿ããŠå€æŽããŠãå床ã¬ãžã¹ã¿ã«æžãæ»ããªã©ã®é¢åãªåŠçãå¿ èŠãªå ŽåããããŸãã
ããã«ãäžåºŠã¢ãã¬ã¹ãå²ãåœãŠãŠããŸããšã容æã«å€æŽããããšã¯ã§ããŸãããäŸãã°ãããã¬ãžã¹ã¿ã32ãããã§å®çŸ©ããŠããã®ãããŒããŠã§ã¢ã®ä¿®æ£/æŽæ°ã§64ãããã«ããå Žåãäžäœ32ãããã®ã¬ãžã¹ã¿ãäžäœ32ãããã®ã¬ãžã¹ã¿ãšé¢ããã¢ãã¬ã¹ã«å²ãæ¯ããšããå šã¬ãžã¹ã¿ã®ã¢ãã¬ã¹ã®å²ãæ¯ããæåããããçŽããšããå¿ èŠã«ãªãå ŽåããããŸãã
åç¯ã§èª¬æãããã¬ãžã¹ã¿ã¢ã¯ã»ã¹æ¹åŒã®åé¡ç¹ã¯ãåã ã®åé¡ã«é¢ããŠã¯æ¯èŒçç°¡åã«è§£æ±ºã§ããŸãããããã®å Žåããã¹ã(CPU)ã§åäœãããœãããŠã§ã¢ãæ³šææ·±ãèšèšããããšã§ãããããŠããã¹ãã«æ±çšOSã䜿ãå Žåããããã®å¶åŸ¡ãè¡ããœãããŠã§ã¢ãããã€ã¹ãã©ã€ãã§ãã
ããã€ã¹ãã©ã€ãã«ããè§£æ±ºæ¹æ³ã®åé¡ç¹ã¯ãããã€ã¹ãã©ã€ããããŒããŠã§ã¢ãšãœãããŠã§ã¢(ãŠãŒã¶ãŒã¢ããªã±ãŒã·ã§ã³)ãšOSãšã®çé(æ»è§)ã«ãããããã©ã®æ åœãšã³ãžãã¢ãããé ã(å®åç¯å²å€)ãšæãããŠããŸãã管çãããããã«ãªãããšãå€ãããšã§ããããã€ã¹ãã©ã€ãå°éã®ãšã³ãžãã¢ãããå Žåã¯è¯ãã®ã§ãããäœæ ãããªãã£ãããå¥ã®ä»äºãšå Œä»»ããŠãããå åãªãªãœãŒã¹ãå²ãåœãŠãããŠãªãã£ããããããšããããããŸã(ããã€ã¹ãã©ã€ãã®èšèšã管çã¯ããŒããŠã§ã¢ããœãããŠã§ã¢ãOSã®ïŒè ã®ç¥èãå¿ èŠãªããããããæ·å± ã¯é«ãã£ããããã®ã§ãã)ã
ãŸããããã€ã¹ãã©ã€ãã¯ãããŒããŠã§ã¢ããœãããŠã§ã¢(ãŠãŒã¶ãŒã¢ããªã±ãŒã·ã§ã³)ãOSã®ä»²ç«ã¡ãããé¢ä¿äžããããïŒè ã®å€æŽ/ä¿®æ£/æŽæ°ã®åœ±é¿ãããã«åããŸããåŸã£ãŠãããã€ã¹ãã©ã€ãã¯åžžã«ã¡ã³ããã³ã¹ãå¿ èŠã§ããäŸãã°ããã£ããäœã£ãããŒããŠã§ã¢ãšã¢ããªã±ãŒã·ã§ã³ããOSã®ããŒãžã§ã³ã¢ããã«ã€ããŠãããã«äœæãŸã§ãå€ãOSã§ããåããªããªããŠäºæ ãèµ·ãããŸãã
ã¬ãžã¹ã¿ã¢ã¯ã»ã¹æ¹åŒã®åé¡ç¹ãããã€ã¹ãã©ã€ããšããå Žæã«äžãæã«éããŠéäžç®¡ç/察åŠãããšããèãæ¹ã¯ããªãã¡ééã£ãŠã¯ããŸããããããåã ã®åé¡ç¹ãã®ãã®ãç¡ãããŠããŸããšããèãæ¹ããããŸããããããŠè©Šéšçã«å®è£ ããŠã¿ãã®ã MessagePack-RPC ã«ããããŒããŠã§ã¢ã®å¶åŸ¡ã§ãã
MessagePackã¯æ¬¡ã®ãããªç¹åŸŽãæã€ããŒã¿è¡šçŸåœ¢åŒã§ãã
- é«éãªã·ãªã¢ã©ã€ãº/ãã·ãªã¢ã©ã€ãº
- ã³ã³ãã¯ããªããŒã¿è¡šçŸ
- ç¹å®ã®èšèªã«äŸåããªã
- ç¹å®ã®ã³ã³ãã¥ãŒã¿ãŒã¢ãŒããã¯ãã£ã«äŸåããªã
- é åãšèŸæž(Key-Value-Store)ã«å¯Ÿå¿ããŠãã
MessagePack-RPCã¯ãäžã®ãããªMessagePackã®ç¹åŸŽãããããŠãç¹å®ã®èšèªãOSãCPUã«äŸåããã«ããµãŒããŒãšã¯ã©ã€ã¢ã³ãéã§Remote Procedure Callãè¡ããããã³ã«ã§ãã
äŸãã°ããªã¢ãŒãããã·ãŒãžã£ãŒã³ãŒã«ã®ãªã¯ãšã¹ãã¯æ¬¡ã®ãããªMessagePack圢åŒã§ãã
[type, msgid, method, params]
ãªã¯ãšã¹ãã®å Žåãtypeã¯0ã§ããmsgidã¯32ãããã®ç¬Šå·ç¡ãæŽæ°ãmethod ã¯ã¡ãœããåã"æåå"ã§æå®ããŸããparams ã¯ã¡ãœããã«æž¡ãåŒæ°ãé åã§æå®ããŸããã€ãŸãã¬ãžã¹ã¿ã¢ã¯ã»ã¹ã®æã®ãããªã¢ãã¬ã¹ãããããã£ãŒã«ãã®æå®ã¯å¿ èŠãããŸããã
ãªã¯ãšã¹ãã«å¯Ÿããã¬ã¹ãã³ã¹ã¯æ¬¡ã®ãã㪠MessagePack圢åŒã§ãã
[type, msgid, error, result]
ã¬ã¹ãã³ã¹ã®å Žåãtypeã¯1ã§ããmsgid ã¯ãªã¯ãšã¹ãã§æå®ããæ°åãå ¥ã£ãŠããŸããerror ã¯ããããšã©ãŒãçºçããå Žåã¯ããªãããã®å€ãå ¥ããŸããæåããå Žå㯠nil ãå ¥ããŸããresult 㯠Remote Procedure Call ã®æ»ãå€ã§ãã
MessagePack-RPCã¯ããªã¯ãšã¹ããšã¬ã¹ãã³ã¹ãåé¢ããŠããŠãåæã«è€æ°ã®ãªã¯ãšã¹ããåºããããå¿çããªãå Žåã¯ã¿ã€ã ã¢ã¯ãåŠçãããããšãå¯èœã§ãã
ãŸããJavaãRuby ãªã©ã®ã¹ã¯ãªããèšèªã§ã MessagePack-RPC ããµããŒãããŠãããã®ã¯å€ãããã®ã§ããããã®èšèªããããŒããŠã§ã¢ãå¶åŸ¡ããããšãã§ããŸãã
MessagePack-VHDL(https://github.com/ikwzm/msgpack-vhdl)ã¯ãMessagePackãFPGAãASICã§æ±ãããã®ã©ã€ãã©ãªã§ããåœç¶ãè«çåæãå¯èœã§ãã
ãã®ã©ã€ãã©ãªã䜿ã£ãŠãFPGAäžã« MessagePack-RPC ã®ãµãŒããŒæ©èœãå®è£ ããŠã¿ãŸãããããããããšã§ãFPGAã§å®è£ ããåçš®æ©èœããã¹ãã³ã³ãã¥ãŒã¿ãŒããèšèªãCPUã«äŸåããªã圢ã§å©çšããããšãåºæ¥ãŸãã
MessagePack-RPC ã«ããããŒããŠã§ã¢å¶åŸ¡ã®å Žåããæ±çšOSã§äœ¿ãæã«ã¯ããã€ã¹ãã©ã€ããå¿ èŠã§ããããããMessagePack-RPC ã®ããã€ã¹ãã©ã€ãã¯ãã¡ãã»ãŒãžã®äžèº«ã«ã¯é¢ç¥ããŸããããããŸã§ãã¡ãã»ãŒãžã®ãã€ã圹(ã¡ãã»ã³ãžã£ãŒ)ã«åŸ¹ããŸãããããã£ãŠããã€ã¹ãã©ã€ãã¯ããŒããŠã§ã¢ããŠãŒã¶ãŒã¢ããªã±ãŒã·ã§ã³ã«ã¯äŸåãããã¡ã³ããã³ã¹ã容æã«ãªããŸãã
ããã§ã¯ã¢ãŒããã¯ãã£ããæ¬¡ã®ãããªJavaã§èšè¿°ãSynthesijer ã§é«äœåæããã¢ãžã¥ãŒã«ã MessagePack-RPC ã§å¶åŸ¡ããäŸã§ç€ºããŸã
public class Accumulator {
public int reg;
public int add(int x) {
reg = reg + x;
return reg;
}
}
Fig.2 MessagaPack-RPC Example Block Diagram
Accumulator_Server ã¯Javaã§èšè¿°ãSynthesijerã§é«äœåæãã AccumulatorãšãMsgPack-RPC-VHDLã䜿ã£ãŠæ§ç¯ããAccumulator_Interfaceã®äºã€ã§æ§æãããŸãã
public class Accumulator {
public int reg;
public int add(int x) {
reg = reg + x;
return reg;
}
}
äžã®Javaã³ãŒããSynthesijerã§é«äœåæãããã®ã§ããSynthesijer ã«ãã£ãŠã次ã®ãããªentityãæã€VHDLãã¡ã€ã«ãçæãããŸãã
entity Accumulator is
port (
clk : in std_logic;
reset : in std_logic;
reg_in : in signed(32-1 downto 0);
reg_we : in std_logic;
reg_out : out signed(32-1 downto 0);
add_x : in signed(32-1 downto 0);
add_return : out signed(32-1 downto 0);
add_busy : out std_logic;
add_req : in std_logic
);
end Accumulator;
ã·ãªã¢ã©ã€ãºãããMessagePack-RPCã®ãªã¯ãšã¹ãã¡ãã»ãŒãžã AXI4-Streamã€ã³ã¿ãŒãã§ãŒã¹ããåãåã£ãŠå éšåœ¢åŒã«å€æããŸãã
ã¡ãœããåãè§£æããŠè©²åœããã¡ãœããã€ã³ã¿ãŒãã§ãŒã¹(add_ifãset_ifãget_if)ã«msgidãšparamãæž¡ããŸãã
ã¡ãœããã€ã³ã¿ãŒãã§ãŒã¹(add_ifãset_ifãget_if)ããã®ã¬ã¹ãã³ã¹åºåèŠæ±ã調åããŠãã¬ã¹ãã³ã¹ã¡ãã»ãŒãžãæ§ç¯ããŸãã
ã¬ã¹ãã³ã¹ã¡ãã»ãŒãžãMessagePack圢åŒã«ã·ãªã¢ã©ã€ãºã㊠AXI4-Streamã€ã³ã¿ãŒãã§ãŒã¹ããåºåããŸãã
public宣èšããã倿°(reg)ã«å€ãèšå®ããã¢ãžã¥ãŒã«ã§ããæ¬¡ã®ãããªMessagePack-RPC ãªã¯ãšã¹ããåãä»ããŸãã
[0, msgid, "$SET", [{"reg": value}]]
ã¡ãœããåã¯"$SET"ã§ããé ã«$ãã€ããŠããã®ã¯ãåã«Javaã®ã¡ãœãããšååããã¶ããªããã«ããããã§ãã
ãã©ã¡ãŒã¿ã¯å€æ°åãšèšå®ããå€ã察ã«ãªã£ãŠããmapãæå®ããŸãããã®äŸã§ã¯å€æ°åã«"reg"ãå€(value)ã¯æŽæ°ãæå®ããŸããæåããã°æ¬¡ã®ãããªã¬ã¹ãã³ã¹ãè¿ã£ãŠããŸãã
[1, msgid, nil, nil]
public宣èšããã倿°(reg)ããå€ãèªãã¢ãžã¥ãŒã«ã§ããæ¬¡ã®ãããªMessagePack-RPC ãªã¯ãšã¹ããåãä»ããŸãã
[0, msgid, "$GET", [{"reg": nil}]]
ã¡ãœããåã¯"$GET"ã§ããé ã«$ãã€ããŠããã®ã¯ãåã«Javaã®ã¡ãœãããšååããã¶ããªããã«ããããã§ãã
ãã©ã¡ãŒã¿ã¯èªã¿åºããã倿°ã®ååãšèªã¿åºãæ°ãŸãã¯nilã察ã«ãªã£ãŠããmapãæå®ããŸãããã®äŸã§ã¯å€æ°åã«"reg"ãå€ã¯nilãæå®ããŸãã
æåããã°æ¬¡ã®ããã«ãèªã¿åºãã倿°ã®ååãšèªã¿åºããå€(value)ã察ã«ãªã£ãmapãè¿ã£ãŠããŸãã
[1, msgid, nil, [{"reg": value}]]
addã¡ãœãããåŒã³åºãã¢ãžã¥ãŒã«ã§ããæ¬¡ã®ãããªMessagePack-RPCãªã¯ãšã¹ããåãä»ããŸãã
[0, msgid, "add", [value]]
valueã«ã¯addã¡ãœããã«æž¡ãåŒæ°ãæå®ããŸããæåããã°æ¬¡ã®ããã«ãaddã¡ãœããã®æ»ãå€ãè¿ã£ãŠããŸãã
[1, msgid, nil, result]
add_ifã¯Accumulator ã«å¯ŸããŠåŒæ°ãadd_xã«åºåãããªã¯ãšã¹ãä¿¡å·(add_req)ã'1'ã«ããŸãã
Accumulatorã¯ãªã¯ãšã¹ãä¿¡å·(add_req)ã«å¯ŸããŠããžãŒä¿¡å·(add_busy)ã«'1'ãåºåããŠãåŠçãçµãããšããžãŒä¿¡å·ã«'0'ãåºåããŠçµæãadd_return ã«åºåããŸãã
add_if ã¯accumulator ããã®çµæ(add_return)ãå éšåœ¢åŒã«å€æããŠmsgidãšäžç·ã«Responderã«æž¡ããŸãã
PTTY_AXI ã¯AXI4-Streamã®å ¥åºåã€ã³ã¿ãŒãã§ãŒã¹ããã¹ãããã¯ã·ãªã¢ã«ã€ã³ã¿ãŒãã§ãŒã¹ãšããŠèŠããããã®IPã§ãã
- ãã¹ããšã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯AXI4ã§ãã
- Accumulator_Serverãšã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯AXI4-Streamã§ãã
- éä¿¡ãšåä¿¡ã«åã 128ãã€ãã®ãããã¡ãæã£ãŠããŸãã
/dev/zpttyã¯PTTY_AXIãä»ããŠAccumulator_Serverã®å ¥åºåãããããã·ãªã¢ã«ããŒãã«èŠããããã®ããã€ã¹ãã©ã€ãã§ãããã®ãã©ã€ãã䜿ãããšã«ãããAccumulator_Serverãšã®MessagePack-RPCã®ãããšãã¯ã·ãªã¢ã«ããŒããä»ããŠè¡ãããã«èŠããŸãã
/dev/zpttyã¯ãLinuxæšæºã®ttyã³ã¢éšãšãPTTY_AXIåºæã®ãã©ã€ãéšzptty.koã§æ§æãããŸãã
Linuxã®ãŠãŒã¶ãŒç©ºéã§åäœããã¯ã©ã€ã¢ã³ãããã°ã©ã ã§ãããã®ã¯ã©ã€ã¢ã³ãããã°ã©ã ãMessagePack-RPCã®ãªã¯ãšã¹ãã¡ãã»ãŒãžãäœæã/dev/zpttyãä»ããŠAccumulator_Serverã«éä¿¡ããŸãããããŠAccumulator_Serverããã®MessagePack-RPCã®ã¬ã¹ãã³ã¹ã¡ãã»ãŒãžã/dev/zpttyãä»ããŠåä¿¡ããŸãã
Distributed under the BSD 2-Clause License.
MessagePack (http://msgpack.org/)
MessagePack-RPC (https://github.com/msgpack-rpc/msgpack-rpc)
MessagePack for VHDL (https://github.com/ikwzm/msgpack-vhdl)