»ùÓÚFPGAµÄRISC΢´¦ÀíÆ÷µÄÉè¼ÆÓëʵÏÖ

ÕªÒª£º»ùÓÚFPGAºÍµç×ÓÉè¼Æ×Ô¶¯»¯¼¼Êõ£¬²ÉÓÃÄ£¿é»¯Éè¼ÆµÄ·½·¨ºÍVHDLÓïÑÔ£¬Éè¼ÆÒ»¸ö»ùÓÚFPGAµÄRISC΢´¦ÀíÆ÷¡£¸Ã΢´¦ÀíÆ÷Ö÷ÒªÓÉ¿ØÖÆÆ÷¡¢ÔËËãÆ÷ºÍ¼Ä´æÆ÷×é³É£¬¾ßÓÐÖ¸Áî¿ØÖÆ¡¢²Ù×÷¿ØÖÆ¡¢Ê±¼ä¿ØÖƺÍÊý¾Ý¼Ó¹¤µÈ»ù±¾¹¦ÄÜ£¬ÆäÖ¸Á¶ÈΪ16붨³¤£¬²ÉÓÃÁ¢¼´Ñ°Ö·ºÍÖ±½ÓѰַÁ½ÖÖ·½Ê½¡£·ÂÕæ½á¹û±íÃ÷£¬»ùÓÚFPGAµÄRISC΢´¦ÀíÆ÷µÄʱÖÓÆµÂÊΪ23.02MHz£¬ÇÒ¹¦ÄÜÍêÈ«´ïµ½Éè¼ÆÒªÇó¡£

   ¹Ø¼ü´Ê£ºRISC΢´¦ÀíÆ÷£»µç×ÓÉè¼Æ×Ô¶¯»¯£»ÏÖ³¡¿É±à³ÌÃÅÕóÁУ»VHDLÓïÑÔ

    20ÊÀ¼Í80Äê´ú³õÐËÆðµÄRISC¼¼ÊõÒ»Ö±ÊǼÆËã»ú·¢Õ¹µÄÖ÷Á÷£¬RISC΢´¦ÀíÆ÷µÄһЩ»ù±¾ÀíÂÛÔòÊǼÆËã»úÁìÓòµÄÖØÒª»ù´¡³£Ê¶£¬µ«¾ßÌåʵÏÖÈÔÓÐÄѶȡ£µç×ÓÉè¼Æ×Ô¶¯»¯(Electronic Design Automation£¬¼ò³ÆEDA)ÊÇÏÖ´úµç×ÓÉè¼ÆµÄºËÐļ¼Êõ¡£ÀûÓÃEDA¼¼Êõ½øÐеç×ÓϵͳÉè¼ÆµÄÖ÷ҪĿ±êÊÇÍê³ÉרÓü¯³Éµç·(ASIC)µÄÉè¼Æ£¬¶øÏÖ³¡¿É±à³ÌÃÅÕóÁÐ(FPGA)ºÍ¸´Ôӿɱà³ÌÂß¼­Æ÷¼þ(CPLD)ÊÇʵÏÖÕâһ;¾¶µÄÖ÷Á÷Æ÷¼þ¡£ÏÖ³¡¿É±à³ÌͨÓÃÃÅÕóÁÐ(Field Program mableGateArray£¬¼ò³ÆFPGA)µÄÄÚ²¿¾ßÓзḻµÄ¿É±à³Ì×ÊÔ´¡£FPGAÍⲿÁ¬ÏߺÜÉÙ¡¢µç·¼òµ¥¡¢±ãÓÚ¿ØÖÆ¡£FPGAĿǰÒÑ´ïǧÍòÃűê¼Ç (10million-gatemark)£¬Ëٶȿɴï200¡«400MHz¡£±¾ÎĽéÉÜÁËÒ»ÖÖ»ùÓÚFPGA¼¼ÊõÓÃVHDL(VHSICHardw are Description Language)ÓïÑÔʵÏÖµÄ8λRISC΢´¦ÀíÆ÷£¬²¢¸ø³öÁË·ÂÕæ×ۺϽá¹û¡£

    ΢´¦ÀíÆ÷¹¦ÄÜ¡¢×é³É¼°Ö¸Á

    ±¾ÎÄÉè¼ÆµÄRISC΢´¦ÀíÆ÷×ñÑ­ÁËRISC»úÆ÷µÄÒ»°ãÔ­Ôò£ºÖ¸ÁîÌõÊýÉÙ¶ø¸ßЧ¡¢Ö¸Á¶È¹Ì¶¨¡¢Ñ°Ö··½Ê½²»³¬¹ýÁ½ÖÖ¡¢´óÁ¿²ÉÓüĴæÆ÷¡¢ÎªÌá¸ßÖ¸ÁîÖ´ÐÐËÙ¶È¡¢Ö¸ÁîµÄ½âÊͲÉÓÃÓ²ÁªÏß¿ØÖƵȵȡ£

    RISC΢´¦ÀíÆ÷µÄ¹¦ÄܺÍ×é³É
    ΢´¦ÀíÆ÷ÊÇÕû¸ö¼ÆËã»úϵͳµÄºËÐÄ£¬Ëü¾ßÓÐÈçÏ»ù±¾¹¦ÄÜ£ºÖ¸Áî¿ØÖÆ¡¢²Ù×÷¿ØÖÆ¡¢Ê±¼ä¿ØÖÆ¡¢Êý¾Ý¼Ó¹¤¡£±¾ÎÄÉè¼ÆµÄ΢´¦ÀíÆ÷Ö÷ÒªÓÉ¿ØÖÆÆ÷¡¢ÔËËãÆ÷ºÍ¼Ä´æÆ÷×é³É£¬»¹°üÀ¨³ÌÐò¼ÆÊýÆ÷¡¢ÒëÂëÆ÷µÈһЩÆäËûµÄ±ØÒªÂß¼­²¿¼þ¡£¿ØÖÆÆ÷ÊÇ·¢²¼ÃüÁîµÄ¡°¾ö²ß»ú¹¹¡±£¬¼´Íê³ÉЭµ÷ºÍÖ¸»ÓÕû¸ö¼ÆËã»úϵͳµÄ²Ù×÷¡£Ïà¶ÔÓÚ¿ØÖÆÆ÷¶øÑÔ£¬ÔËËãÆ÷½ÓÊÜ¿ØÖÆÆ÷µÄÃüÁî¶ø½øÐж¯×÷£¬¼´ÔËËãÆ÷Ëù½øÐеÄÈ«²¿²Ù×÷¶¼ÊÇÓÉ¿ØÖÆÆ÷·¢³öµÄ¿ØÖÆÐźÅÀ´Ö¸»ÓµÄ£¬ËùÒÔËüÊÇÖ´Ðв¿¼þ¡£´æ´¢Æ÷ÊǼÇÒäÉ豸£¬´æ´¢µ¥Ôª³¤¶ÈÊÇ8룬ÓÃÀ´´æ·Å³ÌÐòºÍÊý¾Ý¡£

    ΢´¦ÀíÆ÷µÄÖ¸Á
    ΢´¦ÀíÆ÷µÄÖ¸Á¶ÈΪ16붨³¤£¬Ã¿ÌõÖ¸ÁîÕ¼Á½¸ö´æ´¢µ¥Ôª£¬Ñ°Ö··½Ê½½öÓÐÁ¢¼´Ñ°Ö·¡¢Ö±½ÓѰַÁ½ÖÖ¡£¸ÃRISC΢´¦ÀíÆ÷ѡȡÁËʹÓÃÆµ¶È½Ï¸ßµÄ8ÖÖÖ¸Áî LDA¡¢STO¡¢JMP¡¢ADD¡¢AND¡¢XOR¡¢SKZ¡¢HLTµÈ¡£Ö¸Áî²Ù×÷ÂëÕ¼ÓÃÖ¸Áî×ֵĸß4λ£¬Ô¤ÁôÁ˿ռ䣬±ãÓÚÒÔºóÖ¸ÁµÄÀ©Õ¹¡£Ö¸ÁîÖÜÆÚÊÇÓÉ8 ¸öʱÖÓ×é³É£¬Ã¿¸öʱÖÓ¶¼ÒªÍê³É¹Ì¶¨µÄ²Ù×÷¡£²¿·ÖµäÐÍÖ¸ÁîµÄ²Ù×÷Á÷³ÌͼÈçͼ1Ëùʾ¡£

   
    ͼ1¡¡²¿·ÖÖ¸Áî²Ù×÷Á÷³Ì

    ¹Ø¼üÄ£¿éµÄÉè¼Æ
    RISC΢´¦ÀíÆ÷ÊÇÒ»¸ö¸´ÔÓµÄÊý×ÖÂß¼­µç·£¬µ«Æä»ù±¾²¿¼þµÄÂß¼­²¢²»¸´ÔÓ£¬¿ÉÒÔ°ÑËü·ÖΪʱÖÓ²úÉúÆ÷¡¢Ö¸Áî¼Ä´æÆ÷¡¢ÀÛ¼ÓÆ÷¡¢ËãÊõÂß¼­µ¥Ôª¡¢Êý¾Ý¿ØÖÆÆ÷¡¢×´Ì¬¿ØÖÆÆ÷¡¢³ÌÐò¼ÆÊýÆ÷¡¢µØÖ·¶à·Æ÷µÈµ¥ÔªÀ´¿¼ÂÇ¡£ÔÚÓ²¼þÑé֤ʱ»¹ÐèÒª½¨Á¢Ò»Ð©ÈçROM/RAMºÍµØÖ·ÒëÂëÆ÷µÈ±ØÒªµÄÍâΧÆ÷¼þ¡£ÒÔÏÂÊǼ¸¸ö¹Ø¼üÄ£¿éµÄÉè¼Æ¡£

    ʱÖÓ²úÉúÆ÷µÄÉè¼Æ

   
    ͼ2¡¡Ê±ÖÓ²úÉúÆ÷µç·µÄÉè¼Æ

    ʱÖÓ²úÉúÆ÷Pulse²úÉúµÄµç·Èçͼ2Ëùʾ£¬¼ÆËã»úµÄЭµ÷¶¯×÷ÐèҪʱ¼ä±êÖ¾£¬ËüÓÃʱÐòÐźÅÌåÏÖ£¬Ê±ÖÓ²úÉúÆ÷ÕýÊDzúÉúÕâЩʱÐòÐÅºÅµÄÆ÷¼þ¡£Í¼2ÖÐʱÖÓ²úÉúÆ÷ÀûÓÃÍâÀ´Ê±ÖÓÐźÅclk²úÉúһϵÁÐʱÖÓÐźÅclk1£¬fetch£¬aluclkµÈ£¬²¢ËÍÍù΢´¦ÀíÆ÷µÄÆäËû²¿¼þ¡£rst¿ØÖÆ×Å΢´¦ÀíÆ÷µÄ¸´Î»ºÍÆô¶¯²Ù×÷£¬µ± rstÒ»½øÈë¸ßµçƽ£¬Î¢´¦ÀíÆ÷¾Í½áÊøÏÖÐвÙ×÷£¬²¢ÇÒÖ»ÒªrstÍ£ÁôÔÚ¸ßµçÆ½×´Ì¬£¬Î¢´¦ÀíÆ÷¾Íά³Ö¸´Î»×´Ì¬¡£rst»Øµ½µÍµçƽºóÔÚ½Ó×ŵ½À´µÄfetchÉÏÉýÑØÆô¶¯Î¢´¦ÀíÆ÷¿ªÊ¼¹¤×÷¡£

    ÓÉÓÚʱÖÓ²úÉúÆ÷¶Ô΢´¦ÀíÆ÷¸÷ÖÖ²Ù×÷ʵʩʱ¼äÉϵĿØÖÆ£¬ËùÒÔÆäÐÔÄܺûµ´Ó¸ù±¾ÉϾö¶¨ÁËÕû¸ö΢´¦ÀíÆ÷µÄÔËÐÐÖÊÁ¿¡£±¾Éè¼Æ²ÉÓõÄͬ²½×´Ì¬»úµÄÉè¼Æ·½·¨£¬Ê¹µÃclk1£¬fetch£¬alu_clkÔÚÌø±äʱ¼äͬ²½ÐÔÄÜÉÏÓÐÏÔÖøÌáÉý£¬ÎªÕû¸öϵͳÐÔÄܵÄÌá¸ß´òÏÂÁ¼ºÃµÄ»ù´¡¡£

    ״̬¿ØÖÆÆ÷µÄÉè¼Æ
    ״̬¿ØÖÆÆ÷µÄµç·ͼÈçͼ3Ëùʾ¡£´ÓʵÏÖµÄ;¾¶¿´£¬RISC΢´¦ÀíÆ÷ÓëÒ»°ãµÄ΢´¦ÀíÆ÷µÄ²»Í¬Ö®´¦ÔÚÓÚ£¬ËüµÄʱÐò¿ØÖÆÐźŵÄÐγɲ¿¼þÊÇÓÃÓ²²¼ÏßÂß¼­ÊµÏÖ¶ø²»ÊDzÉÓÃ΢³ÌÐò¿ØÖÆ¡£ÓÉÓÚÆ÷¼þ±¾ÉíÉè¼Æ±È½Ï¸´ÔÓ£¬ÇÒ¶Ô¸÷¸ö¿ØÖÆÐźŵÄʱÐòÓÐÑϸñÒªÇó£¬ËùÒÔÆäVHDL³ÌÐòÓÃÓÐÏÞ״̬»úFSMÀ´ÊµÏÖ¡£

   
    ͼ3¡¡×´Ì¬¿ØÖÆÆ÷µç·

    ½á¹¹Ìå³ÌÐòÈçÏ£º
