x
x

ΪʲôҪѧµ¥Æ¬»ú£¿

·¢²¼Ê±¼ä£º2013-9-17 10:59    ·¢²¼Õߣºedu118gct
¹Ø¼ü´Ê£º µ¥Æ¬»ú
Ò»¡¢µ¥Æ¬»úÓ봫ͳµç×Ó¼¼ÊõµÄÇø±ð
   
µ±½ñÉç»á£¬Ó¦Óõ¥Æ¬»úµÄ²úÆ·ÒѾ­ÉøÍ¸µ½ÎÒÃÇÉú»îµÄ¸÷¸öÁìÓò£¬¼¸ºõºÜÄÑÕÒµ½ÄĸöÁìÓòûÓе¥Æ¬»úµÄ×ã¼£¡£ÏÖÔÚ£¬ÕâÖÖµ¥Æ¬»úµÄʹÓÃÁìÓòÒÑÊ®·Ö¹ã·º£¬ÈçÖÇÄÜÒÇ±í¡¢ÊµÊ±¹¤¿Ø¡¢Í¨Ñ¶É豸¡¢µ¼º½ÏµÍ³¡¢¼ÒÓõçÆ÷µÈ£¬ÕâЩ¶¼Àë²»¿ªµ¥Æ¬»ú¡£Òò´Ë£¬µ¥Æ¬»úµÄѧϰ¡¢¿ª·¢ÓëÓ¦Óý«Ôì¾ÍÒ»Åú¼ÆËã»úÓ¦ÓÃÓëÖÇÄÜ»¯¿ØÖƵŤ³ÌʦºÍ¿ÆÑ§¼Ò¡£¿Æ¼¼Ô½·¢´ï£¬ÖÇÄÜ»¯µÄ¶«Î÷¾ÍÔ½¶à¡£Ñ§Ï°µ¥Æ¬»úÊÇÉç»á·¢Õ¹µÄ±ØÈ»ÐèÇó£¬Ò²Êǵç×Ó°®ºÃÕߺ͹¤³ÌʦµÄ±ØÐ޿Ρ£
   
ÔçÆÚµÄ´ó²¿·Öµç×ÓÒÇÆ÷ºÍÉ豸£¬²»Êdzɱ¾Ì«¸ß¾ÍÊǵç·¸´ÔÓ£¬¹¤³ÌʦҪά»¤ËüÒª»¨ºÜ¶à¾«Á¦ºÍʱ¼ä£¬ÏëÒª¸ü¸ÄËüµÄ¹¦Äܸü¼ÓÀ§ÄÑ¡£¶øµ¥Æ¬»úÇ¿´óµÄ¹¦ÄÜÓ¦¸¶ÕâЩ½«»áʹÄúµÃÐÄÓ¦ÊÖ£¬µ±È»Ç°ÌáÊÇÄú±ØÐèҪȥÁ˽âºÍѧϰËü¡£
   
´Óʵ¥Æ¬»ú¼¼ÊõµÄÑз¢¹¤³Ìʦ¶¼ÊôÓÚ¸ßְλ¡¢¸ßнˮ¸Úλ¡£¾Ýµ÷²é£¬½ØÖ¹2006Ä꣬ÎÒ¹úµÄµ¥Æ¬»ú´ÓÒµÈËÔ±250ÍòÈË¡£Ëæ×ÅÉç»áµÄ·¢Õ¹£¬µ¥Æ¬»úµÄ´ÓÒµÈËÔ±½«¸üΪÇÀÊÖ¡£¾Ý²»Íêȫͳ¼Æ£¬µ½2010Ä꣬ÎÒ¹úµ¥Æ¬»úÉè¼Æ´ÓÒµÈËÔ±½«´ï400ÍòÈËÖ®¶à¡£ÅàÑøµ¥Æ¬»úÓ¦ÓÃÈ˲ţ¬ÌرðÊǾßÓÐ×îÐÂÏÖ´úµ¥Æ¬»ú¼¼ÊõºÍʵ¼ù¾­ÑéµÄ¹¤³Ìʦ¾ßÓÐ×ÅÖØÒªµÄÏÖʵÒâÒå¡£

¶þ¡¢Ê²Ã´Êǵ¥Æ¬»ú?µ¥Æ¬»úÓÐʲôÓÃ?
   
