ÕªÒª£ºÓ¦IEEE1394ͬ¹âÏËͨµÀ×ÜÏߵĻ¥ÁªÐèÇó£¬Éè¼ÆÁËÒ»ÖÖ»ùÓÚ¹âÏËͨµÀµÄIEEE1394¹âÐźŴ«Êäϵͳ¡£¸ÃϵͳÒÔ»ùÓÚÏÖ³¡¿É±à³ÌÂß¼ÕóÁÐ(FPGA)Éè¼ÆµÄÐÒéÓ³ÉäÄ£¿éΪºËÐÄ£¬ÊµÏÖÁ˽«IEEE1394ÐźÅͨ¹ý¹âÏËͨµÀ½øÐд«ÊäµÄ¹¦ÄÜ¡£·ÂÕæ½á¹û±íÃ÷£¬¸ÃϵͳÄÜ´ïµ½1.0625Gb/sµÄ¹¤×÷ËÙÂÊ¡£
º½¿Õµç×Óϵͳ¾¹ý¼¸Ê®ÄêµÄ·¢Õ¹£¬ÕýÔÚ¾Àú´ÓÄ£Ä⻯ÏòÊý×Ö»¯ÏµÍ³µÄת±ä£¬Ö𲽿çÈëµÚ4´úº½¿Õµç×Óϵͳ£¬ÆäÖ÷ÒªÌصã¾ÍÊÇÔÚµÚ3´ú»ù´¡ÉÏ£¬ÒÔ¸ßËÙ´óÈÝÁ¿µÄÐÅÏ¢½»»»Îª»ù´¡£¬´Ó×ۺϻ¯Ïò¸ß¶È×ۺϻ¯·¢Õ¹£¬ÊµÏÖ×ÊÔ´¹²ÏíÓëÊý¾ÝÈںϣ¬ÆäÈÎÎñ»®·Ö¡¢Ä£¿é·ÖÅäºÍ×÷Òµµ÷¶È£¬¶¼ÒÀÀµÓÚÊý¾ÝÍøÂçϵͳµÄÐÔÄÜ£¬ÕâЩÐÔÄÜ°üÀ¨ÍøÂçÍØÆ˽ṹ¡¢´«Êä´ø¿í¡¢¿É¿¿ÐÔ¼°Êý¾ÝÑÓ³ÙÐÔÄܵȡ£Òò´Ë£¬Î´À´ÏȽøº½¿Õµç×ÓϵͳÖи÷Õ¾µãÖ®¼äµÄÊý¾ÝÁ÷½«¸üΪ¸´ÔÓ£¬°üÀ¨ÉäƵ¡¢ÊÓƵµÈ´óÁ÷Á¿Êý¾Ý£¬ÓеĽڵãËÙÂÊÐèÇ󽫳¬¹ý1Gb/s£¬¶øÏÖÓеĵÍËÙÊý¾Ý×ÜÏߺÜÄÑÂú×ãÈç´Ë¸ßËÙµÄÊý¾Ý´«ÊäÒªÇó¡£
ÃÀ¹ú¹ú¼Ò±ê׼ίԱ»áÓÚ1988Ä꿪ʼÖƶ¨µÄ¹âÏËͨµÀ(Fiber Channel£¬FC)ÊÇÒ»ÖÖ¸ßËÙ´®ÐÐ×ÜÏßÐÒ飬²»½ö¾ßÓиߴø¿í¡¢¸ß¿É¿¿ÐÔ¡¢µÍÑÓʱ¡¢´«Êä¾àÀëÔ¶¡¢ÍØÆËÁé»îµÄÓŵ㣬¶øÇÒÖ§³Ö¶àÖÖÉϲ㴫ÊäÐÒé¡£¹âÏËͨµÀµÄÕâÒ»ÓŵãʹµÃÔÚͬһÎïÀí½Ó¿ÚÉÏÔËÐжàÖÖÉϲãͨµÀ±ê×¼ºÍÍøÂçÐÒé³ÉΪ¿ÉÄÜ¡£Ä¿Ç°ÒѾʵÏÖµÄML-STD-1553µ½¹âÏËͨµÀÐÒéµÄÓ³É䣬ÒÔ¼°ML-STD-1553Ô¶³ÌÖÕ¶ËÆ÷¼þÓë¹âÏËͨµÀ»¥Áª·½°¸µÄϵͳ×ۺϣ¬ÎªÎ´À´º½¿Õµç×ÓϵͳÖв»Í¬×ÜÏߵĻ¥Á¬ÌṩÁËÒ»ÌõеÄ;¾¶£¬Ê¹µÃϵͳÔÚ±£Áô´«Í³ÍøÂçÍØÆ˺ÍÐÒéµÄͬʱ£¬»ñµÃ¹âÏËͨµÀËùÌṩµÄ¸ß´ø¿í·þÎñ¡£
»ùÓÚ´ËÉè¼Æ˼Ï룬±¾ÎÄÌá³öÁËÒ»ÖÖIEEE1394µ½¹âÏËͨµÀ´«ÊäÐÒéµÄÓ³Éä·½°¸£¬Ôڴ˹¤×÷»ù´¡ÉÏ£¬ÀûÓÃÏÖ³¡¿É±à³ÌÂß¼ÕóÁÐ(FPGA)£¬¶ÔËùÌá³öµÄÐÒéÓ³Éä·½°¸½øÐÐÁËÓ²¼þÉè¼ÆÓëʵÏÖ£¬Éè¼ÆÁËÒ»¸ö»ùÓÚFCµÄIEEE1394¹âÐźŴ«Êäϵͳ¡£
1 IEEE1394µ½¹âÏËͨµÀµÄÐÒéÓ³Éä
Ê×ÏȼòÒª½éÉܱ¾ÎÄÌá³öµÄÒ»ÖÖIEEE1394µ½¹âÏËͨµÀ´«ÊäÐÒéµÄÓ³Éä·½°¸£¬¸üÏêϸµÄ˵Ã÷¿É²Î¿¼ÎÄÏס£ËùÌáÐÒéÓ³Éä·½°¸µÄ»ù±¾Ë¼ÏëÊÇ£ºÔÚIEEE1394µ½FCÊý¾Ý°üµÄÓ³Éä¹ý³ÌÖУ¬±£ÁôFCÔÀ´µÄÖ¡¸ñʽÐÎʽ£¬½«FCÖ¡Í·²¿·ÖÖÐÔ´½ÚµãºÍÄ¿µÄ½ÚµãµÄµØÖ··Ö±ðÓ³ÉäΪIEEE1394Ô´½ÚµãºÍÄ¿µÄ½ÚµãµÄµØÖ·£¬²¢½«IEEE1394Êý¾Ý°üÖгýÁËÊý¾ÝÓòÍâµÄÆäËûÐÅÏ¢Ó³Éäµ½FCµÄ64Byte¿ÉÑ¡Ö¡Í·ÉÏ£¬Êý¾ÝÓòµÄÐÅÏ¢Ó³Éäµ½FCµÄÓÐЧÊý¾ÝÇø¡£´ËÍ⣬ÓÉÓÚFCÒ»¸öÊý¾ÝÖ¡µÄÓÐЧÊý¾ÝÇø³¤¶ÈÖ»ÓÐ2048Byte£¬¶øÔÚͨµÀ´«ÊäËÙÂÊ´óÓÚ200Mb/s£¬IEEE1394µÄµÈʱÊý¾Ý°ü»ò´«ÊäËÙÂÊ´óÓÚ400Mb/sʱ£¬Òì²½Êý¾Ý°üµÄ×î´óÓÐЧ³¤¶È½«³¬³öFCÓÐЧÊý¾ÝÇøµÄ´óС¡£Òò´Ë£¬µ±IEEE1394Êý¾Ý°üµÄ³¤¶È³¬³öÁËFCÓÐЧÊý¾ÝÇø³¤¶Èʱ£¬Ó¦¸Ã½«¸ÃÊý¾Ý°üÓ³Éä³ÉÒ»¸öÁ¬ÐøµÄFCÊý¾ÝÖ¡ÐòÁС£ÏÂÃæÒÔIEEE1394Òì²½Êý¾Ý°üµ½FCÊý¾ÝÖ¡µÄÓ³ÉäΪÀý£¬ËµÃ÷Á½ÖÖÐÒéµÄÓ³Éä¹ý³Ì¡£
IEEE1394Òì²½Êý¾Ý°ü¼°FCÊý¾ÝÖ¡¸ñʽÈçͼ1£¬Í¼2Ëùʾ¡£Í¼3ΪIEEE1394Êý¾ÝÖ¡µ½¹âÏËͨµÀÖ¡¸ñʽӳÉä¹Øϵ¡£
¶ÔÓ³Éä¹ý³ÌµÄ˵Ã÷£º
1)Ä¿µÄ½ÚµãºÍÔ´½ÚµãµØÖ·ÓÉIEEE1394µÄ16λÀ©³äµ½24λ£¬Ê¹ÍøÂç¹æÄ£±äµÃ±Èµ¥Ò»µÄIEEE1394ÍøÂçÒª´ó¡£
2)T-TYPEÓÃÀ´Ö¸Ã÷½»»»ÏûÏ¢µÄ´«ÊäÌØÐÔ£¬°üÀ¨½»»»µÄ´«Êä·½ÏòºÍÖÕ¶Ë-ÖÕ¶Ë(NT-NT)½»»»µÄÐÔÄܶ¨Òå¡£ÔÚNT-NTÀàÐͽ»»»ÖУ¬½«Îª½ÓÊÕNTÌṩ·¢ËÍNTµÄµØÖ·£¬»òÕßΪ·¢ËÍNTÌṩ½ÓÊÕNTµÄµØÖ·¡£
3)T—CTLÓÃÓÚʵÏÖFCÍøÂçºÍIEEE1394ÍøÂçÖ®¼äµÄÏûÏ¢´«Ê䣬ʵÏÖÁ½ÕßÖ®¼äµÄÇÅ·Á¬½Ó£¬Íê³ÉFCÍøÂçÖն˻òÍøÂç¿ØÖÆÆ÷ÓëIEEE1394½ÚµãÖ®¼äµÄÏûÏ¢´«Êä¡£
4)½«IEEE1394ÖеÄÖ¡Í·CRCУÑéºÍÊý¾ÝCRCУÑé·Ö¿ª¡£ÔÚIEEE1394Êý¾Ý´«ÊäÖУ¬Ê×ÏȽøÐеÄÊÇÖ¡Í·CRCУÑ飬Èç¹û·¢ÏÖ´íÎó£¬ÔòÁ¢¼´Å×Æú¸ÃÖ¡¡£ËùÒÔÕâÀïÉèÏ뽫IEEE1394Êý¾ÝCRC·ÅÔÚ¹âÏËͨµÀÊý¾ÝÖ¡µÄ¿ÉÑ¡Ö¡Í·£¬½«Ö¡Í·CRC·ÅÔÚ¹âÏËͨµÀÊý¾ÝÖ¡CRCУÑéÖУ¬ÕâÑù¿ÉÒÔÏȼì²âÖ¡Í·CRC£¬½Úʡϵͳ¿ªÏú¡£
2 IEEE1394¹âÐźŴ«ÊäϵͳÉè¼ÆÓëʵÏÖ
2.1 ϵͳµÄ¹¹¼Ü
ΪÔÚ¹âÏËͨµÀ´«ÊäIEEE1394Ðźţ¬¹¹½¨Á½ÖÖ×ÜÏß»¥Á¬µÄÓ²¼þƽ̨£¬ËùÉè¼ÆµÄ´«Êäϵͳ²»½öҪʵÏÖÁ½ÖÖÊý¾ÝÖ¡¸ñʽµÄת»»£¬»¹ÒªÊµÏÖFC-0¡¢FC-1¡¢FC-2ÐÒé²ãÖеIJ¿·Ö¹¦ÄÜ¡£±¾ÎÄËùÉè¼ÆµÄ»ùÓÚFCµÄIEEE1394¹âÐźŴ«Êäϵͳ½á¹¹Èçͼ4Ëùʾ£¬°üÀ¨IEEE1394ÐźÅÔ´£¬»ùÓÚFPGAµÄ1394-FCÐÒéת»»Æ÷£¬±ØÒªµÄÍâΧ½Ó¿ÚÆ÷¼þÒÔ¼°¹âÏËÊÕ·¢Ä£¿é£¬ÏµÍ³´«ÊäËÙÂÊ1.0625Gb/s¡£ÆäÖУ¬¹âÏËͨµÀFC-0²ãµÄ¹¦ÄÜÓɹâµçת»»Ä£¿éºÍ´®²¢Óë²¢´®×ª»»Ð¾Æ¬ÊµÏÖ£¬¶øIEEE1394µ½FCÊý¾ÝÖ¡Ó³Éä¼°FC-1¡¢FC-2²ã¹¦ÄÜÖ÷Òª»ùÓÚFPGA½øÐÐÓ²¼þ±à³ÌÀ´ÊµÏÖ¡£
2.2 »ùÓÚFPGAµÄ¹¦ÄÜÄ£¿éÉè¼ÆÓëʵÏÖ
ÔÚËùÉè¼ÆµÄϵͳÖУ¬FPGAÖ÷ҪʵÏÖIEEE1394µ½FCµÄÊý¾ÝÖ¡Ó³ÉäÒÔ¼°FC-1¡¢FC-2²ã¹¦ÄÜ¡£»ùÓÚFPGAµÄ¹¦ÄÜÄ£¿é½á¹¹Èçͼ5Ëùʾ¡£
1)FC-1²ã¹¦Äܵ¥Ôª°üÀ¨8b/10b±àÂë/½âÂëÄ£¿éºÍD/KÀàÐÍָʾģ¿é¡£
2)FC-2²ã¹¦Äܵ¥Ôª°üÀ¨Êý¾Ý½ÓÊÕÄ£¿é£¬·¢ËÍÄ£¿é¼°ÏµÍ³ÅäÖÃÄ£¿é¡£
3)IEEE1394µ½FCµÄÊý¾ÝÖ¡Ó³ÉäÄ£¿é(ÐÒéת»»)ÊÇFPGAÉè¼ÆµÄºËÐIJ¿·Ö¡£¸Ã²¿·ÖÄܹ»Íê³É¶ÔÐźÅÔ´·¢³öµÄIEEE1394Êý¾ÝÖ¡µ½FCÐÒéµÄÊý¾ÝÖ¡µÄÓ³É乤×÷£¬¼´½«IEEE1394Êý¾Ý֡ת»»ÎªFCÖ¡¸ñʽ¡£Í¬Ê±ÄÜ´Ó½ÓÊÕµ½µÄFCÊý¾ÝÖ¡»¹Ô³öIEEE1394Êý¾ÝÖ¡¡£
4)FPGAƬÄڵķ¢ËÍ(TX)²¿·ÖºÍ½ÓÊÕ(RX)²¿·Ö¾ù¼ÓÈëÁËÊý×ÖʱÖÓ¹ÜÀí(DCM)ºÍ·ÖƵÆ÷Ä£¿é£¬DCM¿ÉÒÔʹʱÖÓÐźÅͨ¹ýʱÖÓÊ÷´ïµ½¸÷¸öƬÄڼĴæÆ÷£¬ÒÔ¼õСƬÄÚʱÖÓÐźŵĶ¶¶¯ºÍÑÓʱ£¬Ìá¸ßϵͳÔËÐÐËÙÂÊ¡£
´ËÍ⣬ΪÁË·½±ãÔÚûÓÐÍâ½ÓIEEE1394ÐźÅÔ´µÄÇé¿ö϶ÔFPGAÄÚ²¿µÄ¹¦ÄÜÄ£¿é½øÐе÷ÊÔ£¬ÔÚFPGAµÄTXǰͨ¹ý²ÉÓÃÏßÐÔ·´À¡ÒÆλ¼Ä´æÆ÷IPºË¹¹½¨ÁËÒ»¸öαËæ»úÐòÁз¢ÉúÆ÷£¬¿ÉÒÔÓÃÀ´Ä£ÄâIEEE1394Êý¾ÝÔ´£¬²¢Í¨¹ý1¸ö¶þѡһѡÔñÆ÷ʵÏÖÍⲿÊäÈëÐźÅÓëÄÚ²¿Î±Ëæ»úÐòÁеÄÑ¡Ôñ¹¦ÄÜ¡£
FPGAÄÚ²¿µÄ¹¤×÷¹ý³Ì˵Ã÷ÈçÏ£ºIEEE1394Êý¾Ý´Ó16:32½â¸´ÓÃÆ÷Êä³öÖ®ºó£¬½øÈëIEEE1394Êý¾Ý²ð·ÖÄ£¿é£¬²úÉú¶ÔÓ¦ÓÚFCÊý¾ÝÖ¡µÄSOF¡¢DATA¡¢CRC¡¢EOFµÄÊý¾Ý¶Î£¬Éú³É·ûºÏFCÖ¡¸ñʽµÄÊý¾Ý¡£ÔÚÕâÖ®ºó£¬32:8¸´ÓÃÄ£¿é½«32bit²¢ÐÐÊäÈëµÄÊý¾Ý¸´ÓóÉ8bit²¢ÐÐÊä³öµÄÊý¾Ý¡£Ëæºó½øÈë8b/10b±àÂëÄ£¿é£¬Íê³É8b/10bµÄ±àÂ빤×÷²¢ÒÔ10bitλ¿í£¬106.25MHzµÄËÙÂÊËÍÈëVSC7145´®²¢/²¢´®Ð¾Æ¬£¬×îºóÒÔ1.0625GbsµÄËÙÂÊÊä³öµ½SFP¹âÊÕ·¢Ä£¿é£¬ÓɹâÊÕ·¢Ä£¿é½«µçÐźŵ÷ÖƳɹâÐźÅÊä³ö¡£
ÔÚRX½ÓÊÕ²¿·Ö£¬ÓɹâÊÕ·¢Ä£¿é»¹Ô³ÉµÄµçÐźÅͨ¹ýVSC7145´®²¢/²¢´®Ð¾Æ¬ºóÒÔ10bitµÄ²¢ÐÐÊý¾ÝÐÎʽÊäÈëµ½FPGAÖУ¬ÓÉ8b/10b½âÂëÆ÷½âÂ룬Êä³ö8bit²¢ÐÐÊý¾Ý(ÔÚ½âÂë¹ý³ÌÖУ¬½âÂëÆ÷¿ÉÒÔͨ¹ýÅжÏÂëÁ÷µÄ¼«ÐÔÀ´ÅбðÊÇ·ñÔÚ´«Êä¹ý³ÌÖгöÏÖÎóÂë)¡£8b/10b½âÂëÊä³öºóµÄÊý¾Ýͨ¹ý1¸ö8:32½â¸´ÓÃÄ£¿é½â¸´ÓóÉ32bitµÄ²¢ÐÐÊý¾Ý£¬²¢ÐÐ֧·ËÙÂÊΪ26.5625MHz£¬Ëæºó32λ²¢ÐÐÊý¾Ýͨ¹ýFCÖ¡¼ì²âÌáÈ¡Ä£¿é£¬Éú³É±êʶÐźÅËæ·Êä³ö¡£ÔÚCRCУÑé/ÅоöÄ£¿éÖУ¬Êý¾Ýͨ¹ýCRCλÔËËã·´Ó³ÊÇ·ñ³öÏÖÎóÂ룬²¢¸ø³öָʾ¡£ÔÚÕâÖ®ºó£¬FCÊý¾ÝÖ¡ÖØ×éΪIEEE1394Êý¾ÝÖ¡£¬×îºó¾ÓÉ32:16¸´ÓÃÄ£¿é½«32bit²¢ÐÐIEEE1394Ö¡Êý¾ÝÖØи´ÓóÉ16bit²¢ÐÐÊý¾Ý£¬Óë53.12MHzµÄËæ·ÐźÅһͬËͳöFPGAоƬ¡£
3 FPGA¹¦ÄÜÑéÖ¤
±¾Éè¼ÆÒÑÔÚXilinx Spartan3ϵÁеÄXc3s200ÖÐʵÏÖ£¬²¢ÔÚXilinx ISE 7.1·ÂÕæ»·¾³Ï½øÐÐÁ˹¦ÄܺÍʱÐò·ÂÕæÑéÖ¤¡£²ÉÓÃαËæ»úÐòÁз¢ÉúÆ÷Éú³ÉµÄαËæ»ú´úÂëÄ£ÄâIEEE1394Êý¾ÝÔ´£¬É趨ÿ1000ByteΪһ¸öÊý¾Ý°ü°ü³¤¡£
3.1 ¹¦ÄÜ·ÂÕæ½á¹û
1)ÔÚ·¢ËͶˣ¬IEEE1394Êý¾Ý°ü±»²ð·â£¬ÖØ×é³ÉFCÊý¾ÝÖ¡£¬²¢ÓÉ8b/10b±àÂëÆ÷±àÂëºóÊä³ö£¬Èçͼ6ÖзÂÕ沨ÐÎtx_dtout£¬ºÍTX_encode_ dtoutËùʾ¡£
2)ÔÚ½ÓÊնˣ¬FCÖ¡½á¹¹±»ÕýÈ·¼ì²â²¢ÌáÈ¡£¬ÔÚCRCУÑéÕýÈ·ºóÖØ×é³ÉIEEE1394Êý¾ÝÖ¡¸ñʽÊä³ö£¬Èçͼ7ÖзÂÕ沨ÐÎtx_dtout£¬crc32¼°rx_dtoutËùʾ¡£
¾·ÂÕæ²âÊÔ£¬FPGAʵÏÖIEEE1394µ½FCÊý¾ÝÖ¡¸ñʽµÄÓ³É书ÄÜ£¬¸÷Ä£¿é¾ùÕý³£¹¤×÷£¬Êý¾ÝͨÐÅÁ¼ºÃ£¬ÎÞ¶ª°üÏÖÏó¡£
3.2 ʱÐò·ÂÕæ½á¹û
¸ÃÉè¼ÆÔÚXc3s200ÉÏʵÏÖºó£¬FPGAËùʹÓõÄ×ÊÔ´Èç±í1Ëùʾ£¬Õû¸öϵͳ×ÊÔ´Õ¼ÓÃÂʽϵͣ¬×î¸ßÔËÐÐËÙÂÊÄÜ´ïµ½135.245MHz£¬Âú×ã106.25MHzµÄƬÉÏ×î¸ßÔËÐÐËÙÂÊÒªÇó£¬Éè¼Æ´ïµ½ÁËÔ¤ÆÚ½á¹û¡£
4 ½áÊøÓï
¹âÏËͨµÀ¾ßÓÐÖ§³Ö¶àÖÖÉϲ㴫ÊäÐÒéµÄÓŵ㣬±¾ÎÄÔÚÒÑÓй¤×÷µÄ»ù´¡ÉÏ£¬ÀûÓÃFPAG£¬¶ÔËùÌá³öµÄIEEE1394µ½¹âÏËͨµÀµÄÐÒéÓ³Éä·½°¸½øÐÐÁËÓ²¼þÉè¼Æ£¬Í¨¹ýFPGA¹¦ÄÜ·ÂÕ漰ʱÐò·ÂÕæÑéÖ¤ÁËËùÌá·½°¸µÄ¿ÉÐÐÐÔ¡£ÀûÓôËFPGAÐÒéת»»Ä£¿é£¬±¾ÎÄ»¹Éè¼ÆÁË»ùÓÚFCµÄIEEE1394¹âÐźŴ«Êäϵͳ£¬¸ø³öÁ˾ßÌåµÄÓ²¼þÉè¼Æ·½°¸¡£Ä¿Ç°£¬´ËϵͳµÄÖ÷Òªµ÷ÊÔ¹¤×÷ÒÑÍê³É£¬ºóÐøµÄ¹¤×÷½«Í¨¹ýϵͳ´«ÊäʵÑ飬¶ÔϵͳÐÔÄܽøÐзÖÎöÑо¿¡£