ľ³æ (Ö°Òµ×÷¼Ò)
×Óµ¯¸ç-----С±± ![]()
|
[½»Á÷]
¡¾·ÖÏí¡¿»ùÓÚJavaµÄFPGA¿É±à³ÌǶÈëʽϵͳ ÒÑÓÐ5È˲ÎÓë
¡¡´«Í³µÄǶÈëʽ²úÆ·Ö»ÄÜʵÏÖijÖÖÌØ¶¨µÄ¹¦ÄÜ£¬²»ÄÜÂú×ãÓû§¿É±äµÄ·á¸»¶à²ÊµÄÓ¦ÓÃÐèÇó¡£Îª½â¾öÕâ¸öÎÊÌ⣬±¾ÎÄÉè¼Æ²¢ÊµÏÖÁËÒ»ÖÖʹÓÃJava×÷ΪÈí¼þƽ̨µÄ»ùÓÚFPGAµÄ¿É±à³ÌǶÈëʽϵͳ£¬ÒÔʵÏÖϵͳ¶Ô¶àÖÖ±¾µØÓ¦ÓúÍÍøÂçµÄÖ§³Ö¡£
¡¡¡¡1. ¸ÅÊö
¡¡¡¡´«Í³µÄǶÈëʽϵͳÉè¼ÆµÄÖ÷ҪĿ±êÊÇÕÒµ½Ò»ÖÖÓÅ»¯µÄÌåϵ½á¹¹À´Íê³Éµ¥Ò»µÄ£¬Ìض¨µÄ¹¦ÄÜ¡£¶ÔÕâÑùµÄϵͳÀ´Ëµ£¬ASICºÍºËÐÄ´¦ÀíÆ÷ÊÇ×÷ÎªÌØ±ðµÄ¹¹¼þÄ£¿é¼ÓÒÔ¿¼ÂǵģºÉè¼ÆÕ߸ù¾ÝÓ¦ÓõÄÒªÇóÑ¡ÔñÊʵ±µÄASIC£¬¸ù¾Ý¸ø¶¨µÄÐÔÄÜÒªÇó±ÈÈç´¦ÀíÆ÷Ö÷Ƶ£¬ÏµÍ³Îȶ¨ÐÔ£¬ÒÔ¼°¶Ô¹¦ºÄµÄÒªÇóµÈÑ¡ÓÃÊʵ±µÄ´¦ÀíÆ÷Äںˡ£
¡¡¡¡È»¶ø£¬ÔÚµ±½ñÒÆ¶¯Í¨ÐÅÒѾ½øÈëÿ¸öÈ˵ÄÉú»îµÄ½ñÌ죬ÏÖÔÚµÄǶÈëʽϵͳ±ÈÈçPDAµÈÒѾ²»Í¬ÓÚ´«Í³ÒâÒåÉϵÄǶÈëʽϵͳÁË£¬ËüÃÇÓÐ×Ô¼ºµÄ¶ÀÌØÌØµã¡£¿Í¹ÛÐèÒªÒªÇóËüÃÇÄܹ»Ö§³Ö¶àÖÖÓ¦Óù¦ÄÜÈçÍøÒ³ä¯ÀÀ£¬²¥·ÅÒôƵ/ÊÓÆµÎļþ£¬ÒÔ¼°½øÐÐÎÞÏßÍøÂçͨÐŵȡ£
¡¡¡¡ÕâÑù¿´À´£¬´«Í³µÄÉè¼ÆË¼Â·ÒòÎªÖ»ÃæÏòµ¥Ò»µÄÓ¦Óã¬ÎÞ·¨Âú×ã¶àÓ¦ÓÃǶÈëʽϵͳµÄÐèÇó¡£¶ø½â¾öÕâÒ»ÎÊÌâµÄÁ¼ºÃ;¾¶±ãÊÇÏòǶÈëʽϵͳÒýÈë¿É±à³ÌÄÜÁ¦£¬ÒÔʹµÃϵͳÄܹ»¸ù¾ÝÓû§µÄ²»Í¬ÒªÇóʵÏÖ¶Ô²»Í¬Ó¦ÓõÄÖ§³Ö¡£
¡¡¡¡ÎªÁËÏòϵͳÖÐÒýÈë¿É±à³ÌÄÜÁ¦£¬ÎÒÃÇ¿¼ÂÇÔÚϵͳÖÐǶÈëFPGA£¬ÒòΪFPGA¾ßÓÐÏÂÁÐÌØµã£¬Ê¹µÃËü³ÉΪÎÒÃǵÄÊ×Ñ¡£º
¡¡¡¡1.ÏÖÔÚµÄFPGAµÄ´¦ÀíÄÜÁ¦ºÍÂß¼ÈÝÁ¿ÒѾ½Ó½üÓÚרÓÃASIC£¬¹¦ºÄÒ²±È½ÏµÍ£¬Äܹ»Âú×ãÎÒÃÇϵͳÉè¼ÆµÄÒªÇó;
¡¡¡¡2.ÓÉÓÚFPGA¾ßÓеĿÉÖØ±à³ÌÄÜÁ¦£¬Ê¹ÓÃÁËFPGAµÄǶÈëʽϵͳÄܹ»Âú×ã¸÷ÖÖ²»Í¬µÄÓ¦ÓÃÒªÇó;
¡¡¡¡´ÓǶÈëʽϵͳ¹ÜÀíµÄ½Ç¶ÈÀ´Ëµ£¬¶ÔÍøÂçͨÐŵÄÖ§³ÖÒ²ÊǺÜÓбØÒªµÄ£¬Ò²ÊǺÜÓÐÌØÉ«µÄÒ»¸öÓ¦Óã¬ÒòΪËüʹµÃ´ÓÔ¶¶Ë·þÎñÆ÷ÏÂÔØÐµÄÓ¦ÓóÌÐò²¢ÔÚ±¾µØÔËÐгÉΪ¿ÉÄÜ¡£ÎªÊµÏÖ¶ÔÕâ¸ö¹¦ÄܵÄÖ§³Ö£¬ÎÒÃDzÉÓÃJava×÷ΪÈí¼þƽ̨¡£ÒòΪJavaÔËÐÐÔÚJavaÐéÄâ»úÖ®ÉÏ£¬ËüÄܹ»ÏÂÔØ²¢Ö´ÐÐеÄÓ¦ÓóÌÐò´úÂ룬²¢ÇÒÎÞÐèÔÚÏÂÔØºóÖØÐÂÆô¶¯ÏµÍ³¡£
¡¡¡¡×ÛÉÏËùÊö£¬Õâ¸öеÄǶÈëʽϵͳÊÇ»ùÓÚJavaµÄ£¬ÓÐÒ»¸öFPGAºÍ±ê×¼´¦ÀíÆ÷ÏàÁ¬¡£ÎÒÃÇͨ¹ýÍøÂçÏÂÔØJava´úÂëºÍ¿ÉÒÔ¶ÔFPGA½øÐбà³ÌµÄ±ÈÌØÁ÷¡£¸ÃϵͳҲ֧³Ö¶ÔFPGAµÄ¶¯Ì¬ÖØÐÂÅäÖá£ÎªÁËʵÏÖÓ²¼þ(FPGA)ºÍÈí¼þ(JavaÓ¦ÓóÌÐò´úÂë)Ö®¼äµÄͨÐÅ£¬ÓÖ¶¨ÒåÁËÒ»×é±¾µØAPI£¬ÒÔʹµÃ´ÓJavaÓ¦ÓòãÄܹ»·ÃÎʵ½µ×²ãµÄÓ²¼þ¡£ÎªÁ˵÷ÓÃÕâЩ±¾µØAPI£¬²ÉÓÃÁËJava±¾µØ½Ó¿Ú(JNI)¡£ÔÚ±¾ÎÄÖУ¬½«Ò»Ð©Javaº¯Êý(Java method)ÓÃFPGA¿É±à³ÌÓ²¼þÀ´ÊµÏÖ£¬³ÆÖ®ÎªÓ²¼þ·½·¨(HW method)¡£
¡¡¡¡2. ϵͳÉè¼Æ
¡¡¡¡ÊµÏÖÒ»¸öJavaº¯Êý¹¦ÄܵĶÔÓ¦µÄÓ²¼þ·½·¨ÊµÏÖµÄÂß¼½á¹¹Í¼Èçͼ1Ëùʾ¡£

