ÍøÕ¾¹«¸æÁбí

  Ã»Óй«¸æ

¼ÓÈëÊÕ²Ø
ÉèΪÊ×Ò³
ÁªÏµÕ¾³¤
ÄúÏÖÔÚµÄλÖ㺠61EDAÖйúµç×ÓÍø >> ¼¼ÊõÎÄ¿â >> NIOSII >> ÕýÎÄ
  [ͼÎÄ]»ùÓÚNios IIºÍeCosµÄ´®¿ÚͨÐųÌÐò¿ª·¢           ¡ï¡ï¡ï ¡¾×ÖÌ壺С ´ó¡¿
»ùÓÚNios IIºÍeCosµÄ´®¿ÚͨÐųÌÐò¿ª·¢
×÷ÕߣºFree    ÎÄÕÂÀ´Ô´£º±¾Õ¾Ô­´´    µã»÷Êý£º    ¸üÐÂʱ¼ä£º2008-4-1    

ǶÈëʽ¿ª·¢ÈËÔ±±ØÐëÑ¡ÔñÒ»¿î´¦ÀíÆ÷£¬ÒԴ˾ö¶¨ºÏÊʵÄϵͳÐÔÄÜ¡£Nios II´¦ÀíÆ÷ʹÓÃÖ¸ÁîºÍÊý¾Ý´æ´¢Æ÷·ÖÀëµÄ´æ´¢Æ÷½á¹¹£¬¾ßÓÐÁé»îµÄ½á¹¹¿ÉÐÞ¸ÄÐÔ£¬Ö§³Ö×Ô¶¨ÖÆÖ¸Áî¡£Nios II´¦ÀíÆ÷Ö§³ÖƬÉϵ÷ÊÔ£¬Í¨¹ýJTAGµ÷ÊÔͨµÀ£¬¿ÉÒÔʵÏÖÖ¸Áîµ¥²½¡¢¶Ïµã¡¢Á¬ÐøÔËÐеȵ÷ÊÔ¹¦ÄÜ¡£Ê¹ÓÃϵͳ¿ª·¢¹¤¾ß½«´¦ÀíÆ÷¡¢ÍâÉè¡¢´æ´¢Æ÷ºÍI/O½Ó¿Ú¼¯³ÉÔÚµ¥Æ¬FPGAÖУ¬¶¨ÖÆ×Ô¼ºÉè¼ÆµÄϵͳ£¬²¢ÇÒ¶Ô¸÷ÖÖÍâΧÉ豸µÄʵÏÖÌṩÁËÇ¿´óµÄÖ§³Öƽ̨£»SOPC Builderϵͳ¿ª·¢¹¤¾ß¿ÉÒÔ×Ô¶¯Éú³É×é¼þÒÔ¼°Á¬½Ó×é¼þµÄ×ÜÏߣ¬quartus ii Èí¼þ¿ª·¢¹¤¾ß¿ÉÒÔÍê³É¹¦ÄÜÄ£¿éÉè¼Æ¡¢×ۺϲ¼ÏߺͷÂÕæ£¬Nios II ideÈí¼þ¿ª·¢¹¤¾ßÌṩǶÈëʽӦÓÃÈí¼þµÄ¿ª·¢»·¾³ºÍµ÷ÊÔ»·¾³¡£ËùÓÐÈí¼þ¿ª·¢ÈÎÎñ±à¼­¡¢¹¹½¨¡¢³ÌÐòµ÷ÊÔ¶¼Äܹ»ÔÚ(IDE)ÏÂÍê³É£¬´Ó¶ø¼ò»¯ÁË¿ª·¢¹ý³Ì£¬½µµÍÁËϵͳ³É±¾¡¢¸´ÔÓÐÔÒÔ¼°¹¦ºÄ£¬Ëõ¶ÌÁ˲úÆ·ÉÏÊÐÖÜÆÚ¡£

 