Èç¹û˵µ¥Æ¬»úºÍÎÒÃÇÓõĵçÄÔµÄÔÚ±¾ÖÊÉÏûÓÐÊ²Ã´Çø±ð£¬ÄãÒ»¶¨¸Ðµ½¾ªÑÈ£¨Ò»¸öоƬ£©...Õâ²¢²»Ææ¹Ö¡£¶øÊÂʵ¾ÍÊÇÕâÑùÀí½âµÄ£ºµ¥Æ¬»úÊÇÒ»¸ö¼òµ¥È´ÓÖÊÇÍêÕûµÄ¼ÆËã»úϵͳ£¬ÂéȸËäС£¬ÎåÔà¾ãÈ«£¬Ëü±»¼¯³Éµ½Ò»¸öоƬÉÏ¡£ËüÄÚ²¿Ò²Óú͵çÄÔ¹¦ÄÜÀàËÆµÄÄ£¿é£¬±ÈÈçCPU£¬Äڴ棬²¢ÐÐ×ÜÏߣ¬»¹ÓкÍÓ²ÅÌ×÷ÓÃÏàͬµÄ´æ´¢Æ÷¼þ£¬²»Í¬µÄÊÇËüµÄÕâЩ²¿¼þÐÔÄܶ¼Ïà¶ÔÎÒÃǵļÒÓõçÄÔÈõºÜ¶à£¬²»¹ý¼ÛǮҲÊǵ͵ģ¬Ò»°ã²»³¬¹ý10Ôª¼´¿É......µ«ÓÃËüÀ´×öһЩ¿ØÖƵçÆ÷Ò»À಻ÊÇÌ«¸´ÔӵŤ×÷×ã¹»ÁË¡£ÎÒÃÇÏÖÔÚÓõÄÈ«×Ô¶¯¹öͲϴÒ»ú£¬ÅÅÑÌÕÖVCDµÈµÈµÄ¼ÒµçÀïÃæ¶¼¿ÉÒÔ¿´µ½ËüµÄÉíÓ°£¡......ËüÖ÷ÒªÊÇ×÷Ϊ¿ØÖƲ¿·ÖµÄºËÐIJ¿¼þ¡£
   
µ¥Æ¬»úÊÇ¿¿³ÌÐòµÄ£¬²¢ÇÒ¿ÉÒÔÐ޸ġ£Í¨¹ý²»Í¬µÄ³ÌÐòʵÏÖ²»Í¬µÄ¹¦ÄÜ£¬ÓÈÆäÊÇÌØÊâµÄ¶ÀÌØµÄһЩ¹¦ÄÜ£¬ÕâÊDZðµÄÆ÷¼þÐèÒª·ÑºÜ´óÁ¦Æø²ÅÄÜ×öµ½µÄ£¬ÓÐЩÔòÊÇ»¨´óÁ¦ÆøÒ²ºÜÄÑ×öµ½µÄ¡£Ò»¸ö²»ÊǺܸ´ÔӵŦÄÜÒªÊÇÓÃÃÀ¹ú50Äê´ú¿ª·¢µÄ74ϵÁУ¬»òÕß60Äê´úµÄCD4000ϵÁÐÕâЩ´¿Ó²¼þÀ´¸ã¶¨µÄ»°£¬µç·һ¶¨ÊÇÒ»¿é´óPCB °å£¡µ«ÊÇÈç¹ûÒªÊÇÓÃÃÀ¹ú70Äê´ú³É¹¦Í¶·ÅÊг¡µÄϵÁе¥Æ¬»ú£¬½á¹û¾Í»áÓÐÌìÈÀÖ®±ð£¡Ö»ÒòΪµ¥Æ¬»úµÄͨ¹ýÄã±àдµÄ³ÌÐò¿ÉÒÔʵÏÖ¸ßÖÇÄÜ£¬¸ßЧÂÊ£¬ÒÔ¼°¸ß¿É¿¿ÐÔ£¡
   
Ëæ×ų¬´ó¹æÄ£¼¯³Éµç·µÄ³öÏÖ¼°Æä·¢Õ¹£¬½«¼ÆËã»úµÄCPU¡¢RAM¡¢ROM¡¢¶¨Ê±/¼ÆÊýÆ÷ºÍ¶àÖÖI/O×ÊÔ´½Ó¿Ú¼¯³Éµ½Ò»Æ¬Ð¾Æ¬ÉÏ£¬ÐγÉÁËоƬ¼¶µÄ¼ÆËã»ú¡£×îÔçÆÚµÄº¬ÒåΪµ¥Æ¬Î¢ÐͼÆËã»ú£¬ÓÖ³ÆÎ¢¿ØÖÆÆ÷£¨Microcontroller£©£¬Ó¢ÎÄËõдΪ¡°MCU¡±¡£
   
׼ȷµØËµµ¥Æ¬»ú²»½ÐIC£¬µ¥Æ¬»ú²»ÊÇÍê³Éijһ¸öÂß¼­¹¦ÄܵÄоƬ,¶øÊǰÑÒ»¸ö¼ÆËã»úϵͳ¼¯³Éµ½Ò»¸öоƬÉÏ¡£¸ÅÀ¨µÄ½²£ºÒ»¿éµ¥Æ¬»úоƬ¾Í³ÉÁËһ̨΢ÐͼÆËã»ú¡£ËüµÄÌå»ýС¡¢ÖÊÁ¿Çá¡¢¼Û¸ñ±ãÒË¡¢ÎªÑ§Ï°¡¢Ó¦ÓúͿª·¢ÌṩÁ˱ãÀûÌõ¼þ¡£Í¬Ê±£¬Ñ§Ï°Ê¹Óõ¥Æ¬»úÊÇÁË½â¼ÆËã»úÔ­ÀíÓë½á¹¹µÄ×î¼ÑÑ¡Ôñ¡£