ÊäÈ뻺´æºÍÊä³ö»º´æ·Ö±ðÓÃÀ´½ÓÊÕÊäÈë²ÎÊýºÍ´æ´¢Êä³ö½á¹û¡£¿ØÖÆ»º´æÓÃÓÚ¶ÔÓ²¼þ·½·¨µÄ¿ØÖƺͼì²â£¬±ÈÈçÏòÓ²¼þ·½·¨·¢³öÆô¶¯Ö¸Á¼ì²éÆäËù´¦µÄ״̬²¢ÅжϲÙ×÷ÊÇ·ñÍê³ÉµÈ¡£¸ÃÄ£¿éÖеÄËùÓлº´æ¶¼Ó³Éäµ½´¦ÀíÆ÷ÎïÀíµØÖ·¿Õ¼äÖУ¬´¦ÀíÆ÷¿ÉÒÔʹÓÃÕý³£µÄ¶ÁдָÁîÍê³É¶ÔÕâЩ»º´æµÄ·ÃÎÊ¡£
¡¡¡¡Í¼2ÊǸÃǶÈëʽϵͳµÄÓ²¼þƽ̨£¬ÓÉÒ»¸ö±ê×¼´¦ÀíÆ÷£¬Ò»¸öFPGAºÍÒ»¸öϵͳ´æ´¢µ¥Ôª¹¹³É¡£ËüÃÇÖ®¼äͨ¹ý¹²ÏíµÄϵͳ×ÜÏßÁ¬½ÓÔÚÒ»Æð¡£