×é¼þµÄ¿É¶¨ÖÆÐÔÊÇǶÈëʽ¿ª·¢µÄÒ»¸öÌØµã£¬SOPC£¨System on Programmable Chip£¬Æ¬ÉϿɱà³Ìϵͳ£©ÊÇAltera¹«Ë¾Ìá³öµÄÒ»ÖÖÁé»î¡¢¸ßЧµÄSOC½â¾ö·½°¸¡£Ëü½«´¦ÀíÆ÷¡¢´æ´¢Æ÷¡¢I/O½Ó¿Ú¡¢DMA¡¢¶¨Ê±Æ÷µÈϵͳÉè¼ÆÐèÒªµÄ¹¦ÄÜÄ£¿é¼¯³Éµ½Ò»¸öPLDÆ÷¼þÉÏ£¬¹¹½¨Ò»¸ö¿É±à³ÌµÄƬÉÏϵͳ¡£

 

ǶÈëʽӦÓÃÈí¼þ¶¼ÊÇÔËÐÐÔÚÌØ¶¨µÄÓ²¼þƽ̨Éϵġ£ÎÒËùʹÓõÄFPGAΪEP1C6Q240C8£¬Èç¹ûÖ»ÊÇʹÓÃFPGAÀ´ÊµÏÖÒ»¸ö´®¿ÚͨÐÅ£¬ÄÇôÔÚNios II IDEÖÐʹÓÃNios II device driversÀ´Ð´Ò»¸ö´®¿ÚͨѶ³ÌÐòÊÇÈÝÒ×ʵÏֵ쬵«ÊÇÎÒÃǵijÌÐòÒª±£´æÒ»Ð©Êý¾Ýµ½FLASHÖУ¬Nios II device driversËäÈ»ÌṩÁËHALºÍc¿â£¬µ«ÊÇûÓÐÌṩ¿É¶ÁдµÄÎļþϵͳ£¬ËùÒÔÎÒÃǾÍÑ¡ÁËÌṩÎļþϵͳ֧³ÖµÄeCosǶÈëʽ²Ù×÷ϵͳÀ´ÊµÏÖËùÐèÒªµÄ¹¦ÄÜ¡£ÄÇôeCosÔõÃ´ÒÆÖ²µ½nios II´¦ÀíÆ÷ÉÏ£¬ÓÖÔõÑùÔÚÕâÑùÒ»¸öƽ̨ÉÏ¿ª·¢´®¿ÚͨÐųÌÐòÄØ£¡ÎÒ°ÑÉè¼ÆµÄ¹ý³Ì·ÖΪÈý²¿·Ö£ºÓ²¼þƽ̨Éè¼Æ£¬eCos¿âµÄ±àÒ룬´®¿ÚͨÐųÌÐò¿ª·¢ºÍµ÷ÊÔ¡£

 

 

 

Ó²¼þƽ̨Éè¼Æ

 

      ¸ù¾ÝfpgaÐͺźÍflashÀàÐÍÏÈÒªÖÆ×÷Ä¿±ê°å¡£Quartus iiÓÐÒ»¸öÃüÁîmk_target_boardÊÇÓÃÀ´ÖÆ×÷Ä¿±ê°åµÄ£¬²Î¿´¸ÃÃüÁîµÄʹÓðïÖúÇë²Î¿¼Quartus ii°²×°Â·¾¶documentĿ¼ÏµÄflash-program-guide.pdf¡£Éú³ÉÄ¿±ê°å¹¤³Ìºó£¬Æô¶¯quartus ii 5.0ºÍsopc builderÈí¼þÉè¼Æ¸ÃÄ¿±ê°å¹¤³Ì£¬sopc builderÈí¼þÍê³ÉUART¡¢FLASH¡¢RAM×é¼þµÄÌí¼ÓºÍ±àÒë¡£quartus ii 5.0Èí¼þ½øÐÐ×ۺϲ¼Ïߣ¬±àÒëÉú³Éflash program file(Ò»¸ösofÎļþ)¡£  

 

È»ºóʹÓÃquartus ii 5.0ºÍsopc BuilderÈí¼þÉè¼ÆÎÒÃǵÄÓ¦Óù¤³Ì£¬ÔÚsopc builderÈí¼þÖÐÑ¡ÔñÎÒÃÇ×Ô¼ºÉè¼ÆµÄÄ¿±ê°å¡£Ìí¼Ó±ØÐèµÄ×é¼þºÍÄ£¿é£¬´®¿ÚͨÐÅÐèÒªµÄUART×é¼þ£¬±£´æÊý¾ÝµÄFLASH×é¼þµÈ¡£·ÖÅä¹Ü½Å¡¢±àÒ룬Éú³ÉFPGAÓ²¼þÅäÖÃÎļþ£¨Ò²ÊÇsofÎļþ£©¡£Sopc BuilderÉú³ÉµÄptfÎļþÒ²ÊÇÎÒÃÇÔÚºóÃæÅäÖÃecos¿âµÄʱºòÒªÓõ½µÄÎļþ¡£

 

 

 

