äžè¬ã«ããã®åºçç©ã®åºç€ã¯ç§ã®ã³ãŒã¹ãããžã§ã¯ãã§ãããHabréã§åºçç©ãäœæããææ¡ãããŠãããç§ã®å çã«æè¬ãããŸããã
ç§ã泚ç®ãããäž»ãªããšã¯ãå žåçãªå€å±€ãã¹ããã³ããããã¯ã®èª¬æãšãSystemVerilogèšèªã®åºæ¬çãªæ§æã®ããã€ããšæ€èšŒã®é©çšã§ãã ç§ã䜿çšããã¢ãããŒãã¯ããããžã§ã¯ãã®éçºãç°¡çŽ åããå人çã«ã¯äŸ¿å©ãªå€æŽãå ãããããããOpen Verification MethodologyïŒOVMïŒã«åºã¥ããŠããŸãã
ãããè¡ããïŒ
ããã€ã¹ã®ä»æ§ãšãã®åäœåç
以äžã®è³æã¯ãããã€ã¹ã®ä»æ§ãšã¯ã»ãšãã©èšããŸããããè©Šã¿ãããŸããã ãããŠãããã¯ããããæ¥ããã®ã§ãã
æ€èšŒæžã¿ã®ããã€ã¹ã¯ã ãŒã¢ã®æéç¶æ ãã·ã³ã§ããããã®ç®çã¯èªå販売æ©ãæäœããããšã§ãã
ããã€ã¹ã€ã³ã¿ãŒãã§ã€ã¹ïŒ7ã€ã®å ¥åä¿¡å·/ãã¹ãš6ã€ã®åºåä¿¡å·/ãã¹ã ä¿¡å·ã®ç®çããã®å解èœãããã³äŸ¿å®äžã®æ¹åã¯è¡šåœ¢åŒã§ç€ºãããŠããŸãã
ä¿¡å·/ãã¹å | æ¹å | åå®¹äººæ° | äºå® |
---|---|---|---|
i_clk | å ¥å | 1 | åæä¿¡å· |
i_rst_n | å ¥å | 1 | ã¢ã¯ãã£ãããŒãªã»ãã |
i_money | å ¥å | 4 | é貚åäœã®ã³ãŒããéä¿¡ããããã¹ |
i_money_valid | å ¥å | 1 | i_moneyãã¹ã®ã³ãŒãæå¹æ§ä¿¡å· |
i_product_code | å ¥å | 4 | 補åã³ãŒããéä¿¡ããããã¹ |
i_buy | å ¥å | 1 | è³Œå ¥ç¢ºèªä¿¡å· |
i_product_ready | å ¥å | 1 | 補åã®åºè·æºåãã§ããããšã瀺ãä¿¡å·ïŒå ¥åãå¥ã®ããã€ã¹ã補åã®æºåã«åŸäºããŠããããšãåãå ¥ããããïŒ |
o_product_code | äŒã¿ | 4 | ãã€ã€ãŒãžã®çºè¡ã®è£œåã³ãŒã |
o_product_valid | äŒã¿ | 1 | o_product_codeãã¹äžã®æ å ±æå¹æ§ä¿¡å· |
o_busy | äŒã¿ | 1 | ã¹ããŒããã·ã³ãçŸåšã®æ³šæã®åŠçã§ããžãŒã§ããããšã瀺ãã·ã°ãã« |
o_change_denomination_code | äŒã¿ | 4 | é ä¿¡ããŸãã¯é貚åäœã®éçš®ã®ã³ãŒã |
o_change_valid | äŒã¿ | 1 | o_change_denomination_codeãã¹äžã®æå¹æ§ä¿¡å· |
o_no_change | äŒã¿ | 1 | å€æŽå®äºã®åå³ |
åèšã§ãã¹ããŒããã·ã³ã«ã¯4ã€ã®ç¶æ ããããŸãïŒCHOOSE_PRODUCTãENTER_MONEYãGIVE_PRODUCTãGIVE_CHANGEã
ååãããååãšããŠãäœãæ確ã§ãããšæããŸãã
ããããæ確ã§ãªãå Žåã¯ãæ確ã«ããå¿
èŠããããŸã
CHOOSE_PRODUCTïŒãã®ç¶æ
ã§ã¯ãã¹ããŒããã·ã³ã¯è£œåã³ãŒããåãå
¥ãã賌å
¥ã®ç¢ºèªãåŸ
ã¡ãŸã
ENTER_MONEYïŒããã§ã¯ãé貚åäœã®éçš®ã®ã³ãŒãã®åœ¢ã§æ©æ¢°ã«ãéãäŸçµŠããŸãã 次ã®ç¶æ ãžã®ç§»è¡ã¯ãæ©æ¢°ã®è²¡åžã®ãéãååãè³Œå ¥ããã®ã«å¿ èŠãªé¡ä»¥äžã«ãªã£ãçŽåŸã«çºçããŸãã
GIVE_PRODUCTïŒããã§ã¯ãå€æŽãã«ãŠã³ãããæºåãå¿ èŠãªè£œåã³ãŒãããæœè±¡çãªããã€ã¹ããã©ãŒããŒãã«æž¡ããŸãã 次ã®ç¶æ ãžã®é·ç§»ã¯ããæœè±¡å®è¡è ããã補åæºåã®å¯Ÿå¿ããä¿¡å·ãåä¿¡ããåŸã«çºçããŸãã
GIVE_CHENGEïŒå€æŽãçºè¡ããã¹ã¿ã³ãã€ã¢ãŒããã€ãŸãCHOOSE_PRODUCTã«ç§»è¡ããŸãã
ENTER_MONEYïŒããã§ã¯ãé貚åäœã®éçš®ã®ã³ãŒãã®åœ¢ã§æ©æ¢°ã«ãéãäŸçµŠããŸãã 次ã®ç¶æ ãžã®ç§»è¡ã¯ãæ©æ¢°ã®è²¡åžã®ãéãååãè³Œå ¥ããã®ã«å¿ èŠãªé¡ä»¥äžã«ãªã£ãçŽåŸã«çºçããŸãã
GIVE_PRODUCTïŒããã§ã¯ãå€æŽãã«ãŠã³ãããæºåãå¿ èŠãªè£œåã³ãŒãããæœè±¡çãªããã€ã¹ããã©ãŒããŒãã«æž¡ããŸãã 次ã®ç¶æ ãžã®é·ç§»ã¯ããæœè±¡å®è¡è ããã補åæºåã®å¯Ÿå¿ããä¿¡å·ãåä¿¡ããåŸã«çºçããŸãã
GIVE_CHENGEïŒå€æŽãçºè¡ããã¹ã¿ã³ãã€ã¢ãŒããã€ãŸãCHOOSE_PRODUCTã«ç§»è¡ããŸãã
ãŸãããã®å¥è·¡ã®ããçš®ã®å³ã«æ³šæããããšããå§ãããŸãã
â Verilogã®èª¬æã¯ãã¡ãã«ãããŸã
æ€èšŒèªäœ
ãã®ã»ã¯ã·ã§ã³ã2ã€ã®éšåã«åããããšæããŸãã æåã«ããã¹ããã³ãã®æ§é ã瀺ãããããæ§æããåæ©èœãããã¯ã«ã€ããŠèª¬æããŸãã 2çªç®ã§ã¯ãããããã³ãŒããšæ©èœã®ã«ãã¬ããžãããã³ã¢ãµãŒã·ã§ã³ã«ã€ããŠèª¬æããŸãã
ãã¹ããã³ãæ§é
ãã¹ããã³ãã®æ§é ã瀺ãå³ããå§ããŸãããã
åãããã¯ãåå¥ã«æ€èšããŠãã ããã
DUT ïŒãã¹ã察象èšèšïŒ-ãã®ãããã¯ã¯ããã¹ããããã¯ãããã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠçžäºã«ããåãã§ããããã«ããçãã©ãããŒã®åœ¢åŒã§ã1ã€ã®å°ããªãªããžã§ã³ãæã€ã¹ããŒããã·ã³ããã€ã¹ã®èª¬æã§ãã
äžè¬ã«ã ã€ã³ã¿ãŒãã§ã€ã¹ã¯SystemVerilogèšèªã®ãããªæ§é ã§ãããããã·ã°ãã«ãã°ã«ãŒãåããŠéçºè ã®äœæ¥ãç°¡çŽ åã§ããŸãã ããã«ãããèšèªã®æšæºã§èªãããšãã§ããå€ãã®ã¯ãŒã«ãªããšãè¡ãããšãã§ããŸãããã®èšäºã§ã¯å°ã説æããŸãã
DUTãªãã¡ã¬ã³ã¹
ã¢ãµãŒã·ã§ã³ -ããã§ã¯ãèšèšã®åäœãããã€ã¹ã®ä»æ§ãšã©ã®çšåºŠäžèŽããããä¿¡å·ã¬ãã«ã§ç¢ºèªããŸãã
ããã§ã¯ã assert ã property ã sequenceãªã©ã®æ§æäœã圹ç«ã¡ãŸã ã ã«ããŒã³ã³ã¹ãã©ã¯ãã䜿çšããŠãæ©èœã«ãã¬ããžã®å®çŸ©ã«ã¢ãã«ã®åäœããã¹ãããçµæãå«ããããšãã§ããŸãã
â ã¢ãµãŒã·ã§ã³ãžã®ãªã³ã¯
ç°å¢ -æ¡ä»¶ä»ãã§ãæ€èšŒãå®è£ ããä»ã®ãã¹ãŠã®ãããã¯ãååšããã³ã³ãããã€ãŸããœãããŠã§ã¢æ€èšŒç°å¢ãšåŒã¶ããšãã§ããŸãã
ãããèšè¿°ãããšãã ããã°ã©ã æ§æã䜿çšãããŸãã ãªããããªã®ããçããã®ã¯é£ããã§ããç§ã«ãšã£ãŠãããã¯çºèŠã®è³ªåã§ãã ããããããã¯SystemVerilogã·ãã¥ã¬ãŒã¿ãŒã®ã·ãã¥ã¬ãŒã·ã§ã³ã®é åã«èµ·å ããŸãããããã¯ãŸã åœãŠæšéã§ãã
â ç°å¢ãžã®ãªã³ã¯
ç°å¢å ã«ã¯ãèšèšã®ããã®åºæ¿ãçæããããŸããŸãªæ€èšŒã·ããªãªãå®è£ ããåºåã§åä¿¡ããããŒã¿ã®æ£ç¢ºæ§ãæ€èšŒããã³ãŒããšæ©èœã«ãã¬ããžãè©äŸ¡ããä»ã®å€ãã®ãšã³ãã£ãã£ããããŸãã ããã§ã¯ããããã«ç§»ããŸãããïŒ
ã·ãŒã±ã³ãµãŒ -æ€èšŒãè¡ãããã·ããªãªãèšè¿°ãããããã¯ã ãããã®èšè¿°ã¯éåžžã«é«ã¬ãã«ã§ããã TransactorãæäŸããã¡ãœããã«äŸåããŠããŸãã ããã§æ³šç®ãã¹ãããšã¯ããã®ãããã¯ã®äž»åã¯éåžžrandsequenceã³ã³ã¹ãã©ã¯ãã§ããããšã§ãã ãã®äž»ãªã¿ã¹ã¯ã¯ã Transactorã¡ãœããã®äžé£ã®åŒã³åºãã®åœ¢åŒã§ã¹ã¯ãªãããæŽçãã䟿å©ãªæ¹æ³ãæäŸããããšã§ãã randsequenceã®äœ¿çšæ¹æ³ã説æãããªã³ã¯ã 次ã«ç€ºããŸãã
â ããããç§ã«èµ·ãã£ãããšïŒã·ãŒã¯ãšã³ãµãŒïŒ
Transactorã¯ãå®éã«ã¹ã¯ãªããã®åºç€ãšããŠæ©èœããã¡ãœãããå®è£ ãããããã¯ã§ãã ãã®æ®µéã§ãæ å ±ã®çæãè¡ããããããèšèšãžã®å ¥åãšããŠéä¿¡ãããŸãã ãããŠãSystemVerilogã®ãã¯ãŒãã·ãŒã³ã«å ¥ããŸãã
SystemVerilogã§ã¯ãã¯ã©ã¹ãã£ãŒã«ãå€ãã©ã³ãã ã«çæã§ããŸãã ããã¯ãæ€èšŒãå€§å¹ ã«é«éåã§ãããããéåžžã«äŸ¿å©ã§ãã å®éã«ã¯ããã£ãŒã«ããã©ã³ãã ã«çæããã«ã¯ã ããŒã¯ãŒã randãŸãã¯randcã䜿çšããå¿ èŠããããŸãã
ããããããã ãã§ã¯ãããŸããã intå€æ°ãäœæããããå³å¯ãªç¯å²ã§å®çŸ©ããããã«å¿ èŠãªå€ãå¿ èŠã§ãããšä»®å®ããŸãïŒããšãã°ãç¹å®ã®ã¢ãã¬ã¹ã®ã¿ããã¹ã«è¡šç€ºãããŸãïŒã SystemVerilogã«ã¯ããã®ç¹ã§ããªãã«èŽãç©ããããŸãïŒã©ã³ãã å€æ°ãæã€ããããã£ã«å¶éã課ãããšãå¯èœã«ããå¶çŽæ§é ã ãããžã§ã¯ãã®äŸïŒ
rand logic [ 3:0] product_code; constraint c_product_code { product_code inside { [ 1 : 8 ] }; }
ããã§ã c_product_codeã䜿çšããŠéé[1; 8]ã«å¶éããå€æ°product_codeãäœæããŸããã
ããããäžã€ã ããããŸããã ã¯ã©ã¹ãã€ã³ã¹ã¿ã³ã¹åããããšãå€æ°randããã³randcã¯ã©ã³ãã ãªå€ã§åæåãããŸããã ããã¯ãçµã¿èŸŒã¿ã€ã³ã¹ã¿ã³ã¹ã¡ãœããrandomizeïŒïŒãåŒã³åºããããšãã«çºçããŸãã
Transactorã«æ»ãã randãã£ãŒã«ãã randomizeïŒïŒã¡ãœãããããã³ãã®æ¡åŒµæ©èœrandomizeïŒïŒã®äœ¿çšã¯ã Transactor ã§èªç¶ã«çºçããŸãã randomizeïŒïŒãšã¯ç°ãªãã randomizeïŒïŒã䜿çšãããšã randãã£ãŒã«ããåŒã³åºããããšãã«è¿œå ã®å¶éã課ãããšãã§ããŸãã ãã®è©³çŽ°ã«ã€ããŠã¯ãSystemVerilogèšèªæšæºãåç §ããŠãã ãã ã
â ãããŠãã¡ããTransactor
ããã§æ¬åœã«åãã®ã¯ãã©ã€ããŒã ãã§ãã 圌ã®ä»äºã¯ã Transactorããåãåã£ãæ å ±ãå ¥åèšèšä¿¡å·ã«å€æããããšã§ãã 圌ãšäžç·ã«ããã¹ãŠãã·ã³ãã«ã§æ確ã§ãã ãããã£ãŠã ã€ã³ã¿ãŒãã§ãŒã¹ã®èšèšã«ã€ããŠå°ãã話ããŸã ã
ãããã¯ãéåžžã®ããã°ã©ãã³ã°èšèªã§èŠãããæ§é ã§ã¯ãããŸããã ããã§ã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ããŠãŒã¶ãŒã«ãšã£ãŠäŸ¿å©ãªæ¹æ³ã§ãæ¹åã«é¢ä¿ãªãä¿¡å·ãã°ã«ãŒãåã§ããèšèšã§ãã ãã®ãããžã§ã¯ãã«ã¯ãdut_interfaceãvm_in_interfaceãvm_out_interfaceã®3ã€ã®ã€ã³ã¿ãŒãã§ãŒã¹æ§é ãããããŸããã 1ã€ç®ã¯åæããã³ãªã»ããä¿¡å·ã2ã€ç®ã¯vending_machineå ¥åã3ã€ç®ã¯ãã®åºåã§ãã ã ããããã¹ãŠãèŠããŸãã
â ãããŠãã¡ãã-ãã©ã€ããŒ
INã¢ãã¿ãŒãšOUTã¢ãã¿ãŒ -ãããã®ãããã¯ã¯ãæ£ç¢ºæ§ãããã«æ€èšŒããããã«ã DUTã«åºå ¥ãããæ å ±ãèªã¿åããŸãã çãæ å ±ãDUTã«å±ãã®ã¯ãªãã§ããïŒ ãã©ã€ããŒããããããã³äžèšã®ãã¹ãŠã®ã¹ã¿ã³ãã£ã³ã°ãããã¯ã®ãšã©ãŒãé¿ããããã«ããã¹ãŠãç°¡åã§ãã
â INããã³OUTã¢ãã¿ãŒ
ãã§ãã«ãŒ-IN ã¢ãã¿ãŒããåä¿¡ããããŒã¿ãšOUTã¢ãã¿ãŒããåä¿¡ããããŒã¿ã«åºã¥ããŠèšç®ãããåç §ããŒã¿ã®é©åæ§ããã§ãã¯ãããããã¯ã
ã¹ã³ã¢ããŒã/æ©èœã«ãã¬ããžã¯æåŸã®ãããã¯ã§ãããç°ãªãæ©èœãå®è¡ãã2ã€ã®å¥åã®ãããã¯ã®ãã€ããªããã§ãã ã¹ã³ã¢ããŒãèªäœã¯ãã·ãã¥ã¬ãŒã·ã§ã³ã®æåŸã«åç §ããŒã¿ãçæããã¬ããŒããçæããå¿ èŠããããŸããããã®ãããžã§ã¯ãã¯å°ãããããããŸã䟿å©ã§ã¯ãããŸããã æ©èœã«ãã¬ããžèªäœã¯ãããã€ã¹ä»æ§ã«çµã¿èŸŒãŸããŠãããã¹ãŠã®å¯èœãªæ©èœã®ã«ãã¬ããžãã§ãã¯ãè¡ããŸãã
ãããŠãããã§ã¯ããžã¥ãŒã¹èªäœã æ©èœçãªã«ãã¬ããžã®å®è¡æ¹æ³ã«ã€ããŠèª¬æããŸãã ãã®ãããSystemVerilogã«ã¯ç¹å¥ãªã«ããŒã°ã«ãŒãèšèšããããŸãã åã«ããŒã°ã«ãŒãã§ã¯ãããããã«ããŒãã€ã³ããå®çŸ©ããŸãããã®ã«ããŒãã€ã³ãã§ã¯ãç¹å®ã®ä¿¡å·ãŸãã¯ãã¹ãžã®ãã€ã³ããè¡ãããããŒã¿ã®ãã¹ãŠã®å¯èœãªããªãšãŒã·ã§ã³ãèšèšã«ãã£ãŠåä¿¡ããããã©ããããã¹ãŠã®å¯èœãªããŒã¿ãåºåã«è¡šç€ºããããã©ããããã§ãã¯ãããŸãã
äžè¬ã«ã æ©èœã«ãã¬ããžã®çµæãžã®ã¢ã¯ã»ã¹ã¯å®è¡æã«çºçãããããåŸã§ãã€ã§ãè©äŸ¡ã§ããç¹å¥ãªæ©èœããããŸãã
ãããã®1ã€ã¯ãçµã¿èŸŒã¿é¢æ°$ get_coverageã§ããããã¯ããã¹ãŠã®ã«ããŒæ§é ïŒ cover ã covergroup ã coverpoint ïŒã«åºã¥ããŠèšç®ããã0ã100ã®å€ãè¿ããŸãã
ã©ã³ã¿ã€ã ãžã®ã¢ã¯ã»ã¹ã«å ããŠãã°ã©ãã£ã«ã«ã·ãã¥ã¬ãŒã·ã§ã³ç°å¢ã§æ©èœã«ãã¬ããžã®ã¢ã€ãã¢ãååŸããããšãã§ããŸãïŒModelSimãéåžžã«æ£ç¢ºã«ä¿èšŒã§ããŸãïŒã
ã³ãŒãã«ãã¬ããžã«é²ã¿ãŸãããã ãã®ã€ã³ãžã±ãŒã¿ã¯ãç§ãã¡ãæžããã³ãŒããã©ãã ã䜿çšããããããããŠãã¹ããã©ãã ãå®äºããŠããããç解ãããŠãããŸãã äœããã®çç±ã§ã³ãŒãã«ãã¬ããžã蚱容ã¬ãã«ã«éããŠããªãå Žåã2ã€ã®ãªãã·ã§ã³ããããŸããããè¯ããã¹ããäœæããããã³ãŒããéå°ã§ãã ãããã«ãããããã¯ä¿®æ£ããå¿ èŠããããŸãã 確ãã«ããã¹ããè¯å¥œã§èšèšã³ãŒããè¯å¥œãªå Žåãããããšãå¥ã«èšåãã䟡å€ããããŸãããããã§ãã³ãŒãã«ãã¬ããžãç§ãã¡ã«åããªãå Žåã¯ãã¹ãã£ã³ããäœããé€å€ããå¿ èŠããããŸãã
éåžžã ã³ãŒãã«ãã¬ããžããã§ãã¯ããŸã ã
- ã¹ããŒãã¡ã³ã -ã·ãã¥ã¬ãŒã·ã§ã³äžã«å®è¡ãããè¡ãšå®è¡ãããªãã£ãè¡
- ãã©ã³ã -ãã®ä»ã®å Žåãã±ãŒã¹ã®æ§é ããã§ãã¯ããŸã
- æ¡ä»¶ -çµæãTrueãŸãã¯Falseã§ãªããã°ãªããªãè«çæ¡ä»¶ããã§ãã¯ããŸã
- ãã°ã« -0ãã1ãžã®è«ççãªé·ç§»ããã§ãã¯ããŸãã
ããããããã³ãã®ä»ã®ãã§ãã¯ïŒã¹ããŒããã·ã³ã®ãã§ãã¯ããã³ããããFECæ¡ä»¶ ïŒ ã¯ããããžã§ã¯ãã®ã³ãŒãã«ãã¬ããžã®ã¢ã€ãã¢ãæäŸããŸã ã
ã³ãŒãã«ãã¬ããžã¢ã»ã¹ã¡ã³ããæå¹ã«ããã«ã¯ã ã³ãŒãã«ãã¬ããžã¢ã»ã¹ã¡ã³ããå®è¡ããããã¡ã€ã«ã«é©åãªã³ã³ãã€ã©èšå®ãèšå®ããå¿ èŠããããŸãã
â ãŸãããã¡ãããç§ã¯ã»ãšãã©å¿ããŠããŸããïŒã¹ã³ã¢ããŒã/æ©èœã«ãã¬ããžïŒ
â ããŠããããžã§ã¯ãå šäœãžã®ãªã³ã¯
ããã ãã§ãã ãæž èŽããããšãããããŸããã ãã®èšäºãäœãã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ãŸãäŒããŸã§ã