¡¡    architecturertlofstatctlis
¡¡    typemystateis(st0£¬st1£¬st2£¬st3£¬st4£¬st5£¬st6£¬st7)£»
¡¡    signalcurstate£ºmystate£»
¡¡    begin
¡¡    process(clk1£¬ena)
¡¡    begin
¡¡    iffallingedge(clk1)¡¡then
¡¡    if(ena=¡¯0¡¯)then
¡¡    ¡¡¡¡curstate<=st0£»¡¡incpc<=¡¯0¡¯£»¡¡
¡¡    load_acc<=¡¯0¡¯£»¡¡loadpc<=¡¯0¡¯£»¡¡
¡¡    rd<=¡¯0¡¯£»¡¡wr<=¡¯0¡¯£»¡¡loadir<=¡¯0¡¯£»¡¡
    ¡¡datactlena<=¡¯0¡¯£»¡¡halt<=¡¯0¡¯£»
¡¡    ¡¡else
¡¡¡¡¡¡    case¡¡curstate¡¡is
¡¡¡¡¡¡    ¡¡when¡¡st0¡¡=>......
¡¡¡¡    ¡¡¡¡when¡¡st1¡¡=>......
¡¡¡¡    ¡¡¡¡when¡¡st2¡¡=>......
¡¡¡¡    ¡¡¡¡when¡¡st3¡¡=>cur_state<=st4£»
  ¡¡¡¡¡¡¡¡    if(opcode=hlt)then......