µ±´¦ÀíÆ÷ÏòÒ»¸öÓ²¼þ·½·¨·¢³ö¶Áд²Ù×÷Ö¸Áîʱ£¬¸ÃÓ²¼þ·½·¨ÔÚÆä×Ô¼ºµÄµØÖ·½âÂëÆ÷µÄ°ïÖúÏÂÏòÊý¾Ý×ÜÏßÉÏ·¢ËͶÔÓ¦µÄÏìÓ¦Ðźš£ÔÚÕâÀÎÒÃÇ¿ÉÒÔÈÏΪÊÇ´¦ÀíÆ÷·¢ÆðµÄÓ²¼þ/Èí¼þͨÐÅÖ¸Á¶øFPGAÔòÊÇ×÷Ϊһ¸ö´ÓÊôµ¥Ôª×ö³ö»ØÓ¦¡£ÒòΪÔÚ´¦ÀíÆ÷·¢Æð³õʼָÁîºó£¬¾ÍÓÉ¿ÉÅäÖùÜÀíÆ÷À´¸ºÔð¹ÜÀíFPGA±à³Ì¡£ÕâÑùÒ»À´£¬¾ÍʵÏÖÁË´¦ÀíÆ÷ºÍFPGAµÄ²¢ÐÐÔËÐС£
¡¡¡¡Èçͼ3Ëùʾ£¬ÎÒÃÇÑ¡ÔñJava×÷ΪÈí¼þƽ̨£¬²¢ÇÒ×°ÔØÁËÒ»¸öǶÈëʽ²Ù×÷ϵͳΪJavaʵʱӦÓóÌÐòÌṩ»ù±¾µÄ·þÎñ£¬±ÈÈçÏß³ÌºÍÆäËüÓ²¼þ¹ÜÀíµÈ¡£