eCos¿â±àÒë

 

eCos¿ÉÒÔµ½RedhatµÄÍøÕ¾»òÕßNios CommunityÂÛ̳ÕÒµ½£¬NiosÂÛ̳µÄeCosÊÇÒÆÖ²Á˵İ汾£¬¶øredhatÍøÕ¾ÉϵĻ¹Òª×Ô¼ºÒÆÖ²µ½Nios IIÉÏ¡£ÒÆÖ²Á˵İ汾֧³ÖÕâЩAlteraµÄAvalonÉ豸×é¼þ£ºTimer¡¢UART¡¢JTAG UART¡¢Lan91C111¡¢Ethernet Chip¡¢LCD 16207 Panel¡¢Compact FlashµÈ£¬ºóÃæÌáµ½µÄeCos¶¼ÊÇÖ¸ÒÆÖ²Á˵İ汾¡£°²×°ÒÆÖ²Á˵İ汾eCosÐèÒªÒ»¸öÌõ¼þ£¬¾ÍÊÇquartus IIÈí¼þÒªÂú×ã°æ±¾ÐèÇó£¬ÏÖÔÚNiosÂÛ̳ÉϵÄeCosÒѾ­¿ª·¢µ½5.1°æÁË¡£

 

Íê³ÉeCosµÄ°²×°ºó£¬¾Í¿ÉÒÔÅäÖÃeCosÁË£¬´ò¿ª¡°¿ªÊ¼¡ª>³ÌÐò¡ª>altera¡ª>niosii development kit¡ª> niosii sdk shell¡±£¬ÔÚniosii sdk shellÖÐÆô¶¯ÅäÖù¤¾ßnios2configtool£¬ÃüÁîÈçÏ£º

 

nios2configtool --ptf=/ecos-c/info_aquire/niosii_c.ptf  --cpu=cpu

 

²ÎÊýniosii_c.ptfÊÇÎÒÃÇÔÚÉè¼ÆÓ¦Óù¤³ÌʱÉú³ÉµÄÎļþ£¬cpuÊÇʹÓÃSopc Builder¶¨ÖƽӿÚʱÌí¼ÓNios II´¦ÀíÆ÷µÄÃû×Ö¡£½Ó×ųöÏÖÈçÏÂͼÐÎÅäÖýçÃæ£º

 

 

 

 ¸ù¾Ý¾ßÌåµÄUARTоƬÐͺţ¬´ÓpackageĿ¼ѡÔñÏàӦоƬµÄÇý¶¯¼ÓÈ룬Èç¹ûÐèÒªµÄUARTоƬÇý¶¯²»´æÔÚ£¬Ôò¿ÉÒԲο¼ÒÑÓеÄUARTоƬÇý¶¯½øÐÐÐ޸ġ£

 

´ò¿ª²Ëµ¥¡°build->package¡±Ìí¼Ó¡°serial device drivers¡±°üºÍ¡°FLASH device drivers¡±°ü£¬°ÑÎÒÃÇÐèÒªµÄ°üÌí¼ÓÍêºó£¬¾Í¿ÉÒÔ±àÒëeCos¿âÁË£¬´ò¿ª²Ëµ¥¡°build->library¡±±àÒëÉú³ÉeCos¿â£¬Ëü°üº¬includeÎļþĿ¼¡¢libÎļþĿ¼ºÍprogram_flashÎļþ¡£È»ºó¿ÉÒÔʹÓÃNios II IDE¼¯³É¿ª·¢¹¤¾ß¿ª·¢»ùÓÚeCosǶÈëʽ²Ù×÷ϵͳµÄ´®¿ÚͨÐųÌÐò¡£

 

 

 

 

´®¿ÚͨÐųÌÐò¿ª·¢ºÍµ÷ÊÔ

 

  1£©ÅäÖÿª·¢»·¾³

 