¡¡¡¡¡¡¡¡    ¡¡¡¡¡¡¡¡¡¡¡¡else......
¡¡¡¡¡¡¡¡    ¡¡whenst4=>curstate<=st5£»
¡¡¡¡¡¡¡¡    if(opcode=jmp)then......
¡¡¡¡¡¡    ¡¡elsif(opcode=addoropcode=ann
    oropcode=xoooropcode=lda)then
¡¡¡¡    ¡¡¡¡elsif(opcode=sto)then...else...
¡¡    ¡¡¡¡¡¡when¡¡st5¡¡=>curstate<=st6£»
¡¡    ¡¡¡¡¡¡if(opcode=addoropcode=annor
¡¡    opcode=xoooropcode=lda)¡¡
    ¡¡then......
¡¡    ¡¡¡¡¡¡elsif(opcode=skzandzero=¡¯1¡¯)
¡¡    then......
¡¡    ¡¡¡¡¡¡elsif(opcode=jmp)¡¡then......
¡¡    ¡¡¡¡¡¡elsif(opcode=sto)¡¡then......
¡¡    ¡¡¡¡¡¡else......
¡¡    ¡¡¡¡¡¡when¡¡st6¡¡=>curstate<=st7£»
¡¡    ¡¡¡¡¡¡if(opcode=sto)then......
¡¡    ¡¡¡¡elsif(opcode=addoropcode=ann
    ¡¡oropcode=xoooropcode=lda)¡¡
    ¡¡then......
    ¡¡¡¡¡¡¡¡else......
    ¡¡¡¡¡¡when¡¡st7¡¡=>curstate<=st0£»
    ¡¡¡¡¡¡if(opcode=skzandzero=¡¯1¡¯)then......
    ¡¡¡¡¡¡¡¡else......
    ¡¡¡¡¡¡when¡¡others=>......
