»ùÓÚ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.# |