´ò¿ªNios II IDEÈí¼þ£¬Ð½¨Ò»¸ö¡°advanced c/c++ project¡±¹¤³Ì£¬Ñ¡ÔñÎÒÃÇ´®¿ÚͨÐųÌÐòËùÔÚµÄÎļþ¼ÐµÄĿ¼·¾¶¡£È»ºóÔÚ¡°build command¡±ÖÐÊäÈëÎÒÃǵ͍ÖƱàÒëÃüÁ

 

make  INSTALL_DIR=/ecos-c/info_aquire/vehicle_install

 

Õâ¸öĿ¼/ecos-c/info_aquire/vehicle_installÊÇÎÒÃǵıàÒëÉú³ÉµÄeCos¿âËùÔÚµÄĿ¼£¬²»ÒªºÍ´®¿ÚͨÐųÌÐòËùÔÚµÄĿ¼»ìÏý¡£

 

  2) ´®¿ÚͨÐųÌÐòÉè¼Æ

 

³ÌÐò¹¤×÷Ô­Àí£º´ÓPC»ú·¢ËÍÒ»ÌõÊ®Áù½øÖƸñʽµÄÊý¾Ý°üµ½´®¿ÚͨѶ³ÌÐò£¬´®¿ÚͨѶ³ÌÐòµÄ¶ÁÊý¾ÝÏß³ÌÊ×ÏȶԽÓÊÕµ½µÄÊý¾Ý½øÐÐÅжϣ¬Èç¹û½ÓÊÕµ½°üÍ·±êÖ¾£¬ÔòÖØÐ¿ªÊ¼Ìî³ä»º³åÇø£¬Èç¹û½ÓÊÕµ½°üβ±êÖ¾£¬Ôò½«»º³åÇøÊý¾Ý´«µÝ¸ø´¦ÀíÊý¾ÝÏ̶߳ÔÊý¾Ý°ü½øÐд¦Àí¡£´¦ÀíÊý¾ÝḬ̈߳´ÕÕ°üµÄÀàÐͱêÖ¾½øÐд¦Àí£¬Èç¹ûÔÚ´¦ÀíµÄ¹ý³ÌÖгöÏÖ´íÎó£¬Ôò°Ñ´íÎóµÄÐÅÏ¢·µ»Ø¸øPC£¬³É¹¦Ö´ÐÐÁËÔò·µ»Ø³É¹¦µÄ¶ÔÓ¦±êÖ¾ÈÃPCÈ·ÈϲÙ×÷Ö´Ðгɹ¦¡£

 

 

  ͨѶ°üЭÒ飺

 

Ãû³Æ

ÀàÐÍ

³¤¶È

ÃèÊö

°üÍ·

Hex

1

¹Ì¶¨Îª0xff

°üÀàÐÍ

Hex

1

 

Êý¾Ý²¿³¤¶È

Hex

1

Êý¾Ý²¿µÄÊ®Áù½øÖÆ×Ö½ÚÊý

Êý¾Ý²¿

Hex

0<=n<=256

±ä³¤µÄÊý¾Ý

CRCУÑé

Hex

2

Êý¾Ý²¿µÄУÑé½á¹û

°üβ

Hex

2

¹Ì¶¨Îª<CR><LF>(»Ø³µ¡¢»»ÐÐ)£¬×Ö·ûΪ¡®\r¡¯£¬¡®\n¡¯£»Ê®Áù½øÖÆÎª0x0d£¬0x0a

 

 

 

 

3£©³ÌÐòÖ÷Òª´úÂë·ÖÎö

 

    ¶¨Òå°üµÄÀàÐÍ£¬PKG_DATEºÍPKG_STATUSÊǽÓÊÕ°üÀàÐÍ£¬ANSWER_OKºÍANSWER_ERRÊÇ·µ»Ø±êÖ¾¡£

 

ÉùÃ÷Ï̺߳¯ÊýºÍÏ߳̾ä±ú£¬program_recvÊÇÊý¾Ý½ÓÊÕÏ̺߳¯Êý£¬program_dealÊÇ´¦ÀíÊý¾ÝÏ̺߳¯Êý¡£

 

  enum TPKG{PKG_DATE=0x50,PKG_STATUS=0x51 };

 

  enum TANSWER{ANSWER_OK=0,ANSWER_ERR=1};

 

  

 

cyg_thread thread_s[2];

 

char stack[2][4096];

 

cyg_handle_t   thread_recv,thread_deal;

 

cyg_thread_entry_t program_recv;

 

cyg_thread_entry_t program_deal;

 

