
é¢çœãïŒ è¡ãã...
TCLãšã¯äœã§ããïŒ
TCLïŒTool Command LanguageïŒã¯ãããŸããŸãªã¿ã¹ã¯ãå®è¡ããããã®é«ã¬ãã«ã®ã¹ã¯ãªããèšèªã§ãã å€ãã®å ŽåãTCLã¯Tkã°ã©ãã£ã«ã«ã·ã§ã«ïŒããŒã«ãããïŒãšçµã¿åãããŠäœ¿çšââãããŸããããã®èšäºã§ã¯ãã®åŽé¢ã¯èæ ®ãããŸããã ãã®èšèªã¯ãããã»ã¹èªååã®ããŸããŸãªã¿ã¹ã¯ã§åºã䜿çšãããŠããŸãã
- è€éãªã¢ãžã¥ãŒã«ãããŒããã³ãŒãããŒãã®ãã¹ãã
- ã¹ããŒããããã¿ã€ãã³ã°
- ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ã®ã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ã®äœæã
- ã¢ããªã±ãŒã·ã§ã³ã¢ããªã±ãŒã·ã§ã³ããã³ã¿ã¹ã¯ã§ã®å®è£ ã
äœããã®æ¹æ³ã§ãTCLã®äž»ãªæ©èœã¯ã«ãŒãã³ã¿ã¹ã¯ã®èªå åãšãéçºã«è²»ããããæéã®å€§å¹ ãªåæžã§ãã TCLããã°ã©ã ã¯ã ã³ã³ãã€ã«ãšã³ã³ãã€ã«ãå¿ èŠãšããŸãããããã«ãããã¹ã¯ãªããããããã°ããã¿ã¹ã¯ãç°¡åãã€ç°¡åã«ãªããŸãã TCLã€ã³ã¿ãŒããªã¿ãŒã¯ç¡æã©ã€ã»ã³ã¹ã§é åžãããã»ãŒãã¹ãŠã®ãã©ãããã©ãŒã ã§äœ¿çšã§ããŸãïŒå€ãã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ã¯ãããã©ã«ãã§äœ¿çšå¯èœã§ãïŒã ããã¯ããã©ã€ããŒãããã°ã©ã ããããã©ã€ãšã¿ãªã¢ããªã±ãŒã·ã§ã³ã®éçºã«å¶éãªã䜿çšã§ããããšãæå³ããŸãã å·çæç¹ã§ã¯ãTCLã®çŸåšã®ããŒãžã§ã³ã¯8.6ã§ãã MyTclãTclKitãActiveTclãªã©ã TCLã¹ã¯ãªããã®æäœããããã°ãèŠèŠåã«å€ãã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ãå©çšã§ããŸãã 1 ActiveTclã©ã€ã»ã³ã¹ã®äŸ¡æ Œã¯çŽ1,500ãã«ã§ãåçšã¢ããªã±ãŒã·ã§ã³ã®éçºã«ã¯äžåœã§ãã å人çãªæ £ç¿ãããã»ãšãã©ã®éçºè ã¯äœ¿ãæ £ããã³ãã³ãã©ã€ã³ã䜿çšããŠããŸãã
ãã¹ãŠã®TCLããã°ã©ã ã¯ã ã;ãã§åºåãããã³ãã³ãã§æ§æãããŠããŸã ãŸãã¯æ¹è¡æåã ä»ã®å€ãã®ããã°ã©ãã³ã°èšèªãšåæ§ã«ãæåã®åèªã¯ã³ãã³ãã§ãããæ®ãã®åèªã¯ã³ãã³ãã®åŒæ°ã§ãã
ã³ãã³ãarg1 argt2 ... argN
äŸïŒ
set NewValue âHello World!â puts $NewValue
æåã®ã³ãã³ãã¯NewValueå€æ°ãäœæãã2çªç®ã®ã³ãã³ãã¯å€æ°ã®å€ãã³ã³ãœãŒã«ã«åºåããŸãã ã¹ããŒã¹ä»ãã®å€æ°ã䜿çšããã«ã¯ãåŒçšç¬Šã䜿çšããŸãã ãã®ä»ã®å Žåããããã¯å¿ èŠãããŸããã ã³ãã³ãã®å®è¡çµæã¯ã次ã®å³ã«ç€ºãããŠããŸãã

