¡õ ·±ÌåÖÐÎÄ
¡õ ¸ß¼¶ËÑË÷
 
Ê×Ò³ | µç×Ó¼¼ÊõÓ¦Óà | ÐÐÒµ×îж¯Ì¬ | ÐÐÒµ×îвúÆ· | Èí¼þ×ÊÁÏÏÂÔØ | µç·ͼֽÐÀÉÍ | ²©¿ÍÎÄÕ¾«Ñ¡ | µç×Ó¾«Æ·ÂÛ̳ | µç×Ó¼¼ÊõÌù°É

µ±Ç°Î»ÖãºÊ×Ò³ >> µç×Ó¼¼ÊõÓ¦Óà >> ǶÈëʽϵͳ-Ó¦Óà >> ÈçºÎÔÚ32¸ö´¦ÀíÆ÷Öб༭²¢ÇÒ·­Òë64¹Ì¶¨µÄµã½øÎ»¼ÆËã
ÈçºÎÔÚ32¸ö´¦ÀíÆ÷Öб༭²¢ÇÒ·­Òë64¹Ì¶¨µÄµã½øÎ»¼ÆËã
×÷ÕߣºÖйúµØÖÊѧ´óѧ ÕÅ ³Û ÂÀάÏÈ ±±¾©ÖÐо΢ϵͳ¹«Ë¾ ÐíÖ   À´Ô´£ºµ¥Æ¬»ú¼°Ç¶ÈëʽϵͳӦÓà·¢±íʱ¼ä£º2006-11-17  ×ֺţº´ó ÖРС

¡¡

ÕªÒª£º½éÉÜǶʽ32λCPUÔÚ±àÒëÆ÷Öнâ¾ö64λÔËËãµÄ·½·¨£¬²¢ÁоÙÒ»¸ö¼Ó·¨ÔËËãµÄÀý×Ó£¬¸ø³ö¿É¹©²Î¿¼µÄÖ¸ÁîÄ£°å¡£°üÀ¨32λRISCÌåϵǶÈëʽCPU²ã´Î½á¹¹ºÍ±àÒëÆ÷ºó¶Ë½á¹¹¡£

¹Ø¼ü´Ê£ºRTL Ö¸ÁîÄ£°å ±àÒëÓÅ»¯

1 ¸ÅÊö

ÔÚÐÅÏ¢»¯·ÉËÙ·¢Õ¹µÄ½ñÌ죬¼ÆËã»úÒѳÉΪÈËÃÇѧϰºÍ¹¤×÷²»¿ÉȱÉٵŤ¾ß£¬ÎÒ¹úÒµÒÑÈ¡µÃÁ˵çÄÔÉú²ú´ó¹úµÄµØÎ»£»µ«ÊÇ£¬×÷Ϊ¼ÆËã»úµÄºËÐÄ¡ª¡ªCPUµÄÉè¼ÆÓëÖÆÔ죬ȴ³ÉÁ˼¸´ú¼ÆËã»ú¹¤×÷ÕßµÄδÁËϰԸ£¬Ò²¸ø¹ú¼ÒµÄ°²È«´øÀ´ÁËÒþÓÇ¡£Ë³Ó¦³±Á÷£¬ÖÐо΢ϵͳ¹«Ë¾ÓÚ2001ÄêÍÆ³öÁ˹úÄÚµÚÒ»¿ÅʵÓû¯µÄ32λCPU£¨·½ÖÛÒ»ºÅ£©£¬Ö÷Ƶ´ïµ½166MHz¡£ÏÂÒ»´ú·½ÖÛCPU½«²ÉÓÃ0.18¦Ìm¹¤ÒÕ£¬³¬Á÷Ë®½á¹¹£¬Ö÷ƵÄÜ´ïµ½600MHzÒÔÉÏ£¬ÔÚǶÈëʽCPUÁìÓò×ßµ½¹ú¼ÊǰÁС£

