/* * xsvf ファイルの生成方法を make でまとめる話 * by uratan! 2005.1.10 */ 直接デバイスを繋いで使う iMPACT は、デバイスを自動スキャンしてくれ、 処理対象を GUI で選ぶあたりが直観的で非常にいいと思うのですが、 XSVF ファイルを吐かせるために使うとかなり面倒くさいです。 iMPACT (手元のバージョンは 6.3.03i)は元々は CUI ベースであるところに GUI をかぶせたようなつくりのようで、CUI でも使えるようなんですが、 コマンドを勉強するのがなぁ、と思っていたら、こんな手が使えました。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1. コマンドプロンプトを開き、どこか空のフォルダに CD で行っておく。 2. コマンドラインから iMPACT を起動する。 +---------------------------- |C:\XXXX> impact +---------------------------- 3. GUI モードで、SVF ファイルを吐かせるオペレーションを一度行う。 (ちなみに Wizard から "Prepare Configuration Files", "Boundary-Scan File", "(X)SVF File", .... と進んで行います) 4. iMPACT を終了すると、いま GUI でやったオペレーションがすべて "_impact.cmd" というテキストファイルに納まっているので、 適当な名前(たとえば xyz.cmd)に変えておく。 5. xyz.cmd ファイルを編集し、最終行に "exit" を追加する。 また、対称ファイル名は絶対パスで格納されているので必要とあらば 相対パスに変えておく。 6. 以下で、最初に GUI でやったオペレーションは再現される。 +---------------------------- |C:\XXXX> impact -batch xyz.cmd +---------------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 生成ファイル名等を指定できないのはなんなのですが、今後繰り返すで あろうこの iMPACT の起動を make.exe にやらせるように makefile に まとめてみました。(まとめるまでもない ?) このファイルに取り込まれている 6つのファイルの説明です。切り出して 試してみてください。 (makefile は TAB と SPACE を区別する(はず)なので うまいことやってください) make すると xsvf ファイルを作り、make clean すると二次生成物を消します。 (サンプルのバッチコマンドは、同じディレクトリの top.bit/top.jed を 読み込むように相対パスに修整されています) ================ XC9536XL CPLD 用、デバイスは XC9536XL 1個のみ makefile --- jed2xsvf.cmd --- .\top.jed を .\counter.xsvf に変換する iMPACT のバッチコマンド できた counter.xsvf を、以下の手順にて EZ-USB JTAGW に 転送すると XC9536XL に書き込みます。 +-------------------------------------- |C:\XXX> copy/b counter.xsvf lpt2 +-------------------------------------- ================ XCF02S + XC3S50 用、DesignWave付録基板 makefile --- bit2fpga.cmd --- .\top.bit を FPGA に送る .\bit2fpga.svf に変換 bit2mcs.cmd --- .\top.bit を PROM に格納するための .\top.mcs に変換 mcs2rom.cmd --- .\top.mcs を PROM に送る .\mcs2rom.svf に変換 できた bit2fpga.xsvf を、以下の手順にて EZ-USB JTAGW に 転送すると XC3S50 に書き込みます。 +-------------------------------------- |C:\XXX> copy/b bit2fpga.xsvf lpt2 +-------------------------------------- またできた mcs2rom.xsvf を、以下の手順にて EZ-USB JTAGW に 転送すると XCF02S に書き込みます。 +-------------------------------------- |C:\XXX> copy/b mcs2rom.xsvf lpt2 +-------------------------------------- なお実行には win32 版 make.exe, rm.exe が必要です。 "Native Win32 ports of some GNU utilities" に含まれます。 <"http://unxutils.sourceforge.net/"> また FPGA の xsvf ファイルの作成には、-rlen を指定するために svf2xsvf.exe も必要です。 (Xilinx, eisp_pc.zip に含まれる svf2xsvf502.exe を使用) (PROM 書き込みの mcs2rom.xsvf の作成にも "-fpga -rlen 4096" つけてるんですけどいいんでしょうか ?) ============================================================================ ================ XC9536XL CPLD 用、デバイスは XC9536XL 1個のみ ============= ============================================================================ :::::::::::::::::::: ::::: makefile ::::: :::::::::::::::::::: ------------8<------------- cut here --------------->8------------- # # makefile for generating XSVF file from *.jed by iMPACT batch mode # by uratan! 2005.1.10 # # HOWTO # # 1. change directory for your CPLD Project, where *.jed is. # 2. invoke iMPACT from command line, like "C:\XXXX> impact" # 3. once issue necesary operation by GUI, then exit. # 4. there exist a file named "_impact.cmd", which has all your # operation done above. so rename "_impact.cmd" to your favorite filename. # 5. don't forget to add "exit" command at the end of the *.cmd file. # # # my eva-board has 1 devices in JTAG chain, # # TDI ---> XC9536XL ---+ # | # TDO <-----------------+ # # # so I prepare for these .cmd file: # jed2xsvf.cmd --- operation converting *.jed to *.xsvf # reads: top.jed, # generates: counter.xsvf # # CAUTION! each *.cmd have file pathname absolutely, # so you shall make them only in this directory... # or # edit *.cmd about pathname, change all pathname relative, like # "C:\XXX\xxx.jed" ---> "./xxx.jed" # all: counter.xsvf clean: -rm -f _impact.log _impactbatch.log _impact.cmd -rm -f counter.xsvf counter.xsvf: top.jed impact -batch jed2xsvf.cmd ------------8<------------- cut here --------------->8------------- :::::::::::::::::::::::: ::::: jed2xsvf.cmd ::::: :::::::::::::::::::::::: ------------8<------------- cut here --------------->8------------- setPreference -pref UserLevel:EXPERT setPreference -pref MessageLevel:DETAILED setPreference -pref ConcurrentMode:FALSE setPreference -pref UseHighz:FALSE setPreference -pref ConfigOnFailure:STOP setPreference -pref StartupCLock:AUTO_CORRECTION setPreference -pref AutoSignature:FALSE setPreference -pref KeepSVF:FALSE setPreference -pref svfUseTime:FALSE setPreference -pref UserLevel:EXPERT setPreference -pref MessageLevel:DETAILED setPreference -pref ConcurrentMode:FALSE setPreference -pref UseHighz:FALSE setPreference -pref ConfigOnFailure:STOP setPreference -pref StartupCLock:AUTO_CORRECTION setPreference -pref AutoSignature:FALSE setPreference -pref KeepSVF:FALSE setPreference -pref svfUseTime:FALSE setMode -bsfile setCable -port xsvf -file "./counter.xsvf" addDevice -position 1 -file "./top.jed" Program -p 1 -e -v exit ------------8<------------- cut here --------------->8------------- ============================================================================ ================ XCF02S + XC3S50 用、DesignWave付録基板 ==================== ============================================================================ :::::::::::::::::::: ::::: makefile ::::: :::::::::::::::::::: ------------8<------------- cut here --------------->8------------- # # makefile for generating XSVF file from *.bit by iMPACT batch mode # by uratan! 2005.1.8 # # HOWTO # # 1. change directory for your FPGA Project, where *.bit is. # 2. invoke iMPACT from command line, like "C:\XXXX> impact" # 3. once issue necesary operation by GUI, then exit. # 4. there exist a file named "_impact.cmd", which has all your # operation done above. so rename "_impact.cmd" to your favorite filename. # 5. don't forget to add "exit" command at the end of the *.cmd file. # # # my DesignWave Spartan3 eva-borad has 2 devices in JTAG chain, # # TDI ---> XCF02S ---> X3S50 ---+ # | # TDO <--------------------------+ # # # so I prepare for these .cmd file: # (top.bit is project target .bit file) # bit2mcs.cmd ---- operation converting *.bit to *.mcs # reads: top.bit, # generates: top.mcs # bit2fpga.cmd --- operation writing *.bit to FPGA device, # reads: top.bit, top.mcs, # generates: bit2fpga.svf # mcs2rom.cmd ---- operation writing *.mcs to Platform FLASH PROM # reads: top.bit, top.mcs, # generates: mcs2rom.svf # # CAUTION! each *.cmd have file pathname absolutely, # so you shall make them only in this directory... # or # edit *.cmd about pathname, change all pathname relative, like # "C:\XXX\xxx.bit" ---> "./xxx.bit" # .SUFFIXES: .svf .xsvf SVF2X = svf2xsvf502.exe # need win32 make utility, like gmake.exe all: bit2fpga.xsvf mcs2rom.xsvf clean: -rm -f _impact.log _impactbatch.log _impact.cmd -rm -f top_cclktemp.bit -rm -f bit2fpga.svf bit2fpga.xsvf -rm -f top.mcs top.prm top.sig -rm -f mcs2rom.svf mcs2rom.xsvf top.mcs: top.bit impact -batch bit2mcs.cmd bit2fpga.svf: top.bit top.mcs bit2fpga.cmd impact -batch bit2fpga.cmd mcs2rom.svf: top.bit top.mcs mcs2rom.cmd impact -batch mcs2rom.cmd .svf.xsvf: $(SVF2X) -fpga -rlen 4096 -w -i $*.svf -o $*.xsvf ------------8<------------- cut here --------------->8------------- :::::::::::::::::::::::: ::::: bit2fpga.cmd ::::: :::::::::::::::::::::::: ------------8<------------- cut here --------------->8------------- setPreference -pref UserLevel:EXPERT setPreference -pref MessageLevel:DETAILED setPreference -pref ConcurrentMode:FALSE setPreference -pref UseHighz:FALSE setPreference -pref ConfigOnFailure:STOP setPreference -pref StartupCLock:AUTO_CORRECTION setPreference -pref AutoSignature:TRUE setPreference -pref KeepSVF:FALSE setPreference -pref svfUseTime:FALSE setPreference -pref UserLevel:EXPERT setPreference -pref MessageLevel:DETAILED setPreference -pref ConcurrentMode:FALSE setPreference -pref UseHighz:FALSE setPreference -pref ConfigOnFailure:STOP setPreference -pref StartupCLock:AUTO_CORRECTION setPreference -pref AutoSignature:TRUE setPreference -pref KeepSVF:FALSE setPreference -pref svfUseTime:FALSE setMode -bsfile setCable -port svf -file "./bit2fpga.svf" addDevice -position 1 -file "./top.bit" addDevice -position 1 -part "xcf02s" setAttribute -position 1 -attr configFileName -value "./top.mcs" Program -p 2 exit ------------8<------------- cut here --------------->8------------- ::::::::::::::::::::::: ::::: bit2mcs.cmd ::::: ::::::::::::::::::::::: (この格納形式への変換は、Wizard から "Prepare Configuration Files", "PROM File", "Xilinx Serial PROM", "MCS" .... と進んで行います) ------------8<------------- cut here --------------->8------------- setPreference -pref UserLevel:EXPERT setPreference -pref MessageLevel:DETAILED setPreference -pref ConcurrentMode:FALSE setPreference -pref UseHighz:FALSE setPreference -pref ConfigOnFailure:STOP setPreference -pref StartupCLock:AUTO_CORRECTION setPreference -pref AutoSignature:TRUE setPreference -pref KeepSVF:FALSE setPreference -pref svfUseTime:FALSE setPreference -pref UserLevel:EXPERT setPreference -pref MessageLevel:DETAILED setPreference -pref ConcurrentMode:FALSE setPreference -pref UseHighz:FALSE setPreference -pref ConfigOnFailure:STOP setPreference -pref StartupCLock:AUTO_CORRECTION setPreference -pref AutoSignature:TRUE setPreference -pref KeepSVF:FALSE setPreference -pref svfUseTime:FALSE setMode -pff setMode -pff setMode -pff addConfigDevice -size 256 -name "xcf02s" -path "./" setSubmode -pffserial addPromDevice -position 1 -size -1 -name "xcf02s" setMode -pff setSubmode -pffserial setAttribute -configdevice -attr size -value "0" addCollection -name "top" setAttribute -collection -attr dir -value "UP" addDesign -version 0 -name "0000" addDeviceChain -index 0 addDevice -position 1 -file "./top.bit" setMode -pff setAttribute -configdevice -attr fillValue -value "FF" setAttribute -configdevice -attr fileFormat -value "mcs" setAttribute -collection -attr dir -value "UP" setAttribute -configdevice -attr path -value "./" setAttribute -collection -attr name -value "top" generate exit ------------8<------------- cut here --------------->8------------- ::::::::::::::::::::::: ::::: mcs2rom.cmd ::::: ::::::::::::::::::::::: ------------8<------------- cut here --------------->8------------- setPreference -pref UserLevel:EXPERT setPreference -pref MessageLevel:DETAILED setPreference -pref ConcurrentMode:FALSE setPreference -pref UseHighz:FALSE setPreference -pref ConfigOnFailure:STOP setPreference -pref StartupCLock:AUTO_CORRECTION setPreference -pref AutoSignature:TRUE setPreference -pref KeepSVF:FALSE setPreference -pref svfUseTime:FALSE setPreference -pref UserLevel:EXPERT setPreference -pref MessageLevel:DETAILED setPreference -pref ConcurrentMode:FALSE setPreference -pref UseHighz:FALSE setPreference -pref ConfigOnFailure:STOP setPreference -pref StartupCLock:AUTO_CORRECTION setPreference -pref AutoSignature:TRUE setPreference -pref KeepSVF:FALSE setPreference -pref svfUseTime:FALSE setMode -bsfile setCable -port svf -file "./mcs2rom.svf" addDevice -position 1 -part "xcf02s" setAttribute -position 1 -attr configFileName -value "./top.mcs" addDevice -position 2 -file "./top.bit" Program -p 1 -e -v exit ------------8<------------- cut here --------------->8------------- ---- uratan@miomio.jp