ç§ã®æèŠã§ã¯ãTCLã®äž»ãªå©äŸ¿æ§ã¯ãã³ãã³ãã«å¯ŸããåŒæ°ãå¥ã®ã³ãã³ãã«çœ®ãæããããšãã§ããããšã§ãã ãããè¡ãã«ã¯ãè§æ¬åŒ§å ã«é 眮ããå¿ èŠããããŸãã 以äžã®äŸã§ã¯ããã®æ©èœã瀺ããŸãã ãšããããTCLã¯ããŸããŸãªã€ãã³ãã«åºã¥ããŠããã°ã©ã ã®åäœãå¶åŸ¡ã§ããŸãã ã€ãŸããã³ãã³ããã³ãã©ãŒã¯ãã¹ã¯ãªããã«èšé²ãããæ¡ä»¶ã ãã§ãªããããŸããŸãªå€éšã€ãã³ãïŒå€éšãã¡ã€ã«å ã®å€æ°ã®å€ã®å€æŽããã£ãã«å ã®ããŒã¿ã®ãã£ããã£ãã¢ããªã±ãŒã·ã§ã³ã®çµäºãç¹å®ã®å€ã®ã¿ã€ããŒã«ãŠã³ã¿ãŒãžã®å°éãããã³ãªã©ïŒã TCLèšèªã«ã¯äžé£ã®ã³ãã³ããè±å¯ã§ãããŒã¿é åãæ£èŠè¡šçŸãæäœããéåžžã«äŸ¿å©ãªæ段ãå«ãŸããŠããŸãã TCLã§ã¯ãé¢æ°ãšããã·ãŒãžã£ãäœæããæ©èœãå®è£ ãããŠãããæ¡ä»¶ããšã®ã«ãŒããšåŒã®èª¬æãå©çšã§ãããããã³ãŒãã®äœæãéåžžã«å®¹æã«ãªããŸãã
ãªãTCLãå¿ èŠãªã®ã§ããïŒ
ã»ãšãã©ãã¹ãŠã®FPGA / ASICéçºè ã¯ãé ããæ©ãããããžã§ã¯ãã§TCLã«ééããŸãã ææ°ã®FPGAéçºã§ã¯ãTCLã¹ã¯ãªãããèªååããã³ããã»ã¹çµ±åã¿ã¹ã¯ã«ç©æ¥µçã«äœ¿çšãããŠããŸãã TCLã¯ã ã¢ã«ãã©ã® Quartus ã ã¶ã€ãªã³ã¯ã¹ã® ISE Design Suite ã Vivadoã®ãã¹ãŠã®äž»èŠãªCAD FPGAã«å«ãŸããŠããŸãã TCLãå®è¡ã§ããã®ã¯ãªãã§ããïŒ
- ãããžã§ã¯ãã®äœæïŒãœãŒã¹ãã¡ã€ã«ã®è¿œå ããªãã·ã§ã³ã®èšå®ãèšèšéå±€ããããã¬ãã«ãã¡ã€ã«ã®å²ãåœãŠãªã©ïŒã
- åæãšãã¬ãŒã¹ïŒç°ãªãèšå®ã§ç¬ç«ããã¹ããŒãžãäœæãããŸã§ïŒã
- å®æããããŒããåã ã®ã¢ãžã¥ãŒã«ããããžã§ã¯ãå šäœã®ãã¹ãã
- ãã³ãã¬ãŒãã«åºã¥ãå¶éãã¡ã€ã«ïŒUCF / XCIïŒã®èªåçæã
- åæããã³ãã¬ãŒã¹ããããããžã§ã¯ãã®æéå¶çŽã確èªããŸãã
- FPGAåè·¯ãã³ã³ããŒãã³ããããã³ããªããã£ãã®ãã©ã¡ãŒã¿ãŒã®èšå®ãIPã³ã¢ã®ãªãã·ã§ã³ã®èšå®ã
ãªã©
ãããã®ãã¹ãŠã®æ®µéã¯ãVHDL / Verilogèšèªã§ã®ããŒãåäœã®ã¢ãã«ã®äœæãããåæããã³ãã¬ãŒã¹æ®µéã§ã®CADã§ã®å®æãããããžã§ã¯ãã®ãããã°ãŸã§ãFPGAã§ã®éçºããã»ã¹ã®åºæ¬çãªæäœã§ãã éåžžãè€éãªãããžã§ã¯ãã«ã¯ãããŸããŸãªéçºè ãäœæããå€æ°ã®ã¢ãžã¥ãŒã«ãããã€ãã®IPã³ã¢ãå¶éãã¡ã€ã«ãã©ã€ãã©ãªãããã³æ©èœããã±ãŒãžãå«ãŸããŸãã ãã®çµæãå®æãããããžã§ã¯ãã«ã¯ãç¹å®ã®éå±€æ§é ãšãç¹å®ã®ã¢ãžã¥ãŒã«ãå¿ èŠãªãããžã§ã¯ãããŒãã«æ¥ç¶ããããã®äžé£ã®ã«ãŒã«ããããŸãã éçºè ã«ãšã£ãŠããããã°ã¢ãžã¥ãŒã«ãã©ãã§ã©ã®ããã«é 眮ãããã¹ãããäœæ¥ã§äœ¿çšããå Žåã«å®è¡ããæ©èœã«é¢ããç¥èãèŠããŠããã®ã¯å°é£ã§ãããéçºæ®µéã§ã¯äœæ¥ã®ç¥èã¯å¿ èŠãããŸããïŒããããã ãã©ãã¯ããã¯ã¹ ãã¢ãžã¥ãŒã«ïŒã TCLã¹ã¯ãªããã¯ããããžã§ã¯ãæ§é ã管çããäºåã«æºåããããã³ãã¬ãŒãã«åŸã£ãŠå¿ èŠãªããŒãããªã³ã¯ããŸãã ããã«ãããéçºã®æè»æ§ãæäŸããããããããžã§ã¯ãããå¥ã®ãããžã§ã¯ãã«ç§»è¡ãããšãã«ãå®å šãªããŒãã®åçŸæ§ãå¯èœã«ãªããŸãã
ååãšããŠãFPGAçšã®æ°ããããŒããäœæãã段éãšåæã«ããããã®ããŒãããããžã§ã¯ããšã¯å¥ã«ãå®æããã·ã¹ãã ãšäžç·ã«ãããã°ãã段éãé²ã¿ãŸãã äžæ¬¡ã·ãã¥ã¬ãŒã·ã§ã³ã¯ãå°çšã®CADã·ã¹ãã ãšã·ãã¥ã¬ãŒã·ã§ã³ç°å¢ã®ã³ã³ãã¥ãŒã¿ãŒäžã®FPGAããæœè±¡åãããŠå®è¡ãããŸãããããã¯ModelsimãISimãAldec Active-HDLãªã©ã§ãã ãããžã§ã¯ãããããã°ããã¿ã¹ã¯ãå®è£ ããããã«ãTCLã¹ã¯ãªããã圹ç«ã¡ãŸããããã«ãããã¢ããªã³ã°äžã«çºçããã€ãã³ããåŠçããã¢ãã«ã®çµæã«åºã¥ããŠæ±ºå®ãäžãããšãã§ããŸãã çŽç²ã«HDLèšèªã§RTLããŒãããããã°ããå Žåãåè·¯ã®åäœãå€æŽãããšã¢ãã«ãšãã¹ãã¹ã€ãŒããå€æŽããå¿ èŠããããããã¢ãã«ã®äœæãå°é£ã«ãªãå ŽåããããŸãã HDLèšèªãšTCLã¹ã¯ãªããã§å€æ°ã®ã¢ãã«ã䜿çšããããšã¯éåžžã«äŸ¿å©ã§ãããå€ãã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ããããã°ããã»ã¹ãé«éåããè€éãªãã¹ããçµ±åã§ããŸãã
ã³ãŒãã®èšè¿°ãšãããã°ã®æ®µéã®åŸã«ãFPGAãããã§ãããžã§ã¯ããåæãé 眮ããã¬ãŒã¹ããéåžžã®æé ãç¶ããŸãã ããããããã¯æãå°é£ãªã¹ãããã®1ã€ã§ãããã¯ãŒã¯ã¹ããŒã·ã§ã³ã®å€§ããªã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ãšå®äºãŸã§ã«é·ãå®è¡æéãå¿ èŠã§ãã TCLã¹ã¯ãªããã䜿çšãããšãå段éã§å®è¡ã€ãã³ãã管çããç¹å®ã®èšç®çµæãåæããŠããããžã§ã¯ãã®æé©ãªé ç·ãšãã¬ãŒã¹ç¹æ§ïŒäœ¿çšããããªãœãŒã¹ã®éãæ倧ã¯ããã¯åšæ³¢æ°ãã¿ã€ãã³ã°ã®èš±å®¹ã¬ã€ãã³ã·å€ãªã©ïŒãéæã§ããŸãã ããã«ãTCLã䜿çšãããšãFPGAãã¡ãŒã ãŠã§ã¢ãã¡ã€ã«ãäœæãããšãã«ãèšå®ã®éžæãšå€æŽãæ€èšŒã¹ããŒãžã®åèµ·åãç¹å®ã®ã¹ããŒãžã®åèµ·åã®ããã®ã«ãŒãã³ã¢ã¯ã·ã§ã³ãé€å€ã§ããŸãã ãã®ãããªèšèšã®èªååã«ããããããã®æ®µéã§äººãåžžã«ååšããããšãå®å šã«ãªããªããŸãã
ãããã®è¡ãèªãã åŸãTCLããããžã§ã¯ãã§çµ¶å¯Ÿã«äœ¿çšããå¿ èŠããã䟿å©ã§åŒ·åãªãã®ã§ããããšãæ¢ã«ç¢ºä¿¡ããŠããããšãé¡ã£ãŠããŸãã 以äžã§ã¯ãVivadoç°å¢ã§ãããžã§ã¯ããäœæããããã«ããŒã ã䜿çšãã䟿å©ãªã¹ã¯ãªããã®1ã€ãåæããæ¢ã«æžã蟌ãŸãããœãŒã¹ãã¡ã€ã«ãããããçš®é¡ã®IPã«ãŒãã«ãXCIå¶éãã¡ã€ã«ãªã©ãè¿œå ããŸãã
FPGAãTCLïŒ
FPGAã§ãããžã§ã¯ããèªåçã«äœæããããã®æãåçŽãªTCLã¹ã¯ãªããã®1ã€ãæ€èšããŠãã ããã 次ã®å³ã«ç€ºãããã«ãæºåæé ã¯ãããããã§ããããŒã«ã«ãã·ã³ã«ã¯ããããžã§ã¯ãã®ãœãŒã¹ã³ãŒããå«ããã£ã¬ã¯ããªãå¿ èŠã§ãã