ͨ¹ýϵͳ¹ÜÀíÆ÷£¬¿ÉÒÔ´ÓÔ¶³Ì·þÎñÆ÷ÏÂÔØJavaÓ¦ÓóÌÐò¡£ÏµÍ³¹ÜÀíÆ÷Ö÷ҪʵÏÖÁËÏÂÃæ3ÖÖÐÒ飺
1. Ó¦ÓóÌÐò´úÂë(°üÀ¨¿É¶ÔFPGA½øÐбà³ÌµÄ±ÈÌØÁ÷)ÏÂÔØÐÒé;
¡¡¡¡2. ÓÃÓÚÔ¶³Ì¹ÜÀíµÄϵͳά»¤Ïà¹ØµÄÐÒé;
¡¡¡¡3. ¿ØÖƶÔǶÈëʽϵͳ·ÃÎÊȨÏÞµÄÈÏÖ¤ÐÒé¡£
¡¡¡¡ÏµÍ³¹ÜÀíÆ÷°üÀ¨»ùÓÚsocketÁ¬½ÓµÄ¿Í»§¶ËÀà¼ÓÔØÆ÷¡£Ô¶¶ËÓ¦ÓóÌÐò¿ÉÒÔÏÂÔØµ½±¾µØ²¢°´ÕÕÏÂÃæµÄ¹ý³ÌÖ´ÐУº
¡¡¡¡1. Íê³ÉÈÏÖ¤¹ý³Ì£¬ÏµÍ³½øÈë¹ÜÀíģʽ;
¡¡¡¡2. ÏÂÔØÓ¦ÓóÌÐò´úÂ룬Íê³Éϵͳ³õʼ»¯£¬±ÈÈç¼ÓÔØFPGA¿É±à³Ì±ÈÌØÁ÷µ½ÏàÓ¦µÄ´æ´¢µ¥Ôª;
¡¡¡¡3. Ö´ÐÐеÄÓ¦ÓóÌÐò¡£
¡¡¡¡ÔÚ¸ÃϵͳÖУ¬ÎªÁ˼ò»¯Æð¼û£¬Ô¤ÏÈÓ³ÉäÓ²¼þ·½·¨µØÖ·µ½È·¶¨µÄϵͳÎïÀí´æ´¢Çø£¬Ä¿µÄÊÇΪÁËѰַ²Ù×÷µÄ·½±ã¿ì½Ý¡£
¡¡¡¡ÓÉÓÚÎÒÃÇʹÓÃÁËJavaÈí¼þƽ̨£¬Ó¦ÓóÌÐò¾ÍÎÞ·¨Ö±½Ó·ÃÎʵײãµÄÓ²¼þ¡£Õâ¾ÍÊÇ˵£¬ÔËÐÐÔÚ´¦ÀíÆ÷JavaÐéÄâ»úÉϵÄÓ¦ÓóÌÐò²»ÄÜÖ±½Ó·ÃÎÊÓ³Éäµ½FPGAÖÐÓ²¼þ·½·¨µÄ»º´æÇøÓò¡£Îª½â¾öÕâ¸öÎÊÌ⣬ÀíÂÛÉÏ¿ÉÒÔ²ÉÓÃÏÂÃæÁ½ÖÖ·½·¨£º
¡¡¡¡1. ÐÞ¸ÄJavaÐéÄâ»ú£¬Ê¹Æä¾ßÓжԴ¦ÀíÆ÷ÎïÀíµØÖ·µÄÖ±½Ó·ÃÎÊÄÜÁ¦;
¡¡¡¡2. µ¥¶ÀÉè¼ÆÒ»ÖÖJava±¾µØ½Ó¿Ú(JNI)£¬Ê¹µÃÓ¦ÓóÌÐòͨ¹ý¸Ã½Ó¿ÚÌṩµÄ¹¦ÄÜʵÏÖ¶ÔÓ²¼þ·½·¨Ó³Éäµ½µÄÎïÀíµØÖ·µÄ·ÃÎÊ¡£
¡¡¡¡¾¡¹ÜµÚÒ»ÖÖ·½°¸µÄЧÂʽϸߣ¬²¢ÇÒûÓÐÒýÈë¶îÍ⿪Ïú£¬µ«ÊÇÐÞ¸ÄJavaÐéÄâ»úÄÚºËÊÇÏ൱·±ÔӵŤ×÷£¬Í¬Ê±Ò²¿ÉÄÜ»áÒýÆðDZÔÚµÄϵͳ²»Îȶ¨¡£µÚ¶þÖÖ·½°¸ËäÈ»ÒýÈëÁËÒ»¶¨µÄ¶îÍ⿪Ïú£¬µ«±ãÓÚÒÆÖ²ºÍʵÏÖ¡£Òò´Ë£¬ÎÒÃDzÉÓ÷½°¸¶þ£¬ÔÚJavaÐéÄâ»úºÍJava±¾µØ½Ó¿ÚÖ®ÍâÓÖÉè¼ÆÁËÒ»¸ö±¾µØÍ¨Ðſ⡣
¡¡¡¡±¾µØÍ¨ÐÅ¿âAPIÐÎʽÈçÏ£º
¡¡¡¡int hwWriteXXX(int addr, XXX p);
¡¡¡¡int hwWriteArrayXXX(int addr, XXX[] p);
¡¡¡¡XXX hwReadXXX(int addr);
¡¡¡¡XXX[] hwReadArrayXXX(int addr);
¡¡¡¡int hwConfig(int cf_mem_addr, int bitstr_size);
¡¡¡¡Java±¾µØ½Ó¿Ú²ã½Ó¿ÚµÄÐÎʽÈçÏ£º
¡¡¡¡class HWInterface{
¡¡¡¡static int ConfigStatus;
¡¡¡¡public static native int setParam(CID hw_cid, object P)
¡¡¡¡{
¡¡¡¡if(type_of_P == XXX)
¡¡¡¡err = hwWriteXXX(hw_cid.addr, (XXX)P);
¡¡¡¡return err;
¡¡¡¡}
¡¡¡¡public static native int getResult(CID hw_cid, object R);
¡¡¡¡public static native int setCMD(CID hw_cid, int cmd);
¡¡¡¡public static native int getStatus(CID hw_cid);
¡¡¡¡public synchronized static native int configHW( CID hw_cid);
¡¡¡¡}
¡¡¡¡ÔÚÉÏÃæ´úÂëÖУ¬XXX±íʾ»ù±¾µÄJavaÊý¾ÝÀàÐÍÈçÕûÐÍ(integer)¡¢¸¡µãÐÍ(float)¡¢Ë«¾«¶ÈÐÍ(double)µÈ¡£
JavaÓ¦ÓóÌÐòͨ¹ýÀàHWInterfaceÌṩµÄ·½·¨·ÃÎʱ¾µØ¿â¡£ÉÏÃæµÄ´úÂëÖиø³öÁËsetParamµÄ¾ßÌåʵÏÖ¡£ÆäÖУ¬CIDÊǰüÀ¨Ó²¼þ·½·¨Ó³Éäµ½µÄ»º´æµØÖ·µÄÒ»¸ö¶ÔÏ󣬶ÔÓ¦ÓÚÿ¸öÓ²¼þ·½·¨µÄCID¶¼ÊÇΨһµÄ£¬Òò´Ë£¬¸ÃµØÖ·ºÍ»º´æÇø´óС¶¼ÊÇÊÂÏÈÒѾȷ¶¨Á˵ġ£µ«ÊÇ£¬ÓÉÓÚϵͳÖÐÖ»ÓÐÒ»¸öÅäÖÿØÖÆÆ÷£¬ÎÒÃÇÎÞ·¨Í¬Ê±¾ÍÁ½¸ö»ò¶à¸öÓ²¼þ·½·¨ÏòFPGA½øÐбà³Ì£¬Ò²¿ÉÒÔ˵ͬһʱ¿ÌÖ»ÄÜÓÐÒ»¸öÓ²¼þ·½·¨ÔÚʹÓÃÅäÖÿØÖÆÆ÷¡£Îª´Ë£¬ÒýÈëÁËÒ»¸ö¾²Ì¬±äÁ¿ConfigStatusÀ´·´Ó³ÅäÖÿØÖÆÆ÷µÄµ±Ç°×´Ì¬¡£ËùÒÔ£¬·ÃÎÊÅäÖÿØÖÆÆ÷µÄº¯ÊýconfigHW()ÊǾ²Ì¬µÄͬ²½µÄ¡£
¡¡¡¡Ê¹ÓÃÉÏÃæ¸ø³öµÄ½Ó¿Ú£¬ÔòÏÂÃæÕâ¶Î´úÂë
¡¡¡¡methodA()
¡¡¡¡{
¡¡¡¡¡;
¡¡¡¡int a = objA.m1(2); //SW method
¡¡¡¡int b = objB.m2(3); //HW method
¡¡¡¡int c = a + b;
¡¡¡¡¡;
¡¡¡¡}
¡¡¡¡¾ÍÓ¦¸Ãд³ÉÏÂÃæµÄÐÎʽ£º
¡¡¡¡methodA()
¡¡¡¡{
¡¡¡¡¡;
¡¡¡¡1 HWInterface.configHW(cid2); // cid2 is the ID of HW method m2
¡¡¡¡2 Object P = new Integer(3);
¡¡¡¡3 HWInterface.SetParam(cid2,P);
¡¡¡¡4 HWInterface.startHW(cid2);
¡¡¡¡5 int a = objA.m1(2);
¡¡¡¡6 Object R = new Integer();
¡¡¡¡7 While(HWInterface.getResult(cid2, R) == 0)
¡¡¡¡; //wait until HW method finished
¡¡¡¡8 HWInterface.getResult(cid2, R);
¡¡¡¡9 int b = ((Integer)R.getValue());
¡¡¡¡10 int c = a + b;
¡¡¡¡¡;
¡¡¡¡}
¡¡¡¡ÔÚÉÏÀýÖУ¬ÎªÁËÖ´ÐÐFPGAÖеĺ¯ÊýobjB.m2()£¬Ê×ÏȶÔFPGA½øÐбà³Ì(Line1)¡£È»ºó£¬½«²ÎÊý¿½±´µ½Ó²¼þ·½·¨µÄÊä¡¡È뻺´æÖÐ(Line3)£¬²¢¶ÔÓ²¼þ·½·¨½øÐгõʼ»¯(Line4)¡£×îºó£¬²ÉÓÃÁËÒ»¸öÑ»·º¯Êý³ÖÐø¼ì²éÓ²¼þ·½·¨»º´æµÄ״̬(Line7,8)£¬Ö±ÖÁ¼ÆËãÍê³É£¬È»ºó¿½±´µÃµ½½á¹û(Line9)¡£
¡¡¡¡3. ϵͳʵÏÖ
¡¡¡¡Ê¹ÓÃARM710T´¦ÀíÆ÷ºÍVirtexµÄFPGA£¬¸ù¾ÝÉÏÎĸø³öµÄÉè¼Æ·½°¸£¬ÎÒÃÇʵÏÖÁËÒ»¸öǶÈëʽϵͳ¿ª·¢Æ½Ì¨¡£¸Ãƽ̨°üÀ¨Ò»¸öÍøÂç½Ó¿Ú£¬Á½¸öµ÷ÊÔ½Ó¿Ú£¬Ò»¸öPCIÖ÷»ú½Ó¿ÚºÍÒ»¸ö´®Ðпڡ£²¢ÒÆÖ²ÁËÒ»¸öǶÈëʽ²Ù×÷ϵͳºÍÒ»¸öСÇɵÄJavaʵʱÔËÐл·¾³¡£Èçͼ4£º