¿ÉÒÔ˵£¬¶þÊ®ÊÀ¼Í¿çÔ½ÁËÈý¸ö¡°µç¡±µÄʱ´ú£¬¼´µçÆøÊ±´ú¡¢µç×Óʱ´úºÍÏÖÒѽøÈëµÄµçÄÔʱ´ú¡£²»¹ý£¬ÕâÖÖµçÄÔ£¬Í¨³£ÊÇÖ¸¸öÈ˼ÆËã»ú£¬¼ò³ÆPC»ú¡£ËüÓÉÖ÷»ú¡¢¼üÅÌ¡¢ÏÔʾÆ÷µÈ×é³É£¨Èçͼ1Ëùʾ£©¡£»¹ÓÐÒ»Àà¼ÆËã»ú£¬´ó¶àÊýÈËÈ´²»ÔõôÊìϤ¡£ÕâÖÖ¼ÆËã»ú¾ÍÊǰÑÖÇÄܸ³Óè¸÷ÖÖ»úеµÄµ¥Æ¬»ú£¨Òà³ÆÎ¢¿ØÖÆÆ÷£©¡£¹ËÃû˼Ò壬ÕâÖÖ¼ÆËã»úµÄ×îСϵͳֻÓÃÁËһƬ¼¯³Éµç·£¬¼´¿É½øÐмòµ¥ÔËËãºÍ¿ØÖÆ¡£ÒòΪËüÌå»ýС£¬Í¨³£¶¼²ØÔÚ±»¿Ø»úеµÄ¡°¶Ç×Ó¡±Àï¡£ËüÔÚÕû¸ö×°ÖÃÖУ¬Æð×ÅÓÐÈçÈËÀàÍ·ÄÔµÄ×÷Óã¬Ëü³öÁË벡£¬Õû¸ö×°ÖþÍ̱»¾ÁË¡£¸÷ÖÖ²úÆ·Ò»µ©ÓÃÉÏÁ˵¥Æ¬»ú£¬¾ÍÄÜÆðµ½Ê¹²úÆ·Éý¼¶»»´úµÄ¹¦Ð§£¬³£ÔÚ²úÆ·Ãû³ÆÇ°¹ÚÒÔÐÎÈÝ´Ê¡ª¡ª¡°ÖÇÄÜÐÍ¡±£¬ÈçÖÇÄÜÐÍÏ´Ò»úµÈ¡£ÏÖÔÚÓÐЩ¹¤³§µÄ¼¼ÊõÈËÔ±»òÆäËüÒµÓàµç×Ó¿ª·¢Õ߸ã³öÀ´µÄijЩ²úÆ·£¬²»Êǵç·̫¸´ÔÓ£¬¾ÍÊǹ¦ÄÜÌ«¼òµ¥ÇÒ¼«Ò×±»·ÂÖÆ¡£¾¿ÆäÔ­Òò£¬¿ÉÄܾͿ¨ÔÚ²úƷδʹÓõ¥Æ¬»ú»òÆäËü¿É±à³ÌÂß¼­Æ÷¼þ¡£

Èý¡¢µ¥Æ¬»úµÄÖ÷ÒªÌØµã
ÓÅÒìµÄÐÔÄܼ۸ñ±È
¸ß¼¯³É¶È£¬¸ß¿É¿¿ÐÔ£¬Ìå»ýС
µÍµçѹ£¬µÍ¹¦ºÄ
¿ØÖƹ¦ÄÜÇ¿´ó
·á¸»Áé»îµÄÈí¼þ±à³Ì
Ó¦ÓÃÁìÓò¹ã·º£¬¿ÉÉæ¼°ËùÓеç×ÓÁìÓò

ËÄ¡¢Ñ§Ï°µ¥Æ¬»úµÄÌõ¼þ¡¡¡¡
   
Ŀǰµ¥Æ¬»úºÜ¶à£¬Ñ§ÄÄÒ»¸ö£¿8051¡¢PIC¡¢MS430¡¢AVR»¹ÊÇÆäËûÐͺţ¿ÆäʵѧÄÄÒ»¸ö¶¼¿ÉÒÔ£¬µ¥Æ¬»úËäÈ»ÐͺŲ»Í¬£¬µ«ÊÇоƬÄÚ²¿µÄ×ÊÔ´ÖÖÀà¶¼²î²»¶à£¬¶øÇÒÕâЩ×ÊÔ´µÄʹÓ÷½·¨Ò²´óͬСÒ죬¿ÉÒÔ˵ѧ»áÒ»ÖÖ£¬ÆäËûÖÖ½«ÈÚ»á¹áͨ¡£¾¿¾¹Ñ§ÄÄÒ»ÖÖ£¬Ö÷Òª¿´¾ß±¸µÄÌõ¼þ¡£
   