¡¡¡¡    ¡¡¡¡endcase£»
¡¡¡¡    ¡¡¡¡endif£»
¡¡    ¡¡endif£»
¡¡    ¡¡endprocess£»
¡¡    endrtl£»

    ËãÊõÂß¼­µ¥ÔªALUµÄÉè¼Æ
    ALUÊǾø´ó¶àÊýÖ¸Áî±ØÐë¾­¹ýµÄµ¥Ôª£¬ËùÓеÄÔËËã¶¼ÔÚËãÊõÂß¼­µ¥ÔªALU½øÐС£ALU½ÓÊÜÖ¸Áî¼Ä´æÆ÷IRËÍÀ´µÄ4λָÁî²Ù×÷Â룬¸ù¾Ý²»Í¬µÄÖ¸ÁALUÔÚÐźÅalu_clkµÄÕýÌø±äÑØ´¥·¢ÏÂÍê³É¸÷ÖÖËãÊõÂß¼­ÔËË㡣΢´¦ÀíÆ÷¸÷²¿¼þ½á¹¹Èçͼ4Ëùʾ¡£

    Èí¼þ×ÛºÏÓë·ÂÕæºÍÓ²¼þʵÏÖ

    ΢´¦ÀíÆ÷µÄÈí¼þ×ÛºÏÓë·ÂÕæ
    ¸Ã΢´¦ÀíÆ÷Éè¼Æ¹²ÓÐ11¸ö»ù±¾Ä£¿é£¬³ýǰÎÄ·ÖÎöµÄ3¸öÄ£¿éÍ⣬»¹ÓÐÖ¸Áî¼Ä´æÆ÷IR¡¢ÀÛ¼ÓÆ÷ACC¡¢³ÌÐò¼ÆÊýÆ÷PC¡¢¼òµ¥µÄ´æ´¢Æ÷ROM/RAM¡¢µØÖ·¶à·Æ÷ADDRµÈÄ£¿é¡£ËùÓеÄÄ£¿é²ÉÓÃQuartus4.2µ¥¶À×ۺϣ¬²¢µ÷ÊÔͨ¹ý£¬ÇÒ¶¼Éú³ÉÓе¥¶ÀµÄ*.bsfÎļþ£¬×îºó´´½¨Ò»¸ö¶¥²ãÎļþtop.bdf£¬°ÑËùÓлù±¾Ä£¿éµÄbsfÎļþÁ¬½Ó³ÉÈçͼ4µÄÐÎʽ¡£×öÍê¶¥²ãÉè¼Æºó£¬²ÉÓÃQuartus4.2½øÐÐ×ÛºÏÓë·ÂÕæ¡£ÏµÍ³·ÂÕæµÄ²¿·Ö½á¹ûÈçͼ5Ëùʾ£¬´Óͼ5¿ÉÒÔ¿´³ö£¬´æ·ÅÔÚ´æ´¢Æ÷²»Í¬µØÖ·ÖеÄ2¸ö²Ù×÷Êý3CH(00111100)ºÍ18H(00011000)ÏàÒì»òʱ£¬½á¹û24H(00100100)ÔÚÐźÅwrµÄÉÏÉýÑØ´¥·¢Ï´æÈë´æ´¢Æ÷ÖС£ÎÒÃÇ¿ÉÇå³þµØ¿´µ½Ã¿ÌõÖ¸Áî¶¼ÊÇÔÚÒ»¸öÖ¸ÁîÖÜÆÚÖÐÍê³É¡£Êý¾Ý×ÜÏßdataÉϼǼ×ÅÖ¸ÁîµÄÔËÐÐÇé¿ö£¬Í¬Ê±Ò²¿É¿´µ½¿ÕÏÐʱÆä³Ê¸ß×è״̬¡£

   
    ͼ4¡¡Î¢´¦ÀíÆ÷¸÷²¿¼þµÄ½á¹¹

   
    ͼ5¡¡·ÂÕæ²¨ÐÎ

    Ö÷ÒªµÄ³ÌÐòÈçÏ£º
    µØÖ·¡¡»úÆ÷´úÂë¡¡»ã±àÓïÑÔÔ´³ÌÐò