´«Í³µÄ32λ¼ÆËã»ú´¦Àí64λÔËËãͨ³£ÊÇÉè¼Æ¾ßÌåµÄÂß¼­µç·ʵÏÖ¡£Ëæ×ÅSoC£¨System on Chip£©µÄ³öÏÖ£¬Ð¾Æ¬Éϼ¯³É¸÷ÖÖ¹¦Äܲ¿¼þÔ½À´Ô½¶à£¬Ìرð¶ÔÓÚǶÈëʽϵͳ£¬Æ¬ÉÏÄÜÀûÓõĿռä¾ÍÁмÓÓÐÏÞ£¬ÕâÒ²ÒªÇ󽫲¿·Ö¹¦ÄÜÓÃÈí¼þÀ´ÊµÏÖ¡£¶ÔÓÚ64볤×ÖÔËËãÈí¼þʵÏֵķ½·¨Í¨³£ÓÐÁ½ÖÖ£ºÒ»ÊÇÉè¼ÆÏµÍ³Èí¼þ¹©²Ù×÷ϵͳÄں˵÷Óã»¶þÊÇÔÚÏà¹ØµÄ±àÒëÆ÷ÖÐÉè¼ÆÖ¸ÁîÄ£°åÀ´½â¾ö¡£Ç°ÕßÖ´ÐÐЧÂʸߣ¬µ«Ã¿Ê¹ÓÃÒ»´Î¾ÍÒª±àÒëÒ»´Î£»ºóÕßÖ»Ðè±àÒëÒ»´Î£¬×ܵÄЧÂÊÒª¸ßÓÚǰÕß¡£Òò´Ë£¬Êµ¼Ê²ÉÓÃÔÚ±àÒëÆ÷ÖÐÉè¼ÆÖ¸ÁîÄ£°åÓèÒÔ½â¾ö¡£

2 32λRISCÌåϵǶÈëʽCPU²ã´Î½á¹¹ÃèÊö

ͼ1ÊÇÒ»¸ö¼¯³ÉÁËDSP£¨Êý×ÖÐźŴ¦ÀíÆ÷£©Ç¶ÈëʽCPUµÄ²ã´Îͼ¡£´Óͼ1¿É¿´µ½£¬±àÒëÆ÷ÔÚÕû¸öCPU½á¹¹Öд¦ÓÚASICÓ²¼þµç·֮ϺͲÙ×÷ϵͳ֮ÉÏ£¬µ£¸º×Ž«¸ß¼¶µÄ¡¢³éÏóµÄ±í´ïʽת»¯ÎªÏà¶ÔµÍ¼¶µÄ±í´ïʽ£¬×îÖÕÉú³ÉϵͳָÁ¡£

3 CPU±àÒëÆ÷ºó¶Ë½á¹¹

CPU±àÒëÆ÷·ÖΪǰ¶ËºÍºó¶Ë£ºÇ°¶ËÖ÷ÒªÍê³É´Ê·¨/Óï·¨·ÖÎö²¢Éú³ÉÓï·¨Ê÷£¬ÕâÀï²»ÔÙÂÛÊö£»ºó¶ËÊDZàÒëµÄÖ÷Ì岿·Ö£¬Ëü½«Óï·¨Ê÷ת»»³É²»¼äÓïÑÔ£¬Ôڴ˲»¼äÓïÑÔ»ù´¡ÉϽøÐи÷ÖÖ±àÒëÓÅ»¯£¬×îÖÕÉú³É»ã±àÖ¸Áî´úÂë¡£±àÒëºó¶ËÔÚ½øÐÐÓÅ»¯µÄ¹ý³ÌÖÐÒª¸ú¾ßÌåµÄÄ¿±ê»úµÄ»úÆ÷ÃèÊöÎļþ¶à´ÎÆ¥Å䣬Éú³ÉRTLÓïÑÔ£¨Register Transfer Language£©¡ªGNU CCµÄÖмäÓïÑÔ¡£