8051ϵÁÐÊÇÀÏÐͺţ¬ÊÇÈ«Çò´óÃû¶¦¶¦µÄCPUÖÆ×÷ÉÌÃÀ¹úINTEL¹«Ë¾µì¶¨»ù´¡¶øÍÆÏòÈ«ÇòµÄ£¬ÕâÖÖµ¥Æ¬»úĿǰËä²»Êǹ¦ÄÜ×îÇ¿´óµÄ£¬µ«È´ÊÇÓõÃ×î¹ã·º¶øÇÒµ«½ÌѧÊé×î¶à¡¢×ÊÁÏ×î¶à¡¢Èí¼þ¿ª·ÅºÍÓ²¼þÖ§³Ö¶¼ºÜ³ÉÊìµÄMCUоƬ£¬¸÷´óµ¥Æ¬»úÍøÕ¾¶¼ÓÐÏà¹ØÑ§Ï°ºÍÀý³Ì×ÊÁÏ¡£Atmel¹«Ë¾½«Æä·¢Ñï¹â´ó£¬ÍƳöÁËFLASHÐÍAT89µÄ²úƷϵÁУ¬ÏÖÔÚÁ÷ÐеÄÊÇAT89S51£¬52¡£ºÜ¶àÈ˾ÍÊÇ´ÓÕâ¿îµ¥Æ¬»úÆð¼ÒµÄ¡£Òò´Ë£¬±¾Õ¾ÍƼö´Ó51µ¥Æ¬»úÈëÃÅ¡£
   
ѧϰµ¥Æ¬»ú»¹µÃÓµÓÐÒÔÏ»ù±¾µÄÓ²¼þºÍÈí¼þ£º
¸öÈËPC£¨¾ÍÊǵçÄÔ£©
µ¥Æ¬»ú¼°³£ÓÃÍâΧԪ¼þ
±à³ÌÆ÷»òÏÂÔØÏß
ʵÑé°åºÍ·ÂÕæÆ÷
ÍòÓñíºÍ¹¤¾ß£¨ÀÓÌúµÈ£©
Ò»±¾»ò¼¸±¾ÈëÃźÃÊé

ѧϰµ¥Æ¬»úºÜÄÑÂð£¿Ëµ²»ÄÑÊÇÆ­È˵ģ¬ËµºÜÄÑÒ²ÊDz»¸ºÔðÈεģ¬ÓÐÄѵĵط½£¬Ò²Óмòµ¥µÄµØ·½¡£×ÜÖ®£¬Ñ§µ¥Æ¬»ú×îÖ÷ÒªµÄ¾ÍÊDz»¶ÏµØ¶¯ÊÖʵ¼ù£¡ÄÚ²¿½á¹¹²»¶®²»ÒªÅ£¬Ö¸Áî¼Ç²»×¡²»ÒªÅ£¬µ±ÄãÓÐÁËʵÎïÒ»²½Ò»²½µÄʵ¼ù£¬ºÜ¿ìµÄ£¬ÄÚ²¿½á¹¹¾Í»áÔÚÄãÄÔº£ÖÐÇåÎú£¬Ö¸ÁîÒ²»áÒ»ÌõÒ»ÌõµÄ¼Çס£¬Àí½âÀíÂÛ֪ʶҲ¾ÍÇåÎúÁË£¬²¢ÇÒÒ²»áʹÓÃÁË¡£
±¾ÎĵØÖ·£ºhttps://www.eechina.com/thread-121060-1-1.html     ¡¾´òÓ¡±¾Ò³¡¿

±¾Õ¾²¿·ÖÎÄÕÂÎª×ªÔØ»òÍøÓÑ·¢²¼£¬Ä¿µÄÔÚÓÚ´«µÝºÍ·ÖÏíÐÅÏ¢£¬²¢²»´ú±í±¾ÍøÔÞͬÆä¹ÛµãºÍ¶ÔÆäÕæÊµÐÔ¸ºÔð£»ÎÄÕ°æÈ¨¹éÔ­×÷Õß¼°Ô­³ö´¦ËùÓУ¬ÈçÉæ¼°×÷Æ·ÄÚÈÝ¡¢°æÈ¨ºÍÆäËüÎÊÌ⣬ÎÒÃǽ«¸ù¾ÝÖø×÷ȨÈ˵ÄÒªÇ󣬵Úһʱ¼ä¸üÕý»òɾ³ý¡£
fdjlz78 ·¢±íÓÚ 2013-10-12 22:37:21
edu118gct ·¢±íÓÚ 2013-10-13 17:50:17
²»´í£¬Ñ§Ï°ÁË
DynamicCore ·¢±íÓÚ 2013-11-18 20:58:00