ÏÂÃæº¯ÊýÊÇÒ»¸öÇëÇóÓ¦´ðº¯Êý£¬µ±echo_typeÊÇANSWER_OKʱ£¬Ê¹ÏûÏ¢½âÎö³É¹¦£¬ÇÒÃüÁîÖ´ÐУ»µ±echo_typeÊÇANSWER_ERRʱ£¬±íʾ½ÓÊÕÏûÏ¢´íÎó»òÕßÃüÁîûÓгɹ¦Ö´ÐС£

 

void request_answer(int echo_type,int pkg_type,int err_type,int err_val)

 

{

 

     unsigned short ret;

 

     const unsigned char  *pb;

 

     short hi,lo;

 

     int nlen;

 

    if(echo_type==ANSWER_OK){//³É¹¦·µ»Ø

 

      unsigned char chACK[]={

0xff,0x1c,0x01,pkg_type,0x00,0x00,'\r','\n'};

 

      ret=checkcrc(&chACK[3],1);

 

      hi=(ret>>8)&0xff;

 

      lo=ret&0xff;

 

      chACK[4]=lo;

 

      chACK[5]=hi;

 

      nlen=sizeof(chACK); 

 

      cyg_io_write( handle, chACK, &nlen );

 

     }  else if(echo_type==ANSWER_ERR) {  //ʧ°Ü·µ»Ø     

 

       unsigned char chNAK[]={0xff,0x1a,0x03,pkg_type,err_type,err_val,0x00,0x00,'\r','\n'};

 

       ret=checkcrc(&chNAK[3],3);

 

       hi=(ret>>8)&0xff;

 

       lo=ret&0xff;

 

       chNAK[6]=lo;

 

       chNAK[7]=hi;

 

       nlen=sizeof(chNAK); 

 

       cyg_io_write(handle, chNAK, &nlen);

 

    }   

 

}

 

¶¨ÒåÊý¾Ý½ÓÊÕÏ̺߳ÍÊý¾Ý´¦ÀíỊ̈߳¬½ÓÊÕÏ߳̽ÓÊÕÊý¾Ý£¬½ÓÊÕµ½ÁËÒ»¸öÕû°ü£¬¾Í°ÑÕâ¸ö°ü¿½±´¸øÈ«¾ÖÊý¾Ý»º³åÇø£¬È»ºóÓÉÊý¾Ý´¦ÀíÏ߳̽øÐд¦Àí¡£

 

´úÂ룺

 

 cyg_io_handle_t handle ;

 

 unsigned char g_package[256];//´«µÝ¸ø´¦ÀíÏ̵߳ÄÈ«¾ÖÊý¾Ý»º³åÇø

 

 int           g_npkg=0;         //»º³åÇøµÄ×Ö·ûÊý

 

static void program_recv( )

 

{ 

 

Cyg_ErrNo err;

 

//´ò¿ª´®¿Ú£¬·µ»Ø´®¿ÚµÄ¾ä±ú¸ø²ÎÊýhandle

 

    err = cyg_io_lookup("/dev/uart_usb", &handle); 

 

    unsigned char buff;

 

    unsigned char content[256];//ÁÙʱ»º³åÇø

 

    int count="0",len;

 

    while(1){

 

        len=1;

 

//¶ÁÒ»¸ö×Ö½Ú£¬·Åµ½buffÖÐ

 

          err=cyg_io_read(handle,(void*)&buff, &len);

 

         if (ENOERR == err) {

 

             if(buff==0xff){

 

                 count=0;

 

                 content[count++]=buff;

 

          } else content[count++]=buff; 

 

     

 

         if((buff==0x0a)&&(content[count-2]==0x0d)){

 

            g_npkg=0; //¿½±´Êý¾Ýµ½È«¾ÖÊý¾Ý»º³åÇø  

 

            while((count--)>0){

 

            g_package[g_npkg]=content[g_npkg];

 

            g_npkg++;

 

           }         

 

         }

 

         if(count>=255) {   //·ÀÖ¹ÒâÍâ·¢Éú£¬²»ÄÜʹÊý×éÔ½½ç

 

           count%=256;

 

         }

 

      } // end    if(ENOERR == err)         

 

    }//end while(1)

 

}

 

Êý¾Ý´¦ÀíÏ̸߳ºÔð´¦ÀíÒ»¸öÍêÕûµÄÊý¾Ý°ü¡£

 