»úÆ÷ÃèÊöÎļþÓɸ÷ÖÖÓëÄ¿±ê»úÓйصÄÖ¸ÁîÄ£°å¡¢¹¦ÄÜÄ£°å¡¢CÓïÑÔÐÎʽµÄÔ¤´¦Àíº¯ÊýµÈ¹¹³É¡£±¾ÎÄÉæ¼°µ½µÄ64λÔËËã¾ÍÊÇÓÉRTLºÍÖ¸ÁîÄ£°å¶à´ÎÆ¥ÅäºóÉú³É»ã±àÖ¸ÁîÀ´½â¾öµÄ£¬¹ý³ÌÈçͼ2Ëùʾ¡£

ÏÞÓÚÆª·ù£¬ÕâÀï½ö¾Ù64λ¼Ó·¨ÔËËãµÄ²¿·ÖÀý×Ó£¬ÆäËüÔËËãÓë´ËÀàËÆ¡£

4 64λ¼Ó·¨ÔËËãÖ¸Áî°å

¢Ù RTLʶ±ðÖ¸ÁîÄ£°å£¬µÚÒ»´ÎÆ¥Åä¡£

£¨define_insn ¡°adddi3¡±£©

[(set(match_operand:DI 0 "register_operand" "=r")

£¨plus:DI (match_operand:DI 1¡°register_operand¡±¡°0¡±)

£¨match_operand:DI 2 "register_operand"¡°r¡±£©£©£©

£¨clobber(reg:SI 6)£©]//6ºÅ¼Ä´æÆ÷×÷½øÎ»Ê¹ÓÃ

"")

¢Ú ½«64λ¼Ó·¨·Ö½â³É¸ß32λºÍµÍ32λÔËË㣬µÚ¶þ´ÎÆ¥Åä¡£

£¨define_split