¼òµ¥CPUÉè¼ÆÊµÀý

    ÓÐÈËÒѾ­¸øÄã»Ø´ðÁËΪʲôҪѧϰµ¥Æ¬»ú¡£ÎÒÏÖÔÚÒª¸øÄã˭˵µÄÊÇÏÖ´úµ¥Æ¬»úÉè¼ÆÖÆ×÷µÄ·¢Õ¹±ä»¯¡£
    ÏÖÔÚÎÒÃÇÉè¼ÆÖÆÔ쵥Ƭ»ú¿ÉÒÔÓÃÏÖ³¡¿É±à³ÌÕóÁÐÆ÷¼þFPGAÀ´×÷¡£Ö»ÒªÑ§Ï°ºÃÓ²¼þ±à³ÌÓïÑÔVerilog HDL»òVHDL¾Í¿ÉÒԴﵽĿµÄ£¬¶ø²»ÓÃÈ¥ÂòÄÇЩÏֳɵÄCPUоƬ£¬Ò²²»ÓÃÈ¥¹ºÂòʲô±à³ÌÆ÷¡£¹ýÈ¥Éè¼Æµ¥Æ¬»ú£¬Ò»°ãҪʹÓÃÊг¡ÉϳöÊÛµÄCPUоƬ£¬ÀýÈç80c51µÈ£¬ÓÐʱ»¹ÒªÅäÉÏһЩ±ðÈËÖÆÔìºÃµÄÉ豸¡£ÏÖÔÚÄã¿ÉÒÔ½«ËùÓеÄÉ豸¶¼¼¯ÖÐÔÚÒ»¸öоƬÖУ¬×Ô¼ºÉè¼ÆÔËËãÆ÷¡¢´æ´¢Æ÷¡¢¼Ä´æÆ÷¡¢¿ØÖÆÆ÷¡¢Ä£Êýת»»Æ÷¡¢¿´ÃŹ·µÈһϵÁÐÆ÷¼þ£¬°´ÕÕ×Ô¼ºµÄÏë·¨·Åµ½Ò»¸ö·½´ç²»µ½µÄоƬÖУ¬Ê¹Ö®³ÉΪһ¸öÃû¸±ÆäʵµÄµ¥Æ¬»ú¡£ÕâÖÖÉè¼Æµ¥Æ¬»úµÄºÃ´¦ÊÇÓÃʲôÉè¼ÆÊ²Ã´£¬²»»áÈöàÓàµÄ¶«Î÷¸ÉÈÅÄãµÄ×÷Æ·£¬ÐèÒª¼òµ¥¾Í¼òµ¥£¬ÐèÒª¸´ÔӾ͸´ÔÓ¡£ÊDz»ÊǺÜÓÐÒâ˼£¿
   ÕâÑùÉè¼ÆµÄµ¥Æ¬»ú£¬·Ç³£Äܹ»ÅàÑøÄãÕÆÎÕµ¥Æ¬»úÈ«²¿µÄÄÜÁ¦£¬·¢»ÓÄãµÄ´´Ô쾫Éñ£¬Ê¹Äã³ÉΪһ¸ö¶Ôµ¥Æ¬»úÎÞËù²»Öª£¬ÎÞËù²»ÏþµÄ¼ÆËã»úÉè¼ÆÈ˲š£¹úÄڸ㵥Ƭ»úµÄÈË×îȱ·¦µÄÊǶÔCPU µÄÉè¼Æ£¬´ó¶àÊý¶¼ÔÚʹÓÃÊг¡ÉϹºÂòµÄCPU£¬°´ÕÕ³§¼ÒµÄÒªÇó×÷ÖÐÏÂÓεĽøÒ»²½¿ª·¢¡£Êµ¼ÊÉÏ£¬ÕâÖÖ·½·¨²»½öЧÂʲ»¸ß£¬¶øÇÒÒ²Ó°ÏìÎÒÃǶԵ¥Æ¬»úµÄ´´Ð¡£Òò¶øÍ»ÆÆCPUÉè¼ÆµÄÃż÷£¬ÕÆÎÕcpuÉè¼Æ¼¼Êõ£¬ÎÒÃǾͻá¶Ôµ¥Æ¬»úµÄÀí½âºÍÉè¼Æ¶¼»áÓиü¸ß²ã´ÎµÄ·¢Õ¹¡£ÏÂÃæ¸øÄãÒ»¸ö¼òµ¥µÄCPUÉè¼Æ³ÌÐò£¬Ï£ÍûÄãÄÜÒýµ¼Ä㾡¿ì½øÈ뵥Ƭ»úÍêÕûÉè¼ÆµÄ´óÃÅ¡£
//»ù±¾ÊäÈëʱÖÓclock
//¸´Î»¿ØÖÆ£ºreset_n,µÍµçλÓÐЧ
//»ù±¾Êä³ö£ºo
//³ÌÐò´æ´¢Æ÷iram,16룬¸ß5λÊÇÀàÖ¸Áî´úÂë,ÓÃimem16_1.mif³õʼ»¯
//Êý¾Ý´æ´¢Æ÷dram,16룬²»ÓÃÊý¾ÝÎļþ³õʼ»¯
//ÓÃlpm´æ´¢Æ÷µØÖ·Êý¾ÝÐźÅÒªÎȶ¨1ÅÄ£¬²Å¿ÉÒÔ¶ÁдÊý¾Ý
//Ö¸Áî¸ñʽ:¸ß5λָÁî´úÂë,11λµØÖ·Âë,16λÁ¢¼´Êý(·Ö¸ßµÍ8λ)
module jdcpu
(
  clock,
  reset_n,
  o,
  //µ÷ÊÔÊä³ö(¿ÉÒÔ²»Òª)£º
  opc,
  omar,
  ojp,
  oqw,
/*  olda,
  oadd,
  oout,
  osdal,
  osdah,
  ostr,
  osub,
  ojmp,
  ojz,
  ojn,
  ocall,
  oret,
  oir, */
  oda,
  ozf,osp
);
input clock;
input reset_n;
output [15:0] o;