䟿å®äžãFPGAãã¡ããªã§èš±å¯ãããŠããå ŽåïŒ ã·ãªãŒãº7ïŒArtixãKintexãVirtex ïŒã ã¶ã€ãªã³ã¯ã¹ISE Design Suiteããã³Vivadoã§äœæããããããžã§ã¯ãã«ç¬ç«ããã«ã¿ãã°ã䜿çšããŸãã ãœãŒã¹ãã¡ã€ã«ã¯/ srcãã£ã¬ã¯ããªã«ããã vivadoãããžã§ã¯ãã¯åãååã®ãã£ã¬ã¯ããªã«ãããISEç°å¢ã®ãããžã§ã¯ãã¯/ iseãã£ã¬ã¯ããªã«äœæãããŸãããåæããã³é ç·ã®çµæã¯/ implementãã£ã¬ã¯ããªã«ä¿åãããŸãã ããã¯ãã¹ãŠããããžã§ã¯ãå šäœã®ç®¡çã®äŸ¿å®ãšãç°ãªãç°å¢ã§ã®ç¬ç«ãã管çã®ããã«è¡ãããŸãã ãŸããéå±€ãããèŠèŠçã«ãªãããœãŒã¹å ã®å€§éã®ãžã£ã³ã¯ãã¡ã€ã«ããããªããæããŸãã æäžäœãã¡ã€ã«ãšå¿ èŠãªå¶éãã¡ã€ã«ããããœãŒã¹ãã£ã¬ã¯ããªã®/ topãã£ã¬ã¯ããªã«åå¥ã«æ³šæããå¿ èŠããããŸãïŒISEã®å Žåã¯* .ucfãã¡ã€ã«ãVivadoã®å Žåã¯* .xdcãã¡ã€ã«ïŒã
ãããžã§ã¯ãã«ã¯ãISEã§äœæãããå€ãIPã³ã¢ãšVivadoã§äœæãããæ°ããIPã³ã¢ãæ··åšããŠããŸã ã core_k7ãã£ã¬ã¯ããªã«ã¯ãISEçšã®CoreGeneratorã§äœæããããã¹ãŠã®ã«ãŒãã«ãå«ãŸããŠããŸãã ãããã¯ãVivadoãããžã§ã¯ãã§äœ¿çšããå ŽåãåçæãŸãã¯æŽæ°ãããŸããïŒ* .vhdãã¡ã€ã«ã¯ã¢ããªã³ã°ã«äœ¿çšããã* .ngcãã¡ã€ã«ã¯åæã«äœ¿çšããã* .xcoãã¡ã€ã«ã¯Vivadoãããžã§ã¯ãã«è¿œå ãããŸããïŒã / ipcoresãã£ã¬ã¯ããªã«ã¯ãVivadoç°å¢ã§çŽæ¥äœæããã* .xci圢åŒã®æ°ããã«ãŒãã«ãå«ãŸããŠããŸãã åã³ã¢ã«ã¯åå¥ã®ãµããã£ã¬ã¯ããªãå¿ èŠã§ããããã§ãªãå Žåããããžã§ã¯ãã®IPã³ã¢ã«ã¯ã LOCKED ãå±æ§ãèšå®ããããããã«ãŒãã«ãæŽæ°ããŠåæçšã«åçæããããšã¯ã§ããŸããã
TCLã¹ã¯ãªããã®èª¬æã«ç§»ããŸãããã
# Stage 1: Specify project settings set TclPath [file dirname [file normalize [info script]]] set NewLoc [string range $TclPath 0 [string last / $TclPath]-5] set PartDev "xc7k325tffg900-2" set PrjDir [string range $TclPath 0 [string last / $NewLoc]] set TopName [string range $NewLoc [string last / $NewLoc]+1 end]
æåã®è¡ã¯ãããŒã«ã«ãã·ã³ïŒ src / tclãã£ã¬ã¯ããªã«ããïŒã§TCLã¹ã¯ãªããã®å Žæãæ¢ãããã¡ã€ã«ãžã®ãã«ãã¹ãæã€æååå€æ°ãäœæããŸãã
2è¡ç®ã¯ããã¹ã®äžéšãåãåãããè¿œå ã®å€æ°ãäœæããŸãã 次ã®å€æ°ããããžã§ã¯ããžã®ãã¹ãšæäžäœãã¡ã€ã«ã®ååãæåã§æå®ããªãããã«ãäž¡æ¹ã®å€æ°ãå¿ èŠã§ãã
å€æ°PartDevã«ã¯ãFPGAãããã®ååãå«ãŸããŠããŸãã ãããŠãããã¯ãããžã§ã¯ãã§å€æŽãããå¯äžã®å€æ°ã§ãïŒ ã¹ã¯ãªããã®ä»ã®ãã¹ãŠã®è¡ã¯ãã©ã®ãããžã§ã¯ãã§ãå€æŽãããŸããã
# Stage 2: Auto-complete part for path set PrjName $TopName.xpr set SrcDir $PrjDir/$TopName/src set VivNm "vivado" set VivDir $PrjDir/$TopName/$VivNm cd $PrjDir/$TopName pwd if {[file exists $VivNm] == 1} { file delete -force $VivNm } file mkdir $VivNm cd $VivDir
次ã®æ®µéã§ããœãŒã¹ãã¡ã€ã«ã®å Žæã決å®ããè¿œå ã®å€æ°ãäœæãããŸããããã§ãªãå Žåã¯ãvivadoãã£ã¬ã¯ããªãäœæããŸãã ããŒã«ã«ãã·ã³äžã®vivadoãã£ã¬ã¯ããªã®ååšã確èªããŠããããšã«æ³šæããŠãã ããã ãã£ã¬ã¯ããªãååšããå Žåã¯ãæ°ãããããžã§ã¯ãã§ç«¶åãçºçããªãããã«ããã£ã¬ã¯ããªãåé€ãããŠåäœæãããŸãã
cdã³ãã³ãã¯äœæ¥ãã£ã¬ã¯ããªãå€æŽããpwdã³ãã³ãã¯äœæ¥ãã£ã¬ã¯ããªã®å Žæã衚瀺ããŸãã
# Stage 3: Find sources: *.vhd, *.ngc *.xci *.xco *.xdc etc. # This stage used instead of: add_files -scan_for_includes $SrcDir set SrcVHD [findFiles $SrcDir "*.vhd"] set SrcVer [findFiles $SrcDir "*.v"] set SrcNGC [findFiles $SrcDir "*.ngc"] set SrcXCI [findFiles $SrcDir "*.xci"] set SrcXDC [findFiles $SrcDir "*.xdc"] set SrcPCI [findFiles $SrcDir "cl_pcie*"] set NewLoc [string range $SrcPCI 0 [string last / $SrcPCI]-6]
ããã§ã¯ãã¹ãŠãåå§çã§æ確ã§ã-/ srcãã£ã¬ã¯ããªå ã®ãã¹ãŠã®ãœãŒã¹ãã¡ã€ã«ã®ååãå®çŸ©ããå€æ°ãäœæãããŸãã ãã¡ã€ã«ãèŠã€ããã«ã¯ãfindFilesããã·ãŒãžã£ã䜿çšããŸããããã¯åŸã§æ»ããŸãã
PCI-EããŒãã®ã³ã³ããŒãã³ããåå¥ã«æ€çŽ¢ããŸããããã¯ããã¹ãŠã®ãããžã§ã¯ãã®åºæ¬çãã€äžå¯æ¬ ãªéšåã§ãã
# Stage 4: Find all subdirs for IP cores (VHD, XCO, NGC, EDN) set PrjAll {} lappend PrjAll $DirIps $DirAdm $SrcDir/core_v2_ise $SrcDir/core_v4_ise $SrcDir/core_v5_ise $SrcDir/core_v6_ise $SrcDir/core_k7 $SrcDir/TestBench set SrcSim {} for {set i 0} {$i < [llength $PrjAll]} {incr i} { set SrcXXX [findFiles [lindex $PrjAll $i] "*.vhd"] put $SrcXXX foreach SrcAdd $SrcXXX { lappend SrcSim $SrcAdd } }
次ã®æ®µéã§ããããžã§ã¯ãå ã®ãã¹ãŠã®IPã³ã¢ãæ€çŽ¢ãããŸãã ããã«ãã¢ããªã³ã°ã«äœ¿çšããããã¡ã€ã«ã®ååã¯ãSrcSimå€æ°ã«æžã蟌ãŸããŸãã ã«ãŒãå ã®lappendã³ãã³ãã¯ãä»ã®å€ãå€æ°ã«è¿œå ããTCLã§ã¯ã·ãŒããšåŒã°ããé åã圢æããŸãã ããã§ãã¹ã¯ãªããã®æºåéšåãçµäºãããããžã§ã¯ãã®äœæãéå§ãããŸãã
# Stage 5: Create project and add source files create_project -force $TopName $VivDir -part $PartDev set_property target_language VHDL [current_project] add_files -norecurse $SrcNGC add_files -norecurse $SrcXCI export_ip_user_files -of_objects [get_files $SrcXCI] -force -quiet add_files $SrcVHD add_files -fileset constrs_1 -norecurse $SrcXDC
ãããžã§ã¯ããäœæããæäžäœãã¡ã€ã«ãå®çŸ©ããFPGAãããã®ã¿ã€ãïŒãã®äŸã§ã¯Kintex-7 K325TïŒãèšå®ããèŠã€ãã£ããœãŒã¹ãã¡ã€ã«ãè¿œå ããŸãã
# Stage 6: Set properties and update compile order set_property top $TopName [current_fileset] for {set i 0} {$i < [llength $SrcSim]} {incr i} { set_property used_in_synthesis false [get_files [lindex $SrcSim $i]] } set NgcGlb [findFiles $DirIps "*.ngc"] for {set i 0} {$i < [llength $NgcGlb]} {incr i} { set_property IS_GLOBAL_INCLUDE 1 [get_files [lindex $NgcGlb $i]] } set_property IS_GLOBAL_INCLUDE 1 [get_files $SrcPCI]
ã·ãã¥ã¬ãŒã·ã§ã³ãã¡ã€ã«ã®ãªãã·ã§ã³ãèšå®ãïŒåæããé€å€ïŒãPCI-EããŒãã§äœ¿çšãããã³ã¢ã®GLOBAL_INCLUDEãã©ã¡ãŒã¿ãŒãèšå®ããŸãïŒããã¯ãããžã§ã¯ãã«å¿ èŠãªç¹å®ã®æ©èœã§ãïŒã
# Stage 7: Upgrade IP Cores (if needed) report_ip_status -name ip_status set IpCores [get_ips] for {set i 0} {$i < [llength $IpCores]} {incr i} { set IpSingle [lindex $IpCores $i] set locked [get_property IS_LOCKED $IpSingle] set upgrade [get_property UPGRADE_VERSIONS $IpSingle] if {$upgrade != "" && $locked} { upgrade_ip $IpSingle } } report_ip_status -name ip_status
ãã®æ®µéã§ããããžã§ã¯ãã®IPã³ã¢ãXCI圢åŒã§æ€çŽ¢ãããã«ãŒãã«ããŒãžã§ã³ã®æŽæ°ã®å¿ èŠæ§ãšããã¯ããããã©ã¡ãŒã¿ãŒããã§ãã¯ãããŸããããã¯FPGAãããã®å€æŽã®åœ±é¿ãåããŸãã ã«ãŒãã«ã®åæåŸãæŽæ°ãè¡ãããæ£åžžã«å®äºããæäœã«é¢ããã¬ããŒããçºè¡ãããŸãã
# Stage 8: Set properties for Synthesis and Implementation (Custom field) set_property strategy Flow_PerfOptimized_high [get_runs synth_1] set_property strategy Performance_ExtraTimingOpt [get_runs impl_1] launch_runs synth_1 wait_on_run synth_1 open_run synth_1 -name synth_1 launch_runs impl_1 -to_step write_bitstream wait_on_run impl_1
åæããã³ãã¬ãŒã¹èšå®ãã»ããã¢ãããããæçµæ®µéã§ã¯ãå©çšå¯èœãªãªã¹ãããæŠç¥ãéžæããŸãã 次ã«ãFPGAãã¡ãŒã ãŠã§ã¢ãå®å šã«é ç·ããããŸã§ãåæãé 眮ããã¬ãŒã¹ã1ã€ãã€éå§ãããŸãã
ã芧ã®ãšãããã¹ã¯ãªããã䜿çšãããšããããžã§ã¯ãã®äœæãæ°ãããã¡ã€ã«ã®è¿œå ãIPã³ã¢ã®æŽæ°ãªã©ãåãçš®é¡ã®å€ãã®é¢åãªäœæ¥ãããŠãŒã¶ãŒãæãããšãã§ããŸãã ã¹ã¯ãªããã¯å®å šã«èªååãããŠãããåäžã®åŒæ°-FPGAãããã®ã¿ã€ããã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã ãã¡ã€ã«å ã®å€æ°ããŸãã¯TCLã¹ã¯ãªããã®èµ·åãšåæã«å®è¡ãããåŒæ°ãšããŠèšå®ã§ããŸãã 次ã®å³ã¯ãã¹ã¯ãªããã䜿çšããŠèµ·åãããVivadoç°å¢ã®ãããžã§ã¯ãã¯ãŒã¯ã¹ããŒã¹ã®ã¹ã¯ãªãŒã³ã·ã§ããã瀺ããŠããŸãã

