注意:本文所有内容皆来源于Xilinx工程师,如需转载,请写明出处作者及赛灵思论坛链接并发邮件èï¼æªç»Xilinxåèä½æ人许å¯ï¼ç¦æ¢ç¨ä½åä¸ç¨éã
BY å¢æ
论åææ¥ä¹ææå - å¢æ
æ¾å°±èäºä¸æµ·è´å°ï¼é¿å°å¡ç¹æ讯ï¼ï¼ä»»FPGAå·¥ç¨å¸ãç®åä»äºFPGAå é计ç®æ¹é¢çå·¥ä½ãæå¤å¹´ä½¿ç¨FPGAå¼åååºç¨çç»åï¼çæXilinx FPGAçä½ç³»ç»æã
Vivadoç¸æ¯ä¸ä¸ä¸ä»£å¼åå·¥å ·ISEï¼ä¸ä¸ªå·¨å¤§çæåå°±æ¯å ¨é¢æ¯æTclèæ¬è¯è¨ãç±äºå ¨é¢æ¯æTclèæ¬ï¼æ以å¯ä»¥å©ç¨Tclæ¥åä¸äºå¥½ç©çäºæ ãè¿éæç å¼çï¼å享ä¸ç¹å ³äºVivado Tclç使ç¨å°å¿å¾ã
é常çå·¥ç¨ä¸ï¼ç´æ¥çæçæ件æ¯bitæ件ï¼å¦æéè¦è°è¯ï¼å¯è½è¿éè¦ltxæ件ï¼ãèé产项ç®ä¸ï¼bitæ件çå 容é常éè¦æ¾å¨flashä¸ï¼é¤äºæ©å¹´çSpartan-3ANï¼Xilinxç®åè¿æ²¡æå¨å®çå ç½®FlashçFPGA产åï¼ï¼è¿ä¸ªæ¶å常è§çæä½æ¯å°bitæ件转为mcsæ件æè binæ件ï¼å©ç¨Vivadoæè 第ä¸æ¹å·¥å ·ç§å ¥å°Flashä¸ã
å¨ISEæ¶ä»£ï¼æ个å¾å¥½ç¨çå·¥å ·iMPACTæ¥å®æbitå°mcs/binæ件ç转æ¢ãå°äºVivadoæ¶ä»£ï¼ç±äºå¯ä»¥ä½¿ç¨Tclèæ¬ï¼æ以é常建议使ç¨Tclèæ¬æ¥çæmcs/binæ件ï¼å ·ä½å½ä»¤æ¯write_cfgmemã
ä¸è¿æ¯æ¬¡çæbitæ件ä¹åéè¦æå¨è¾å ¥å½ä»¤æ¥çæä¸æ¬¡ï¼è¿æ ·çæä½æ¯æ¯è¾éº»ç¦çãè¿éæä¾ä¸ä¸ªæ¹æ³æ¥èªå¨å®ç°çæmcs/binæ件çåè½ï¼å¨æ¤åºç¡ä¸è¿è½å®åæ´å¤çç»èåè½ã
注æï¼å¦æ使ç¨non-project模å¼ï¼æè å³ä½¿æ¯project模å¼ä¹ä½¿ç¨å ¨èæ¬æ¨¡å¼ï¼é£ä¹åç´æ¥åå ¥Tclèæ¬å³å¯ãæ¬æ论述çæ¹æ³æ¯åºäºProject模å¼Vivado GUI使ç¨çã
Vivadoå¨æ¯ä¸æ¥æä½ç设置ä¸ï¼æ两个é项å¯ä»¥ä½¿ç¨ã
å ¶ä¸ï¼tcl.preåtcl.postæ¯æ·»å tclæ件çè·¯å¾ãtcl.pre表示è¿ä¸æ¥ä¹åè¿è¡æ·»å çtclæ件ï¼tcl.post表示è¿ä¸æ¥ä¹åè¿è¡æ·»å çtclæ件ã综åï¼å®ç°åbitæ件ççæè¿äºæ¥éª¤é½æè¿ä¸¤ä¸ªè®¾ç½®å¯ä»¥ä½¿ç¨ã
æ以åºæ¬æ路就æ¯ï¼å°éè¦çæä½ä»¥Tclèæ¬çå½¢å¼åå¨Tclæ件ä¸ï¼ç¶åæ·»å å°Bitstream Settingsä¸çtcl.postä¸ï¼è¿æ ·çæbitæ件ä¹åï¼Vivadoå°±ä¼èªå¨è¿è¡ç¸å ³çTclæ件æ¥å®ç°éè¦çåè½ã
1. é¦å éè¦æ³¨æçé®é¢æ¯ï¼Tclæ件è¿è¡è·¯å¾ãå½Tclæ件设置å°Bitstream Settingsä¸çtcl.postä¸ä¹åï¼å¨è¿è¡æ¶ï¼è¿è¡çè·¯å¾å°±æ¯æåçæbitæ件æå¨è·¯å¾ï¼èä¸ææ·»å çTclæ件åæ¾çè·¯å¾æ å ³ãè·åå½åè·¯å¾çTclå½ä»¤ï¼pwdãè¿ä¸æ¥é常æ¯æ令人å°æçï¼ç»å¸¸ä¼å 为路å¾ä¸æ£ç¡®èæ æ³æ£ç¡®çè¿è¡ã
2. ç¥éè·¯å¾ä¹åï¼ä¸ä¸æ¥æ¯éè¦ç¥ébitæ件åï¼è¿éå°±æä¸ä¸ªéè¦æ³¨æçå°æ¹ãé常ï¼å¨çæbitæ件çè·¯å¾ä¸åªä¼æä¸ä¸ªbitæ件ï¼æ件åæ¯åºå®çï¼æ¯æ¬¡çææ°çbitæ件ä¼è¦çææ§æ件ãä½æ¯ææ¶åä¼åºç°æå¤ä¸ªbitæ件çæ åµï¼ä¾å¦ï¼ä¼å°bitæ件æ¹åä½æ¯ä¾ç¶ä¿åå¨å½åè·¯å¾ä¸ï¼ç¨äºå¤ä»½ãè°è¯æ¶ä¸´æ¶æ¾ç½®äºå¤ä¸ªbitæ件çãè½ç¶è¿äºæ åµå¹¶ä¸è¢«æ¨èï¼ä½æ¯å¦æä¸æ¦åå¨ï¼ä¼å¯¼è´Tclèæ¬æ æ³ç¥éåºè¯¥å¤çåªä¸ªæ件ãä¸ä¸ªç®åå¯ç¨çæ¹æ³æ¯ï¼éååºææçbitæ件ï¼å¹¶åä¿®æ¹æ¶é´ææ°çä¸ä¸ªãç±äºåçæbitæ件ä¹åå°±è¿è¡Tclèæ¬ï¼æ以ææ°çæ件èªç¶å°±æ¯ååçæçbitæ件ã
对åºçTclèæ¬å¦ä¸
set pro_path "[pwd]\/" set bit_file_list [glob -path "$pro_path" "*.bit"] set file_time 0 foreach file $bit_file_list { set ftime [file mtime $file] if {$ftime == 0} { puts "Error File!" } if { $ftime > $file_time} { set file_time $ftime set file_name $file } }
ä¸è¿°ä»£ç ä¸ï¼globæ¯ç¨æ¥æ¥æ¾bitæ件çï¼file mtimeæ¯ç¨æ¥è·åæ件çæ´æ°æ¶é´ï¼ç¨æ¥å¯¹æ¯ã第ä¸è¡ç¨pwdè·åçè·¯å¾æ¯ç»å¯¹è·¯å¾ï¼ åé¢å ä¸â\/âæ¯ç¨æ¥ä½ä¸ºä¸ä¸ªç®å½è·¯å¾ï¼ä¾¿äºglobæ索并åæåºæ°çæ件åã为äºé²æ¢åºé®é¢ï¼å¦ææ件çä¿®æ¹æ¶é´æ¥å°æ¯0ï¼å认为该æ件ä¸æ£ç¡®ï¼ä¼æå°ä¿¡æ¯åæ示ã
3. è·åæ件ä¹åï¼å°±å¯ä»¥çæmcsæ件äºãæ¤æ¶bitæ件çæ件å以å®æ´çç»å¯¹è·¯å¾åå¨å¨file_nameåéä¸ï¼æç®åçåæ³æ¯ç´æ¥å°æ件çåç¼â.bitâæ¿æ¢ä¸ºâ.mcsâå³å¯ã
Tcl代ç ï¼ set mcs_file "[file rootname $file_name].mcs" file rootnameä¼è·åé¤äºæ件åç¼ä¹å¤çæ件åå ¨é¨ä¿¡æ¯ï¼åé¢å ä¸â.mcsâå³å¯ä½¿ç¨ãå¦æè¦çæbinæ件ï¼ä¿®æ¹mcs为binå³å¯ã
4. çæmcsæ件ãè¿é使ç¨write cfgmemå½ä»¤ãå ·ä½æ ¼å¼ä¾æ®éè¦è¿è¡è°æ´å³å¯ãæ好å ä¸-forceæ¥å®ç°è¦çæ§æ件ãä¸é¢æ¶write cfgmemçä¸ä¸ªä½¿ç¨èä¾ã
write_cfgmem -format MCS -size 256 -interface BPIx16 -loadbit "up 0x0 $file_name" -file $mcs_file -force
éè¦æ³¨æçæ¯ï¼è¿æ¡æ令ä¸flashç容éåæ¯æçæ¥å£æ¨¡å¼éè¦ç¨æ·æ ¹æ®èªå·±çå¼åæ¿è¿è¡é ç½®ãå¦å¤ï¼ZynqåZynq Ultrascale+ç³»åå¨ä»¶ä¸æ¯å¾éåç¨æ¬æçæ¹æ³æ¥çæmcsæ件ã
å°æ¬¡ï¼Tclæ件已ç»å®æèªå¨çæmcsæ件çå·¥ä½ãæ¯æ¬¡çæ好bitæ件ä¹åï¼å°±ä¼å¨bitæ件çè·¯å¾ä¸èªå¨çæmcsæ件ã
ä¸è¿ï¼é常ç项ç®å¼åï¼å¯¹é ç½®æ件çéæ±è¿ä¸æ¢äºæ¤ãè¿ç§æ¯æ¬¡çæçbitæ件é½æ¾å¨å·¥ç¨é»è®¤ç®å½ä¸çæä½ï¼å¹¶ä¸å©äºæ件/çæ¬ç管çï¼ä¹ä¸å©äºåé/æ交ãè¾ä¸ºå¸¸è§çåæ³æ¯å°bitæ件ä½ä¸ºåå§æ件ï¼éä¸ç§å½Flashç¨çmcsæ件ãè°è¯ç¨çltxæ件çï¼ä¸èµ·è½¬åå°å ¶ä»è·¯å¾ï¼ä¾å¦å ¬å¸çå é¨ç§æç½çï¼è¿è¡å¤ä»½/ååï¼ä¾¿äºå个工ç¨å¸æéæåãèè¿ä¸æ¥è½¬åï¼ä¹å¯ä»¥éæå¨è¿ä¸ªTclæ件ä¸ã
é¦å ï¼ä¸æå·²ç»ç¹æï¼Tclæ件è¿è¡çè·¯å¾åTclæ件æ¬èº«çè·¯å¾æ å ³ï¼æ以è¿ä¸ªTclæ件å¯ä»¥æ¾å¨ä»»æè·¯å¾ä¸ãå¦æéè¦å°bitæ件åmcsæ件æ¾ç½®äºæ个åºå®è·¯å¾ä¸ä¿åï¼å¯ä»¥å°è¯¥Tclæ件æ¾äºè¿ä¸ªè·¯å¾ä¸ãç¶åè¿è¡æ¶ï¼ä»Tclèæ¬ä¸è·åTclæ件æå¨è·¯å¾å³å¯ã
Tclæ件è·åæ件æ¬èº«è·¯å¾çå½ä»¤ set dest_path "[ file dirname [ info script ] ]"
è¿æ ·Tclæ件çç»å¯¹è·¯å¾å°±åå¨å¨dest_pathè¿ä¸ªåéä¸äºï¼åç»å¦æéè¦å¤å¶/移å¨æ件ï¼å¯ä»¥ä»¥è¿ä¸ªè·¯å¾ä½ä¸ºåºç¡è¿è¡ç¸å ³ä¿®æ¹ã
å¤å¶æ件çç¸å ³Tclå½ä»¤ï¼
file copy -force $file_name "$dest_path/bitfile/" file copy -force $mcs_file "$dest_path/mcsfile/"
éè¦æ³¨æçæ¯ï¼ç®çè·¯å¾éè¦ç¡®å®åå¨ï¼æ¯å¦ä¸é¢çbitfileåæ件夹åmcsfileåæ件夹ãå¦æä¸åå¨çè¯ï¼å¯ä»¥æ·»å ç¸å ³å½ä»¤ï¼çæåæ件夹ä¹ååè¿è¡å¤å¶ã
æ¬æç²æµ å°ä»ç»äºä¸ç§å©ç¨Tclèæ¬æ¥èªå¨åå®ç°mcsçæ并å¤å¶çæ¹æ³ãå ³é®ç¹å¨äºå¼è·åTclæ件æ§è¡ååæ¾çè·¯å¾ãç±äºTclçå å ¥ï¼Vivadoå¯ä»¥ææ´å¤æ°çç©æ³æ¥ç®åæ¥å¸¸å·¥ä½ãæå¿çæåå¯ä»¥å¤å ³æ³¨ä¸ä¸ï¼å¹¶å¨è®ºåä¸å¤è¿è¡äº¤æµã
é件ä¸è½½ï¼ gen_mcs.zip https://forums.xilinx.com/xlnx/attachments/xlnx/CN_support_blog/47/1/gen...
æ¥æºï¼èµçµæ论å