output [15:0] oqw,oda;
output [10:0] opc,omar,osp;
output [2:0] ojp;
output  ozf; /*oiro,lda,oadd,oout,osdal,osdah,ostr,osub,
ojmp,ojz,ojn,ocall,oret,*/

reg   dwren,swren;
wire [15:0] q_w,q_data;
    reg  [15:0] ir;
reg  [15:0] b,a,da,oo,ddata;
reg  [10:0] pc,pc_back,mar,sp,q_s;
reg  [2:0] jp;  //½ÚÅÄ
//Ö¸Áî:
reg   lda, //È¡Êý:´ÓÊý¾Ýµ¥ÔªÈ¡Êýµ½da
    add, //¼Ó:daÓëÊý¾Ýµ¥ÔªÏà¼Ó£¬½á¹û·ÅÈëda
    out, //Êä³ö:½«Êý¾Ýµ¥ÔªÄÚÈÝÊä³öµ½Êä³ö¼Ä´æÆ÷
    sdal, //µÍ8λÁ¢¼´Êý:½«8λÁ¢¼´ÊýÀ©³äΪ16λËÍda
    sdah, //¸ß8λÁ¢¼´Êý:½«8λÁ¢¼´Êý×÷Ϊ¸ß8룬ÓëÔ­daµÍ8λÁ¬½Ó³É16λ·ÅÔÚdaÖÐ
    str, //daËÍÊý¾Ý´æ´¢µ¥Ôª:
    sub, //¼õ:daÓëÊý¾Ýµ¥ÔªÏà¼õ£¬½á¹û·ÅÈëda
    jmp, //Ìø×ª
    jz,  //daΪ0Ìø×ª
    jn,  //daΪ¸ºÌø×ª
    call, //µ÷ÓÃ×Ó³ÌÐò
    ret, //·µ»Ø
    mult, //
    divi, //
    stp; //Í£Ö¹
//·ÂÕæÐźÅÊä³ö:
assign o    = oo;
assign opc  = pc;
assign osp  = sp;
assign omar = mar;
assign ojp = jp;
assign oqw = q_w;
assign olda=lda;
assign oadd=add;
assign osub=sub;
assign oout=out;
assign ojmp=jmp;
assign ostr=str;
assign osdal=sdal;
assign osdah=sdah;
assign ocall=call;
assign oret=ret;
assign ojz=jz;
assign ojn=jn;
assign oda=da;
assign oir=ir;
assign ozf=~|da;

//Ö¸Áî´æ´¢Æ÷:  
lpm_rom iram(.address(pc),.inclock(clock),.q(q_w));  //³ÌÐò´æ´¢Æ÷
defparam iram.lpm_width = 16;
defparam iram.lpm_widthad = 11;
defparam iram.lpm_outdata = "UNREGISTERED";
defparam iram.lpm_indata = "REGISTERED";
defparam iram.lpm_address_control = "REGISTERED";
defparam iram.lpm_file = "liti3.mif";  //³õʼ»¯Îļþ,·ÅÖóÌÐò
//Êý¾Ý´æ´¢Æ÷:
lpm_ram_dq dram(.data(ddata),.address(mar),.we(dwren),.inclock(clock),.q(q_data)); //Êý¾Ý´æ´¢Æ÷
defparam dram.lpm_width = 16;
defparam dram.lpm_widthad = 10;
defparam dram.lpm_outdata = "UNREGISTERED";
defparam dram.lpm_indata = "REGISTERED";
defparam dram.lpm_address_control = "REGISTERED";

lpm_ram_dq sram(.data(pc_back),.address(sp),.we(swren),.inclock(clock),.q(q_s)); //¶ÑÕ»
defparam sram.lpm_width = 11;
defparam sram.lpm_widthad = 10;
defparam sram.lpm_outdata = "UNREGISTERED";
defparam sram.lpm_indata = "REGISTERED";
defparam sram.lpm_address_control = "REGISTERED";

  always @(posedge clock or negedge reset_n)
begin
if (!reset_n)
begin
  pc    <= 0;
  sp  <= 0;
  lda  <= 0;   
  add  <= 0;   
  out  <= 0;
  sdal  <= 0;
  sdah  <= 0;
  str  <= 0;
  sub  <= 0;
  jmp  <= 0;
  jz   <= 0;
  jn   <= 0;
  call  <= 0;
  ret  <= 0;
  mult  <= 0;  
  divi  <= 0;
  jp  <= 0;