ãããšã¯å¥ã«ããã£ã¬ã¯ããªå ã®ãã¹ãŠã®ãã¡ã€ã«ãæ€çŽ¢ã§ããfindFilesããã·ãŒãžã£ã«æ³šæããå¿ èŠããããŸãã é¢æ°ã®åŒæ°ïŒ basedir-æ€çŽ¢ãã£ã¬ã¯ããªã pattern-æ€çŽ¢ãã¹ã¯ã
proc findFiles { basedir pattern } { set basedir [string trimright [file join [file normalize $basedir] { }]] set fileList {} foreach fileName [glob -nocomplain -type {fr} -path $basedir $pattern] { lappend fileList $fileName } foreach dirName [glob -nocomplain -type {dr} -path $basedir *] { set subDirList [findFiles $dirName $pattern] if { [llength $subDirList] > 0 } { foreach subDirFile $subDirList { lappend fileList $subDirFile } } } return $fileList }
æ€çŽ¢ã¯ããã€ãã®ã¹ãããã§å®è¡ãããŸãïŒäœæ¥ãã£ã¬ã¯ããªããã¡ã€ã«ãã³ãã¬ãŒããšããŠæ±ºå®ãããã«ãã¹ã§ãã¡ã€ã«åã§ãªã¹ããäœæããèŠã€ãã£ããã¡ã€ã«ãè€æ°ããå Žåã¯ãªã¹ãã¿ã€ããªã¹ãã®é åã圢æããŸãã findFilesé¢æ°ã®äŸã次ã®å³ã«ç€ºããŸãã æ確ã«ããããã«ãèŠã€ãã£ããã¹ãŠã®ãã¡ã€ã«ã衚瀺ãããµã€ã¯ã«ãèšè¿°ãããŠããŸãã ã芧ã®ãšãããåãã¡ã€ã«ãžã®ãã«ãã¹ã瀺ãããŠããŸãã