static void program_deal(cyg_addrword_t datat)

 

{

 

    int delay;          

 

    while(1){

 

     //È«¾ÖÊý¾Ý»º³åÇøÓÐÊý¾Ý£¬²¢Çҳɹ¦´ò¿ªÁË´®¿ÚÔòÖ´ÐÐÊý¾Ý´¦Àí

 

       if(g_npkg&&handle){

 

         //Ê×ÏÈͨ¹ýcheckcrc()½øÐÐcrcµÄУÑé¡£

 

         unsigned short ret="checkcrc"(&g_package[3],g_package[2]);

 

         const unsigned char  *pb=&g_package[3]+g_package[2];

 

         short hi,lo;

 

         int nlen;

 

         hi=(ret>>8)&0xff;

 

         lo=ret&0xff;

 

         //±È½ÏУÑéºóµÄ½á¹û£¬ÕýÈ·Ôò´¦Àí°ü£¬´íÎóÔò·µ»Ø´íÎóÏûÏ¢

 

         if((lo==*pb)&&(hi==*(pb+1))){

 

           //Ö´ÐÐÃüÁîÖ¸¶¨µÄ¶¯×÷¡­¡­¡­

 

         } else{

 

           request_answer(ANSWER_ERR,g_package[1],0,lo);

 

         }

 

         g_npkg=0;//²»ÒªÍüÁËÇå¿ÕÈ«¾ÖÊý¾Ý»º³åÇø

 

       }

 

}

 

}

 

4£©±àÒë¡¢µ÷ÊÔ¼°ÏÂÔØ

 

´ò¿ªÈí¼þ¡°Niosii¡±£¬Ð½¨Ò»¸ö¹¤³Ì£¬¾Í¿ÉÒÔ¿ªÊ¼Ð´´úÂëÁË¡£´úÂëдÍêºó£¬Í¨¹ý²Ëµ¥¡°project\build all¡±±àÒ빤³ÌÏîÄ¿£¬±àÒë³É¹¦ºó¿ÉÒÔÆô¶¯Nios iiµÄµ÷ÊÔÆ÷½øÐÐÔÚÏßµ÷ÊÔ£¬ÔÚÐèÒªµ÷ÊÔµÄÐÐÉèÖöϵ㣬ͨ¹ý²Ëµ¥¡±run\debug as\nios ii hardware¡±Æô¶¯µ÷ÊԻỰ¡£µ÷ÊÔÍê³ÉÔò¿ÉÒÔÏÂÔØÓ¦ÓóÌÐòµ½FLASHÖУ¬ÐèÒª´ò¿ªNios II SDK SHELL£¬½øÈëµ½ÎÒÃǵÄÓ¦ÓóÌÐòĿ¼£¬ÊäÈëÈçÏÂÃüÁ

 

/my-ecos-lib-path/program-flash    application

 

Õâ¸ömy-ecos-lib-path¾ÍÊÇÎÒÃDZàÒëµÄeCos¿âµÄ·¾¶£¬applicationÊÇÎÒÃǵÄNios ii±àÒëºÍµ÷ÊԺõÄÓ¦ÓóÌÐò¡£

 

  

 

±¾ÎÄÊÇÎÒÔÚʵ¼ÊÏîÄ¿¿ª·¢Öеľ­Ñé×ܽᣬϣÍû¶Ô´ÓÊÂǶÈëʽ¿ª·¢µÄÅóÓÑÓÐËù°ïÖú£¬ÌرðÊÇʹÓÃNios II´¦ÀíÆ÷¿ª·¢µÄÅóÓÑ¡£

 

 

Ïà¹Ø×ÊÁÏ£º

 

NiosII´¦ÀíÆ÷ÊÇAltera¹«Ë¾ÎªÆäFPGA²úÆ·ÅäÌ׿ª·¢µÄÈíºËCPU£¬ËüÃÇÊÇÔÚFPGAÉÏͨ¹ý±à³ÌµÄ·½Ê½ÊµÏֵģ¬×÷Ϊһ¸ö×é¼þ¿ÉÒÔºÍÆäËüµÄ²¿¼þ×éºÏÔÚÒ»Æð,ÔÚµ¥Æ¬FPGAÉϾͿÉÒÔ²¼ÖÃÒ»¸öº