end
else
begin
// ½ÚÅÄjpÖ¸³öµÄ״̬£º
  case (jp)
  0: begin
   jp <= 1;
   end
  1: begin
    case (q_w[15:11])
    5'b00001: lda  <= 1; //lda:00001
    5'b00010: add  <= 1; //add:00010
    5'b00011:   out  <= 1; //out:00011
    5'b00100:   sdal <= 1; //µÍ8룬À©³äÓзûºÅ16λ
    5'b00101:   sdah  <= 1; //¸ß8룬ÓëÇ°ÃæµÍ8λÊäÈëºÏ³É16λ
    5'b00110:   str  <= 1; //daËÍÊý¾Ýµ¥Ôª
    5'b00111:   sub  <= 1;
    5'b01000:   jmp  <= 1;
    5'b01001:   if (da==0) jz   <= 1;
    5'b01010:   if (da[15]==1)  jn   <= 1;
    5'b01011:   call  <= 1;
    5'b01100:   ret  <= 1;
    5'b01101:   mult  <= 1;
    5'b01110:   divi  <= 1;
    5'b11111:   stp  <= 1;
    default:    jp <= 0;
    endcase
    jp <= 2;
   end
  2: begin
    case (q_w[15:11])
    5'b00001: begin  //lda  <= 1;
        mar<=q_w[10:0];
        jp <= 3;
       end
    5'b00010: begin  //add  <= 1;
        mar<=q_w[10:0];
        jp <= 3;
       end
    5'b00011:   begin  //out  <= 1;
        mar<=q_w[10:0];
        jp <= 3;
       end
     
    5'b00100:   begin  //sdal <= 1;
        da <= {{8{q_w[7]}},q_w[7:0]};        //À©³ä16λÓзûºÅÊý
        sdal<= 0;
        pc <= pc+1;
        jp<= 0;
       end
     
    5'b00101:   begin  //sdah  <= 1;
        da[15:0] <= {q_w[7:0],da[7:0]};
        sdah <= 0;
        pc <= pc+1;
        jp<= 0;
       end
     
    5'b00110:   begin  //str  <= 1;
        mar<=q_w[10:0];
        ddata <= da;
        jp <= 3;
       end
    5'b00111:   begin  //sub  <= 1;
        mar<=q_w[10:0];
        jp <= 3;
       end
   
    5'b01000:   begin  //jmp  <= 1;
        pc <= q_w[10:0];
        jmp <=0;
        jp <= 0;
       end
    5'b01001:   begin  //jz   <= 1;
        if (jz) pc <= q_w[10:0];
        else   pc <= pc+1;
        jz <=0;
        jp <= 0;
       end
   
    5'b01010:   begin  //jn   <= 1;
        if (jn) pc <= q_w[10:0];
        else   pc <= pc+1;
        jn<=0;
        jp <= 0;
       end
    5'b01011:   begin  //call  <= 1;
         pc_back <= pc+1;
         jp <= 3;
       end
    5'b01100:   begin  //ret  <= 1;
         jp <= 3;
       end
    5'b01101: begin  //mult <= 1;
        mar<=q_w[10:0];
        jp <= 3;
       end
    5'b01110: begin  //divi  <= 1;
        mar<=q_w[10:0];
        jp <= 3;
       end
    5'b11111: jp<=0;
    default:    jp <= 0;
    endcase
   end
  3: begin
    case (q_w[15:11])
    5'b00001: begin  //lda  <= 1;
        jp <= 4;
       end
    5'b00010: begin  //add  <= 1;
        jp <= 4;
       end
      
    5'b00011:   begin  //out  <= 1;
        jp <= 4;
       end
     
    5'b00110:   begin  //str  <= 1;
        dwren <= 1;
        jp <= 4;     
       end
    5'b00111:   begin  //sub  <= 1;
        jp <= 4;
       end
   
    5'b01011:   begin  //call  <= 1;
         pc <= q_w[10:0];
         swren <= 1;
         jp <= 4;
       end
    5'b01100:   begin  //ret  <= 1;
         sp <= sp-1;
         jp <= 4;
       end
    5'b01101: begin  //mult  <= 1;
        jp <= 4;
       end
    5'b01110: begin  //divi <= 1;
        jp <= 4;
       end
    default:    jp <= 0;
    endcase
   end
   
  4: begin
    case (q_w[15:11])
    5'b00001: begin  //lda  <= 1;
        da<=q_data;
        pc <= pc+1;
        jp <= 0;
        lda<= 0;
       end
    5'b00010: begin  //add  <= 1;
        b<=q_data;
        a<=da;
        jp <= 5;
       end
    5'b00011:   begin  //out  <= 1;
        oo <= q_data;
        pc <= pc+1;
        jp <= 0;
        out<= 0;
       end
     
    5'b00110:   begin  //str  <= 1;
        jp <= 5;     
       end
    5'b00111:   begin  //sub  <= 1;
        b<=q_data;
        a<=da;
        jp <= 5;
       end
   
    5'b01011:   begin  //call  <= 1;
         sp <= sp+1;
         jp <= 5;
       end
    5'b01100:   begin  //ret  <= 1;
         jp <= 5;
       end
    5'b01101: begin  //mult  <= 1;
        b<=q_data;
        a<=da;
        jp <= 5;
       end
    5'b01110: begin  //divi  <= 1;
        b<=q_data;
        a<=da;
        jp <= 5;
       end              
    default:    jp <= 0;
    endcase
   end
   5: begin
    case (q_w[15:11])
    5'b00010: begin  //add  <= 1;
        da<=a+b;
        pc <= pc+1;
        add <=0;
        jp <= 0;
       end
     
    5'b00110:   begin  //str  <= 1;
        dwren <= 0;
        pc <= pc+1;
        str <=0;
        jp <= 0;     
       end
    5'b00111:   begin  //sub  <= 1;
        da<=a-b;
        pc <= pc+1;
        sub<=0;
        jp <= 0;
       end
    5'b01011:   begin  //call  <= 1;
         swren <= 0;
         call<=0;
         jp<=0;
       end
    5'b01100:   begin  //ret  <= 1;
         pc <= q_s;
         ret<=0;
         jp <= 0;
       end
    5'b01101: begin  //mult  <= 1;
        da <=a*b;
        pc <= pc+1;
        mult <=0;
        jp <= 0;      
       end
    5'b01110: begin  //divi  <= 1;
        da <=a/b;
        pc <= pc+1;
        divi <=0;
        jp <= 0;      
       end      
    default:    jp <= 0;
    endcase
   end
  endcase
