1 ÒýÑÔ
ÎÄÖвÉÓÃIPºË¸´Ó÷½·¨ºÍSOC¼¼Êõ»ùÓÚAVR 8λ΢´¦ÀíÆ÷AT90S1200IP CoreÉè¼ÆרÓÃPLC΢´¦ÀíÆ÷FSPLCSOCÄ£¿é¡£
Ëæ×ÅоƬ¼¯³É³Ì¶ÈµÄ·ÉËÙÌá¸ß£¬IC²úÒµÖÐÐγÉÁËÒÔƬÉÏϵͳSOC(System-on-Chip)¼¼ÊõΪÖ÷µÄÉè¼Æ·½Ê½¡£Ò»¸öµç×Óϵͳ»ò·Öϵͳ¿ÉÒÔÍêÈ«¼¯³ÉÔÚÒ»¸öоƬÉÏ£¬Í¬Ê±ICÉè¼ÆÄÜÁ¦ºÍEDA¹¤¾ßÈ´Ïà¶ÔÂäºóÓÚ°ëµ¼Ì幤ÒÕ¼¼ÊõµÄ·¢Õ¹£¬Á½ÕßÖ®¼äÈÕÒæ¼Ó¾çµÄ²î¾àÒѾ³ÉΪSOC¼¼Êõ·¢Õ¹¹ý³ÌÖÐÒ»¸öÍ»³öµÄÕÏ°¡£²ÉÓûùÓÚIP¸´Óü¼Êõ½øÐÐÉè¼ÆÊǼõСÕâÒ»²î¾àΩһÓÐЧµÄ;¾¶£¬IP¸´Óü¼Êõ°üÀ¨Á½¸ö·½ÃæµÄÄÚÈÝ:IPºËÉú³ÉºÍIPºË¸´Óá£
2 IPºË¸´ÓÃ
IPºË¸´ÓÃ(IP Core Reuse)ÊÇÖ¸ÔÚ¼¯³Éµç·Éè¼Æ¹ý³ÌÖУ¬Í¨¹ý¼Ì³Ð¡¢¹²Ïí»ò¹ºÂòËùÐèµÄ֪ʶ²úȨÄÚºË(µÚÈý·½IPºË)£¬È»ºóÔÙÀûÓÃEDA¹¤¾ß½øÐÐÉè¼Æ¡¢×ۺϺÍÑéÖ¤¡£IPºËÊÇIP¸´ÓõÄÔØÌåºÍºËÐÄÄÚÈÝ£¬»ùÓÚÓ¦ÓÃÐèÇ󡢹淶ÐÒéºÍÐÐÒµ±ê×¼µÄ²»Í¬£¬IPºËµÄÄÚÈÝÒ²ÊÇǧ²îÍò±ðµÄ¡£ÔÚIC²úÒµÖУ¬IPºË±»¶¨ÒåΪÓÃÓÚASIC£¬ ASSP£¬ PLDµÈоƬÖУ¬ÇÒÔ¤Ïȶ¨ÒåºÃ¹¦ÄÜ¡¢¾¹ýÑéÖ¤µÄ¡¢¿ÉÖظ´ÀûÓõĵç·¹¦ÄÜÄ£¿é£¬ÈçPCI½Ó¿ÚºË¡¢ADCºË£¬FIRÂ˲¨Æ÷ºË¡¢SDRAM¿ØÖÆÆ÷ºËµÈ¡£¸ù¾ÝICÉè¼Æ²ã´ÎµÄ²»Í¬¡£IPºË·ÖΪÒÔÏÂÈýÀà:ÈíIP(Soft IP)¡¢Ó²IP(Hard IP)£¬¹ÌIP (Firm IP)¡£ÎÄÖÐÖ÷ÒªÉæ¼°µ½ÈíIPºËÉè¼ÆºÍ¸´Óá£ÈíIPÊÇ¿ÉÀà±È¡¢×ۺϵÄÓ²¼þÃèÊöÓïÑÔ(HDL)Ä£ÐÍ£¬Í¨³£ÊÇ¿É×ۺϵÄRTLÄ£ÐÍ£¬°üÀ¨Âß¼ÃèÊö¡¢Íø±íºÍ²âÊÔµÄÎĵµ(Testbench)¡£ÈíIPÉè¼ÆÖÜÆڶ̡¢Í¶ÈËÉÙ£¬Ó빤ÒÕÎ޹أ¬¿ÉÁé»îÐ޸ģ¬ÔÚÉè¼ÆÖÐÖ»Ðë¶ÔʱÐò¡¢Ãæ»ýºÍ¹¦ºÄ½øÐÐÐÞÕý£¬¿É¸´ÓÃÐÔ×î¸ß¡£»ùÓÚÈíºËµÄÉè¼Æ(Soft Core-based design)ÊÇÒ»Öַdz£ÊµÓõÄSOCÉè¼Æ·½·¨¡£Ëü½«ÏµÍ³µÄ¹¦ÄÜ»®·ÖΪ²»Í¬µÄÈíºË£¬°üÀ¨Î¢´¦ÀíÆ÷¡¢ALU¡¢ROM¡¢PC¡¢ROM¡¢I/0µÈ¡£ÓÉÓÚÈíIPºË½öÌṩÄܹ»×ۺϵÄHDLÃèÊö£¬Òò´Ë¸´ÓÃÇ°ÐèÒªÉîÈ˵ØÁ˽âHDLÎļþÃèÊöµÄRTLÄ£ÐÍ£¬²ÉÓÃÊʵ±¹¤ÒÕ¼¼ÊõµÄ±ê×¼µ¥Ôª¿â£¬ÔÙÖØнøÐÐ×ۺϡ¢²¼¾Ö²¼Ïß¡¢ºó·ÂÕæÌáÈ¡Íø±í¡¢Ñé֤ʱÐòµÈ·´¸´¹¤×÷£¬×îºó¼¯³Éµ½SOCÉè¼ÆÖУ¬Òò´ËSOCÉè¼Æ¼´Éú³ÉµÄIPºËºÍµÚÈý·½¸´ÓÃIPºË¼¯³ÉÕûºÏ¡£
3 FSPLC΢´¦ÀíÆ÷IPºËÉè¼Æ
3.1 IPÈíºËÉú³É
ÎÄÖлùÓÚAVR8λ΢´¦ÀíÆ÷·ÖÎöʵ¼ÊPLCÌÝÐÎͼ¼°ÆäÖ¸Áî±í£¬Éè¼ÆÂß¼´¦ÀíÆ÷LP¡¢²¼¶û´¦ÀíÆ÷BP¡¢´æ´¢Æ÷λ½Ó¿ÚMBIµÈ3¸öÄ£¿éÓÃÓÚÌá¸ßPLCÖ´ÐÐËٶȣ¬ÏÂÃæÒÔÂß¼´¦ÀíÆ÷LPµ¥ÔªÄ£¿éΪÀý£¬ÃèÊöIPÈíºËÉú³É¡£PLCÌÝÐÎͼ°üÀ¨8ÖÖ»ù±¾µç·:×ó·ÖÖ§´¥µãLBC/·Ç´¥µãLBCN£¬ÓÒ·ÖÖ§´¥µãRBC/·Ç´¥µãRBCN£¬ Ë«·ÖÖ§´¥µãDBC/·Ç´¥µãDBCN£¬²»·ÖÖ§´¥µãNBC/²»·ÖÖ§·Ç´¥µãNBCN¡£ÎÄÖиù¾ÝÕâ8ÖÖ»ù±¾µç·Éè¼ÆÒ»¸ö16xl6´¥µã¾ØÕóµç·£¬¼´Âß¼´¦ÀíÆ÷LPµ¥Ôª£¬¾ØÕóÖи÷¸ö´¥µãÓɵç×Óµç·ģÄâPLCÌÝÐÎͼ»ù±¾µç·¡£ÔÚÈκÎÒ»¸ö´¥µãÉÏ°üÀ¨ºáÏßÊäÈë¡¢ÊúÏßÊäÈë¡¢Òý³öÊä³öÏßȦ¡£´¥µã¾ØÕóÖй²ÓÐ256¸öºáÏßÊäÈëȦ½Úµãhi£¬240¸öÊúÏßÊäÈëȦ½Úµãvi£¬256¸öÊä³öÏßȦIo¡£µ±Ò»Ðг¬¹ý16ʱ£¬×ªÏòÏÂÒ»ÐУ¬ÒԴ˹¹³É¾ØÕóµç·£¬Èçhi[i]£¬vi[i]£¬lo[i]±íʾij¸ö´¥µãµÄºáÏßÊäÈë¡¢ÊúÏßÊäÈë¡¢Êä³ö£¬ÄÇôÆäͬÐеÄÏÂÒ»¸ö´¥µãµÄºáÏßÊäÈë¡¢ÊúÏßÊäÈë¡¢Êä³ö·Ö±ðΪhi[i+ 1]¡¢vi[i+1]¡¢lo[i+1]£¬ÆäͬÁеÄÏÂÒ»¸ö´¥µãhi[i+16]¡¢vi[i+16]¡¢lo[i+16]£¬ÄÇôÊä³ö´¥µãµÄ±í´ïʽΪ
I0[i]=I0[i-1]hi[i]+vi[i-16]lo[i-16]+vi[i]lo[i+16-1]hi[ i+16] ¡£
ÒԴ˸÷¸ö´¥µã±Ë´Ë»¥ÏàÁ¬½Ó×é³É´¦ÀíÌÝÐÎͼµÄ´¥µã¾ØÕó¡£Èçͼ1Ëùʾ¡£
ͼ1 LPµ¥Ôª´¥µãµç×Óµç·ģÄâ
Âß¼´¦ÀíÆ÷LP²ÉÓÃVerilogÃèÊö£¬½èÖúModel-Sim½øÐй¦ÄÜ·ÂÕ棬Ñé֤ģ¿é¹¦ÄܵÄÕýÈ·ÐÔ¡£LPµ¥Ôª¹¦ÄÜ·ÂÕ沨ÐÎÈçͼ2Ëùʾ¡£
ͼ2 LPµ¥Ôª¹¦ÄÜ·ÂÕ沨ÐÎ
ÑéÖ¤¹¦ÄÜÕýÈ·ºó£¬½èÖúSynosysµÄ×ۺϹ¤¾ßSynplify Pro¶ÔÄ£¿é½øÐÐ×ۺϡ£×ۺϰüÀ¨Compiling¡¢Mapping¡¢Optimization¡£×ÛºÏʱ½«¾ModelSim¡£¹¦ÄÜ·ÂÕæÑéÖ¤µÄÔ´´úÂëµ÷ÈËSynplify Pro£¬Ö´ÐÐCompiler£¬±àÒëºó£¬´´½¨Ô¼ÊøÎļþ¡£sdc£¬±à¼Ô¼ÊøÎļþ¶ÔÄ£¿éÌí¼ÓÔ¼ÊøÌõ¼þ£¬°üÀ¨Ê±ÖÓ¡¢Ãæ»ý¡¢ÉÈÈËÉȳö¡¢ÑÓʱµÈ£¬Ìí¼ÓÔ¼ÊøºóÖ´ÐÐ×ۺϣ¬²úÉúÍø±íÎļþ¡£EDF¡£¸ù¾Ý×ۺϺó¸ø³öµÄ¡£logÎļþ¹Û²ìConstraintÎļþÖеÄÔ¼ÊøÌõ¼þÊÇ·ñÂú×ãÐèÒª£¬ÀýÈç°´ÕÕ¸ø³öµÄ“Worst Path Information£¬ÐÞ¸ÄÔ¼ÊøÒÔÂú×ãWorst PathµÄÒªÇó¡£×ÛºÏÍê³ÉºóÔÚQuartus ¢ò4¡£0Õ¹¿ªÍø±íÎļþ£¬²¼¾Ö²¼Ïߺó±àÒëÐγɡ£sofÎļþ£¬½«´ËÎļþϼ¶µ½Alters Nios¿ª·¢°å½øÐÐÑéÖ¤£¬ÑéÖ¤ÕýÈ·ºóÔÙ½èÖúModelSim½øÐÐʱÐòÑéÖ¤¡£
3.2 AVRIPºË¸´ÓÃ
AVR8λ΢´¦ÀíÆ÷AT90S1200IPºËÓÉopencores¡£orgÌṩ¡£Õû¸ö΢´¦ÀíÆ÷IPºË°üÀ¨ALU¡¢PC¡¢SRAM¡¢IR¡¢ROM¡¢I/0£¬¿ØÖƵȔ¸öÄ£¿é£¬¿ÉÒÔ·Ö³É3¸öµ¥Ôª£»È¡Ö¸µ¥Ôª¡¢Ö´Ðе¥ÔªºÍI/0µ¥Ôª¡£Ö¸ÁîÖ´ÐÐʱ£¬È¡Ö¸µ¥Ôª¸ºÔðÈ¡³öÏÂÒ»¸öÖ¸ÁִÐе¥Ôª¸ºÔðÖ´Ðе±Ç°Ö¸Á¶øLOµ¥Ôª¸º×ʺÍÍâ½çµÄÁ¬½Ó¡£È¡Ö¸µ¥ÔªºÍÖ´Ðе¥Ôª×é³É΢´¦ÀíÆ÷µÄCPU¡£
Õû¸öAVRIPºË°üÀ¨Ðí¶à¼Ä´æÆ÷:Ö¸Áî¼Ä´æÆ÷¡¢Ö¸Á·Ý¼Ä´æÆ÷¡¢³ÌÐò¼ÆÊýÆ÷¡¢Í¨ÓüĴæÆ÷¡¢´æ´¢µØÖ·¼Ä´æÆ÷(MAR)£¬1/O¿Ú¿ØÖƼĴæÆ÷µÈ¡£Õû¸öϵͳµÄ¹¤×÷¾ÍÊÇ»ùÓÚÕâЩ¼Ä´æÆ÷Ö®¼äµÄÊý¾Ý´«Êä¡£Éè¼ÆËùÓеļĴæÆ÷ÒÔ¼°ËüÃÇÖ®¼äµÄ×éºÏÂß¼¼°ÆäÁ¬½Ó¾ÍÊÇϵͳµÄÊý¾ÝͨµÀÉè¼Æ¡£¿ØÖÆÄ£¿é¾ö¶¨ÔõÑù½øÐмĴæÆ÷´«Óä¡£Êý¾ÝͨµÀºÍ¿ØÖƵ¥Ôª×é³ÉÁËÕû¸ö΢´¦ÀíÆ÷¡£
¶ÔÓÚAT90S12001PºË¸´Ó㬿¼Âǵ½IPºËÔÚSOCÖм¯³ÉÕûºÏ£¬Ê×ÏÈÐë³¹µ×Á˽âËù¸´Óú˵ļܹ¹ºÍÖ¸Á£¬½èÖúModelSim½øÐй¦ÄÜ·ÂÕ棬½¨Á¢Testbenchƽ̨²âÊÔ²¨ÐÎÑéÖ¤¹¦ÄܵÄÕýÈ·ÐÔ£¬Èçͼ3Ëùʾ¡£±àÒëÎÞÎóÇÒ¹¦ÄÜÕýÈ·ºó½èÖúSynplify Pro¶ÔIPºËÊδúÂë½øÐÐÂß¼×ۺϣ¬Èç¹ûVHDL³ÌÐòÕýÈ·ÎÞÎó²¢ÇÒÆä±à³Ì·ç¸ñ·ûºÏSynplify Pro×ÛºÏÒªÇó£¬Synplify Pro½«²úÉúÒ»¸öÍø±íÎļþ(¡£EDFÎļþ)£¬ÔÙ½èÖúQuartusA4¡£0ºÍModelSim·Ö±ð½øÐÐFPGAÑéÖ¤ºÍʱÐòÑéÖ¤£¬´Ë¹ý³Ì²»¶ÏÑ»·£¬Ö±ÖÁ¸´ÓõÄ΢´¦ÀíÆ÷IPºËûÓÐÈκδíÎó¡£
ͼ3 AVRIP¸´ÓòâÊÔƽ̨Testbench¿òͼ
×÷ÕߣºÈ½·å ÀîÈó¹â ÐìÃÀ»ª ¿µÖ¾Ó¢ À´Ô´£ºµ¥Æ¬»úÓëǶÈëʽϵͳ