¡¡4. ×ܽá
¡¡¡¡±¾ÎÄÓÃÒ»ÖÖȫеÄ˼·£¬¶Ô´«Í³µÄǶÈëʽϵͳ½øÐÐÁ˸Ľø£¬ÊµÏÖÁËÒ»ÖÖÄܹ»Ö§³Ö¶àÖÖÓ¦ÓõÄǶÈëʽϵͳƽ̨¡£ÀûÓÃFPGAµÄ¿É±à³ÌÐÔºÍJavaƽ̨Á¼ºÃµÄÒÆÖ²ÐÔÄÜ£¬¸Ãƽ̨ÍêÈ«Äܹ»Âú×ãÎÒÃǵÄÉè¼ÆÒªÇó¡£µ±È»£¬Ò²Óв»×ãÖ®´¦£¬±ÈÈç¶ÔÅäÖÿØÖÆÆ÷µÄ״̬µÄ»ñÈ¡£¬¿ÉÒÔ¿¼ÂÇʹÓÃÖжϵķ½Ê½À´ÊµÏÖ£¬¶ø²»ÊDzÉÓñ¾ÎÄÖеÄÑ»·²éѯ»úÖÆ¡£Õ⽫ÔÚÒÔºóµÄ¹¤×÷ÖмÓÒԸĽø¡£
Õª×Ô£º21IC |
» ²ÂÄãϲ»¶
» ±¾Ö÷ÌâÏà¹Ø¼ÛÖµÌùÍÆ¼ö£¬¶ÔÄúͬÑùÓаïÖú:
|