end
end
  endmodule

//////  ·ÂÕæÊµÀý: Çó64*8ÇÒÊä³öÑ­»·´ÎÊý ////////
//
//   »ã±à   ±àÒë     
//   sdal 1   2001  
//   str one   3001
//   sub one   3801
//   str result  3002
//   str n   3005
//   sdal 64   2040
//   str x   3003
//   sdal 8   2008
//   str y   3004
//loop:  lda y   0804
//   jz exit  4812
//   sub one   3801
//   str y   3004
//   lda result  0802
//   add x   1003
//   str result  3002
//   call loopno  5814
//   jmp loop  4009
//exit:  out result  1802
//   stp    ffff
//loopno: lda n   0805
//   add one   1001
//   str n   3005
//   out n   1805
//   ret    6000
//     
//  ½«±àÒëµÄ16½øÖÆÊýдÈëimem16_1.mif  
//         
///////  16½øÖƽá¹ûÊä³ö:0200  //////////////////
//
////ÑéÖ¤CPUµÄʵÀý3: Çó8£¡ÇÒÊä³ö½á¹û¡£
//
//   »ã±à   ±àÒë     
//   sdal 1   2001  
//   str one   3001
//   str result  3002
//   sdal 8   2008
//   str x   3003
//loop:  lda x   0803
//   jz exit  480D
//   mult  result 6802  
//   str result  3002
//   lda x   0803
//   sub one   3801
//   str x   3003
//   jmp loop  4005
//exit:  out result  1802
//   stp    ffff
//½«±àÒëµÄ16½øÖÆÊýдÈëimem16_2013.mif

/////// Èç¹ûÏÂÔØµ½¿ª·¢°å¼ì²éÔËÐÐÇé¿ö£¬¸÷Êä³öÖ®¼äÒª¼ÓÑÓʱ×Ó³ÌÐò¡£
//
//±ÏÒµÉè¼Æ£ºÀ©³äÉè¼ÆÒ»¸ö¹¦ÄÜÍ걸µÄ¼ÆËã»ú£¬²¢ÔÚPMC110¼ÆËã»ú¿ª·¢°åÉÏÏÂÔØÔËÐС£

JZS ·¢±íÓÚ 2013-12-3 16:02:00
¶¥
edu118gct ·¢±íÓÚ 2013-12-6 17:13:15
ÄúÐèÒªµÇ¼ºó²Å¿ÉÒÔ·¢±íÆÀÂÛ µÇ¼ | Á¢¼´×¢²á

³§ÉÌÍÆ¼ö

  • MicrochipÊÓÆµ×¨Çø
  • EtherCAT®ºÍMicrochip LAN925x´ÓÕ¾¿ØÖÆÆ÷½éÉÜÅàѵ½Ì³Ì
  • MPLAB®Ä£ÄâÉè¼ÆÆ÷¡ª¡ªÔÚÏßµçÔ´½â¾ö·½°¸£¬¼ÓËÙÉè¼Æ
  • ÈÃÄúµÄÄ£ÄâÉè¼ÆÁé¸Ð£¬»¯Îª´¥Êֿɼ°µÄÏÖʵ
  • Éî¶ÈÌåÑéMicrochip×Ô¶¯¸¨Öú¼ÝʻӦÓ÷½°¸¡ª¡ª2025Ѳչ¿ªÆô±¨Ãû£¡
  • óÔóµç×Ó(Mouser)×¨Çø

Ïà¹ØÔÚÏß¹¤¾ß

Ïà¹ØÊÓÆµ

¹ØÓÚÎÒÃÇ  -  ·þÎñÌõ¿î  -  ʹÓÃÖ¸ÄÏ  -  Õ¾µãµØÍ¼  -  ÓÑÇéÁ´½Ó  -  ÁªÏµÎÒÃÇ
µç×Ó¹¤³ÌÍø © °æÈ¨ËùÓÐ   ¾©ICP±¸16069177ºÅ | ¾©¹«Íø°²±¸11010502021702
¿ìËٻظ´ ·µ»Ø¶¥²¿ ·µ»ØÁбí