ã¹ã¯ãªããã¯ãã³ãã³ãã©ã€ã³ããããŸãã¯Vivadoã¢ããªã±ãŒã·ã§ã³GUIã䜿çšããŠå®è¡ãããŸãã æåã®ã±ãŒã¹ã§ã¯ãVivado TCLã·ã§ã«ãå®è¡ããç°¡åãªã³ãã³ããèšè¿°ããå¿ èŠããããŸã
vivado âmode tcl âsource %full_path/example.tcl
泚ïŒèµ·åã¢ãŒããguiã«å€æŽããŠãã³ãã³ãã©ã€ã³ããã°ã©ãã£ã«ã«ç°å¢ãéå§ããããšãã§ããŸãã
Vivadoç°å¢ã§ã¯ãã¹ã¯ãªããã¯åçŽãªæ¹æ³ã§å®è¡ãããŸã ã ã¡ãã¥ãŒ->ããŒã«-> TCLã¹ã¯ãªããã®å®è¡...

ããã§ãTCLèšèªã®çŽ¹ä»ã¯å®äºã§ãã ãããžã§ã¯ãèªååã®å¯èœæ§ã¯ããã§çµããã§ã¯ãããŸããã ãã®ç°¡åãªäŸã§ã¯ãTCLã¹ã¯ãªããã䜿çšããŠãFPGAãã¶ã€ã³ãèªååããæ¹æ³ã瀺ããããšæããŸããã TCLã¯éåžžã«äŸ¿å©ã§ãç解ããããããããŠæãéèŠãªããšãšããŠããªãŒãã³ã«äœ¿çšã§ããŸãã å人çãªèŠç©ããã«ãããšãéçºè ã®ç掻ã«ãããã¹ã¯ãªããã®å®è£ ã«ããããããžã§ã¯ããåæ段éããæçµæ®µéãŸã§å®å šã«äœæããã®ã«ãããæéãæ°åççž®ã§ãããã¯ãªãŒã³ãªãéçºïŒã³ãŒãã®äœæïŒã«æéããããããšãã§ããŸãã 以äžã¯ãFPGAã§TCLã¹ã¯ãªããã調ã¹ãã®ã«åœ¹ç«ã€ãªã³ã¯ã§ãã
åç §ïŒ
- Vivado Design SuiteãŠãŒã¶ãŒã¬ã€ã-Tclã¹ã¯ãªããã®äœ¿çš
- Vivado Design Suite Tclã³ãã³ããªãã¡ã¬ã³ã¹ã¬ã€ã
- TCLãã¥ãŒããªã¢ã«
- Roverãããžã§ã¯ãã§TCLã䜿çšãã
- FPGAéçæéåæ
- SOCãäžããïŒARM + FPGA
ãæž èŽããããšãããããŸããïŒ