¡¡    00¡¡11000000¡¡JMP¡¡L1¡¡£»L1->PC
¡¡    01¡¡00000100
¡¡    04¡¡10100000¡¡LDA¡¡R2¡¡£»(0E)->R2
    ¡¡05¡¡00001110
    ¡¡06¡¡10000000¡¡XORR1£¬R2£»(R1)xor(R2)- >(R1)
    ¡¡07¡¡00001111
¡¡    08¡¡11000001¡¡STO¡¡¡¡¡¡£»(R1)->(0F)
¡¡    0A¡¡00000000¡¡HLT¡¡¡¡¡¡£»stop
¡¡    0B¡¡00000000
¡¡    0E¡¡00111100
    ¡¡0F¡¡00011000

    ΢´¦ÀíÆ÷µÄÓ²¼þʵÏÖ
    »ùÓÚFPGAµÄRISC΢´¦ÀíÆ÷µÄ×îÖÕÓ²¼þÑéÖ¤ÔÚº¼ÖÝ¿µÐ¾¹«Ë¾Éú²úµÄGW48EDAϵͳÉϽøÐС£Ç°ÃæµÄ·ÂÕæ½á¹ûÈ·ÈÏÎÞÎóºó£¬Ñ¡ÓÃGW48EDAϵͳµÄµç·ģʽNo.5£¬²éÔÄ´ËϵͳµÄÒý½Å¶ÔÕÕ±íËø¶¨¸÷Òý½Å£¬Ö®ºóÐèÖØÐ±àÒëÒ»´Î£¬ÒÔ±ã°ÑÒý½ÅËø¶¨ÐÅÏ¢±àÒë½ø±à³ÌÏÂÔØÎļþ¡£×îºó°Ñ±àÒëºÃµÄtop.sofÎļþ¶ÔÄ¿±êÆ÷¼þFPGAÏÂÔØ£¬µÃµ½Âú×ãÉè¼ÆÒªÇóµÄоƬ¡£±¾Éè¼ÆµÄÔØÌåÑ¡ÓÃAltera¹«Ë¾µÄCycloneϵÁÐFPGAÆ÷¼þEP1C6Q240C6£¬Ó²¼þÑéÖ¤½á¹û±íÃ÷£¬¸ÃRISC΢´¦ÀíÆ÷ʱÖÓÆµÂÊΪ23.02MHz£¬Æä¹¦ÄÜÍêÈ«´ïµ½Éè¼ÆÒªÇó¡£

    ½áÊøÓï

    ±¾ÎÄ»ùÓÚFPGAµÄ΢´¦ÀíÆ÷¾ß±¸ÁËRISC΢´¦ÀíÆ÷µÄ»ù±¾¹¦ÄÜ£¬¶øÇÒÆäÈÝÒ×ÓÅ»¯Éý¼¶¡£¸Ã΢´¦ÀíÆ÷²»½ö¿É×÷Ϊһ¸öÄ£¿éÓÃÓÚÆ¬ÉÏϵͳµÄÉè¼Æ£¬¶øÇÒÒ²³ä·ÖչʾÁËʹÓÃFPGAºÍVHDL½øÐÐEDAÊý×ÖϵͳÉè¼ÆµÄÓÅÔ½ÐÔ£¬¾ßÓÐʵÓüÛÖµ¡£






#If you have any other info about this subject , Please add it free.#
êdzÆ:
ÓÊÏä:
µç»°:

ÄúµÄÁôÑÔ:


Èç¹ûÄúÓйØÓÚ »ùÓÚFPGAµÄRISC΢´¦ÀíÆ÷µÄÉè¼ÆÓëʵÏÖ ·½ÃæµÄ²úÆ·»òÕß¿´·¨£¬¾´ÇëÔÚ´Ë·¢²¼.

pushmail ²ÜάÐÂ