|
Xilinx ISE 批处理
最近在研究modelsim命令行仿真时想,仿真可以用命令行,批处理的方式,那综合呢,布局布线呢?经过查证是可以的。
下面就介绍ISE通过命令行,批处理的方式实现综合,布局布线等工作。
一、首先要将在你的环境变量中添加路径,也就是你所用到的应用程序的路径,我现在用的版本是ISE12.4版本,安装目录在D盘,所以建立一个PATH的环境变量,也即PATH=D:\Xilinx\12.4\ISE_DS\ISE\bin\nt\。如下图所示:
*建立环境变量的作用就是可以在任何目录下DOS窗口下直接使用path所制目录下应用程序。
二、建立工程文件夹,工程的目录结构并添加所需文件。
以ise下面自带的例子工程watchver为例,经整理后变成如下形式的目录结构:
其中rtl中放置所有hdl代码,其中包括ipcore下的代码。ngc放置ip的网表文件。prj放置批处理文件run.bat,stopwatch.xst,stopwatch.prj,stopwatch.ut。ise放置程序运行过程中产生的零时文件,以及最后生成的bit文件。
首次建立工程时我们可以打开GUI界面程序,建立一个工程,设置好综合等工作需要的参数。然后开始综合,布局布线等工作。然后我们将文件夹下生成的stopwatch.xst,stopwatch.prj,stopwatch.ut文件拷贝到prj目录下。(如果你熟知.xst文件和.ut文件的配置也可以不走这一步,或者这一次之后,所有的工程都可以通过修改这次的一些文件即可)
stopwatch.prj 文件是该工程所包含的所有好多了文件的路径,可以用记事本打开。stopwatch .xst 是综合时需要的参数。
stopwatch.ut 是生成bit文件时所要的参数。
Xlinx下面相关命令的介绍:
XST:综合
例如:xst -intstyle. silent -ifn "../prj/%ProjectName%.xst" -ofn %ProjectName%.syr
NGDBuild: 把所有的netlist和design constraint合并到一起,生成一个ngd文件供map工具使用。NGDBuild的报告文件是后缀名为“.bld”的文件。
注意:在执行这条命令之前,需要写后缀为.xst的配置文件和*.prj的工程文件。
例如:ngdbuild -intstyle. silent -dd _ngo -sd ../ngc -nt timestamp -uc ../ucf/%ProjectName%.ucf -p %FPGAType%-%Package%-%Speed% %ProjectName%.ngc %ProjectName%.ngd
MAP:MAP命令是将NGDBuild命令所生成的ngd文件,映射到具体的FPGA器件里面去。MAP将产生一个NCD文件供PAR使用。MAP的报告文件是后缀名为“.mrp”。
例如:map -intstyle. silent -p %FpgaType%-%Package%-%Speed% -cm area -ir off -pr off -c 100 -o %ProjectName%_map.ncd %ProjectName%.ngd %ProjectName%.pcf
PAR: PAR的报告文件是后缀名为“.mrp”。
例如:par -w -intstyle. silent -pl high -rl high -xe n -t 1 %ProjectName%_map.ncd %ProjectName%.ncd %ProjectName%.pcf
TRCE:用来产生timing report。TRCE会分析你的设计然后产生一个后缀名为“.twr”的时序报告。你可以用任何文本工具打开它,也可以用xilinx的 Timing Analyzer。
Bitgen:Bitgen用来产生你所需要的programming file。注意此时需要相应的“*.ut”配置文件,相关的配置文件必须先写好。
其他相关命令和相关的参数可以查看xlinx的文档devref.pdf
三、以上准备工作完成后,就开始写批处理文件run.bat
run.bat文件内容如下:
@echo off
rem 工程文件文件名 stopwatch
set ProjectName=stopwatch
rem 器件类型 xc3s1000
set FpgaType=xc3s1000
rem 封装类型 fg456
set Package=fg456
rem 器件速度 4
set Speed=4
rem 路径转换到ise文件夹下,所有的临时文件都生成在该文件夹下
cd ..\ise
rem 开始综合
echo Started : "Synthesize - XST"
xst -intstyle. silent -ifn "../prj/%ProjectName%.xst" -ofn %ProjectName%.syr
if %errorlevel%==0 (goto :Translate) else (goto :XST Failed)
rem 如果综合正确,那么就开始Translate,如果综合出错,那么就跳到综合失败处,然后打开.syr文件看记录
:XST Failed
echo syn error!!!
"../ise/%ProjectName%.syr"
exit
rem Translate
:Translate
echo Started : "Translate"
ngdbuild -intstyle. silent -dd _ngo -sd ../ngc -nt timestamp -uc ../ucf/%ProjectName%.ucf -p %FpgaType%-%Package%-%Speed% %ProjectName%.ngc %ProjectName%.ngd
if %errorlevel%==0 (goto:Map) else (goto:Translate Failed)
rem 如果Translate正确,那么就开始Map。如果Translate出错,那么就跳到Map失败处,然后打开.bld文件看记录
:Translate Failed
echo Translate error!!!
"../ise/%ProjectName%.bld"
exit
rem Map
:Map
echo Started : "Map"
map -intstyle. silent -p %FpgaType%-%Package%-%Speed% -cm area -ir off -pr off -c 100 -o %ProjectName%_map.ncd %ProjectName%.ngd %ProjectName%.pcf
if %errorlevel%==0 (goto:Place & Route) else (goto:Map Failed)
rem 如果Map正确,那么就开始Place & Route。如果Map出错,那么就跳到Map失败处,然后打开.mrp文件看记录
:Map Failed
echo Map error!!!
"../ise/%ProjectName%.mrp"
exit
:Place & Route
echo Started : "Place & Route"
echo ...
par -w -intstyle. silent -pl high -rl high -xe n -t 1 %ProjectName%_map.ncd %ProjectName%.ncd %ProjectName%.pcf
if %errorlevel%==0 (goto:Trce) else (goto:Place & Route Failed)
rem 如果Place & Route正确,那么看静态时序分析,如果Place & Route出错,那么就跳到Place & Route失败处,然后打开.par文件看记录
:Place & Route Failed
echo Place & Route error!!!
"../ise/%ProjectName%.par"
exit
rem 静态时序分析
:Trce
echo Started : "Generate Post-Place & Route Static Timing"
trce -intstyle. silent -v 3 -s 4 -n 3 -fastpaths -xml %ProjectName%.twx %ProjectName%.ncd -o %ProjectName%.twr %ProjectName%.pcf
if %errorlevel%==0 (goto:Generate Programming File) else (goto:Trce Failed)
rem 如果Trce出错,那么就跳到综合失败处,然后打开.par文件看记录
:Trce Failed
echo Trce error!!!
"../ise/%ProjectName%.twr"
exit
rem pause
:Generate Programming File
"../ise/%ProjectName%.twr"
echo go on or exit
pause
rem 生成bit文件
echo Started : "Generate Programming File"
echo ...
bitgen -intstyle. silent -f "../prj/%ProjectName%.ut" %ProjectName%.ncd
echo errorlevel=%errorlevel%
echo done!
rem pause
rem 将bit文件拷贝到bit文件夹下
copy *.bit ..\bit\*.bit
exit