[(set(match_operand:DI 0 "register_operand"¡°=r¡±)

(plus:DI (match_operand:DI 1¡°register_operand¡±¡°0¡±)

(match_operand:DI 2 ¡°register_operand¡±¡°r¡±)£©)

£¨clobber(reg:SI 6)£©]

"reload_complete"

¡°{

[(const_int 0)] //¼Ä´æÆ÷ʹÓÃǰÇåÁã

rtx low[3],high[3]; //rtxΪһÖÖ´¦Àí±í´ïʽµÄÊý¾ÝÀàÐÍ

low[0]=gen_lowpart(Simode,operands[0]);

low[1]=gen_lowpart(Simode,operands[1])£»

low[2]=gen_lowpart(Simode,operands[2]);

high[0]=gen_rtx(REG,Simode,REGNO(operands[0]-1);

high[1]=gen_rtx(REG,Simode,REGNO(operands[1]-1)£»

high[2]=gen_rtx(REG,Simode,REGNO(operands[2]-1)£»

//ÓÉÓÚ·½ÖÛCPUµØÖ·´æ´¢·½Ê½²ÉÓõÄÊÇBig-Endian£¬¼´×Ö½ÚÖеÄ×î¸ßÓÐЧλ¾ßÓÐ×îµÍÐòºÅ£¬ËùÒÔ¸ßλӲ¼Ä´æÆ÷ºÅÒª¼õ1¡£

emit_insn(gen_addsi3_set_carry(low[0],low[1],low[2])) //µÍ32λ¼Ó²¢ÉèÖýøÎ»

emit_insn(gen_addsi3_use_carry(high[0],high[1],high[2])); //¸ß32λ¼Ó²¢´¦Àí½øÎ»

DONE£»

}

¢Û ´¦ÀíµÍ32λ¼Ó¡£

£¨define_insn "addsi_set_carry"

[(set(match_operand:SI 0 (match_operand:SI1 "register_operand" "r")

(match_operand:SI 2

"register_operand"¡°r¡±£©£©£© £¨clobber(reg:SI6)£©] //ÒÔÏÂÅжÏÊÇ·ñÓнøÎ»¡£ÓУ¬Ôò6ºÅ¼Ä´æÆ÷ÖÃ1£¨set(reg:SI6)

(itu:SI(plus:SI(match_dup 1)match_dup 2))(match_dup 1)))]

""

"add\t%0,%1,%2" //Éú³ÉµÍ32λ»ã±àÄ£°å

£©

¢Ü´¦Àí¸ß32λ¼Ó¡£

£¨define_insn "addi3_use_carry"

£¨define_insn "adddi3_use_carry"

[(set(match_operand:SI 0 "register_operand"¡°=r¡±)

£¨plus:SI(plus:SI(match_operand:SI 1 "register_operand" "r"))

(reg:SI 6)))

(clobber(reg:SI 6))]

¡°¡±

"add%0,%1,%2;add\t%0,%0,r6" //Éú³É¸ß32λ´ø½øÎ»¼Ó»ã±àÄ£°å

)

ÔÚ»úÆ÷ÃèÊöÎļþÖУ¬DIΪ64λ»úÆ÷·½Ê½£¬SIΪ32λ·½Ê½¡£¸ÃÎļþÓÉ»úÆ÷ÃèÊö´¦Àí³ÌÐò½øÐиñʽת»»£¬Ëü½«µ÷ÓñàÒëÄÚ²¿Ò»Ì×רÃŵĺ¯ÊýºÍÊý¾Ý½á¹¹×÷Ϊ½Ó¿Ú£¬Éú³Égen_¿ªÍ·µÄÔ¤´¦Àíº¯Êý¶ÔÖ¸ÁîÄ£°å×÷½øÒ»²½µÄ´¦Àí£¬ÔÙÉú³ÉÓÉinsn_¿ªÍ·µÄº¯Êý¶ÔÄ£°å×÷Æ¥ÅäºóÉú³É»ã±à´úÂë¡£

½áÓï

ÔÚ·½ÖÛ¶þºÅCPUÉϲâÊԵĽá¹û´ïµ½ÁË64ÔËËãµÄÒªÇó£¬Ïà¹ØµÄÖ¸Áî´úÂëÈçÏ£º

¡­¡­

132 r18,[r15,4]

132 r19,[r15,8]

add r16,r16,r18

add r17,r17,r19

add r17,r17,r6

¡­¡­

ÓÃSPEC95½øÐж¨µãÔËËã²âÊÔ£¬¿É´ï280MIPSÒÔÉÏ£¬ÊÕµ½Á˽ϺõÄÔ¤ÆÚ½á¹û¡£


¡¡


£¡×¢Ò⣺Èç¹ûÄú·¢ÏÖ´ËÎÄÕ³öÏÖÓ°ÏìÄúµÄÔĶÁµÄ×´¿ö£¬Çë´Óä¯ÀÀÆ÷µØÖ·À¸Àï¸´ÖÆ±¾ÎĵÄÁ´½Óµ½ÁôÑÔ±¾±¨¸æ¸øÕ¾³¤½â¾ö£¡
  • ÉÏһƪ£º PPSMǶÈëʽRTOSÖеĴ°¿Úϵͳ¿ª·¢
  • ÏÂһƪ£º NS Á½¿îÐÂÐÍBoomer 3D ÒôƵ×Óϵͳ

  • >> ÁªÏµÎÒÃÇÇë¸øÎÒÃÇÁôÑÔ¡¤ÁôÑÔ±¾
    ±¾Õ¾ËùÓÐÌṩµÄÐÅÏ¢Èí¼þ×ÊÁϾùÀ´×ÔÍøÂç,°æÈ¨¼°Öø×÷Ȩ¹éÔ­×÷ÕßËùÓÐ,Èç¹ûÎÞÒâÖÐÇÖ·¸ÁËÄúµÄÏà¹ØÈ¨Àû»ò´¥¼°·¨ÂÉ·¨¹æ,Çë¸øÎÒÃÇÁôÑÔ, ÎÒÃǽ«ÔÚ24СʱÄÚɾ³ý¡£
      ÕãICP±¸05071687ºÅ  µç×Ó¼¼Êõ¾«Æ·Íø