如何在Xilinx ISE中使用TCL提高工作效率
- 格式:docx
- 大小:32.47 KB
- 文档页数:2
使用TCL脚本可以极大地提高ISE的工作效率,省去了很多手动的鼠标点击,你只要编辑好相关的Verilog/VHDL源文件和UCF文件即可,然后运行一下.tcl文件就可以等着看结果了。
下面简要说明:第一步:新建工程文件夹,将编写好的Verilog/VHDL源文件和UCF文件及TCL文件(编写方法见下文)放入文件夹中第二步:打开ISE,单击ISE信息提示栏中的Tcl Console,在Command栏键入pwd,查看当前目录,然后键入cd命令进入到你新建的工程文件夹,例如:cd D:/new第三步:运行tcl脚本文件,键入source new.tcl(假设你的.tcl文件名为new.tcl),剩下的工作就是等待了,脚本运行完后会生成bit文件下面大致讲一下Xilinx下tcl脚本文件的编写,首先新建一个文本文件,保存为.tcl格式,将下面的内容复制进文本文件,照着修改就行了要深入学习TCL建议看Xilinx的相关文档,还有华为TCL培训教程等project new my_proj1.ise;# 新建工程project set family spartan3e;# 选择器件project set device xc3s500eproject set package fg320project set speed -4##################################################################### ########### 添加源文件##################################################################### ##########puts "Adding Source Files..."xfile add di.vhd;# 添加.vhd文件xfile add ce.vhd;# 添加.vhd文件xfile add top.ucf;# 添加.ucf文件##################################################################### ########### 设置实现选项,可根据需要自己修改##################################################################### ##########puts "Setting Project Properties..."project set "custom compile file list" "fpga_b.prj"project set "Optimization Effort" Highproject set "Cores Search Directories" ../srcproject set "Read Cores" true ;# default is true, don't need to set project set "Macro Search Path" ../srcproject set "Map Effort Level" Highproject set "Perform Timing-Driven Packing and Placement" 1project set "Place & Route Effort Level (Overall)" High# Do not generate the default post place static timing reportproject set "generate post-place & route static timing report" false##################################################################### ########### 运行设计##################################################################### ##########process run "Implement Design";# 运行Implement Designputs "Implement design done"process run "Generate Programming File";# 生成bit文件puts "Bit file ready!"#project close;# 如需关闭本工程,把本行前面的#去掉#puts "project closed!"。
Scripting Xilinx® ISE™ with TclA Tutorial based on a simple implementationDoulos - July 2008IntroductionXilinx ISE is one of the very many EDA tools that can be controlled using Tcl. Why would you want to do that? Well, on our courses I often see delegates make an edit to their source code then go and re-implement it, only to find that the synthesis/layout doesn't do the same as it did last time.This is a constant danger if repeatability depends on remembering to click on the correct boxes and menus in the user interface. If you create a command file you can run that same file many times, thus guaranteeing that you are issuing the same commands to the tool each time.There are two ways of running the script:1) Within the GUI there is a Tcl command window, in which you can source (i.e. call/run) a script.2) You can issue the command "xtclsh <scriptname>" in your DOS command window or *nix shell and avoid the overhead of a graphical interface completely.With all this in mind, we are now going to explore some of the ways in which we can drive ISE from a Tcl script. We will synthesize a small design using XST and implement it in a Spartan3e device (chosen to match the boards used with our course VHDL for FPGA Design).Input FilesThe first thing we need to do is to tell the tool which source file will be used. We want to do this in a maintainable way, and to this end all filenames are given at the top of the script.We set some Tcl variables to contain the filenames we want to use:# where all output will be createdset compile_directory spartan3e# the top-level of our HDL source:set top_name spartan3e_top# input source files:set hdl_files [ list../constants_spartan.vhd../components.vhdRest of files...]# constraints with pin placements.set constraints_file ../spartan3e_fsm.ucfA '#' signifies a comment, which last until a newline and is ignored. Well, mostly. There is some deep underlying behaviour which means it's best to follow these rules about comments:•Each comment on a separate line where # is the first character on that line•Don't include mismatched round or square brackets, and don't use curly brackets at all.The 'set' command is used to apply a value to a variable:set variable_name valueIn the setting of the variable hdl_files we used the list command to create a Tcl list from the following text strings. We could have done it simply using curly braces, like this:set hdl_files {../constants_spartan.vhd../components.vhdRest of files...}This approach has some drawbacks, especially when the list items have spaces or special characters.it's generally best to construct the list using the list command. That also allows you to uselappend and lindex commands to manipulate the list.Setting a compilation directoryNow we have the file set up, we need to have somewhere to process them. We can use the file command and its sub-command mkdir to create a directory:if {![file isdirectory $compile_directory]} {file mkdir $compile_directory}This code asks if the directory exists and if not it is created. Using $variable_name gets you the current value of that variable. You may also find file exists useful.Project creation and settingsSo, now we have a directory and we can do something there. Assuming no project exists in this directory we can go ahead and make one. Xilinx provide the project command, which includes sub-commands for the project settings and other related tasks. Let's try some:project new $proj.iseproject set family Spartan3Eproject set device xc3s500eproject set package fg320project set speed -4This is one of the strengths of Tcl: it is easy to add new commands just by writing your own procedures. Writing procedures is outside the scope of this discussion but is covered fully in the Doulos course Essential Tcl/Tk.Now we need to add some files to the project. Again, Xilinx provide a Tcl command for this: thexfile command is used to add, remove, and get information on any source files in the current ISE project. We need to add some files, but we don't really want to type out filenames again (maintainability, remember?) and we already have a list of source files. Solution is to loop through the list adding each file to the project:foreach filename $hdl_files {xfile add $filenameputs "Adding file $filename to the project."}The puts command is a simple way to write to STDOUT (usually the console/shell). Note: don't forget to add the constraints file; NGDBuild does not automatically detect .ucf files when run from Tcl. Use xfile add in the same way.Running processesBefore we run any processes, we can set process options using the project set command; see the provided script for examples and the Xilinx Development System Reference Guide for exhaustive detail.Now we can run something. Just as with the ISE graphical interface, running any given process will run any required prior processes. In our example, I can issue this commandprocess run "Generate Programming File"and the design will be synthesized and implemented first before the bitfile is created. Again, just as in the graphical interface, source and intermediate file dependencies are checked and processes are run only if required. For example, to force a implementation rerun:process run "Implement Design" -force rerun_allProgramming the deviceHere we have to change our approach, as Impact does not have a Tcl interface. However, this does allow us to explore another way of controlling applications. Impact has the ability to run a script file that consists of a series of commands. These are not Tcl commands, but we can use Tcl to construct this file. We can then run Impact from with the Tcl script. Let's see how.First we need to open a file that will become the Impact script. We do this with the open command:if {[catch {set f_id [open $impact_script_filename w]} msg]} {puts "Can't create $impact_script_filename"puts $msgexit}What's going on here? The open command returns a handle to the file which we put in the variablef_id. If open fails it would stop the script; this is probably the best thing to do here, but in general you may want to trap errors and continue with other things. That's what catch can do: it will return a non-zero error code if the command it runs (in this case the open) fails and place any error message from that command in the variable that here is called msg. Hence, if the open fails $msg will contain the reason why.At the end of this we either have a filehandle we can use or the script has stopped.How do we write text to the file? With the puts command. Earlier we used it to write text to the console, but here we see an extension:puts $f_id "addDevice -position 1 -file $bit_filename"Well, it's not really an extension. The default destination of a puts command is the standard output, so if we leave off that argument that is where it goes. The line above writes the text to the file given byf_id instead. After we have written the required command to the Impact script we should close the file.Now we have to start Impact. There are several ways of calling external programs from Tcl; the easiest is to use the exec command, which runs the external program, waits for it to finish and returns all its output. This is acceptable for quick programs but not for anything more complicated, as you cannot direct any input to the program or control it while it is running. More flexibility is provided by using the open command, but this time as a pipe from the program:set impact [open "|impact -batch $impact_script_filename" r]This line starts Impact with the script, and returns its output to the variable impact_p. The benefit of using the pipe is that we can now watch the stdout of the tool from within our Tcl script:while {![eof $impact_p]} { gets $impact_p line ; puts $line }This code writes each line of Impact's output to the Tcl script's own standard output. The command'eof' returns true when the external program finishes. If the external program requires some interaction this approach will not work, as the external program will only return true to eof when it finishes andnot when to supply some text. In our case it's OK because we want the Impact script to run until completion without interraction. We explore ways of interacting with programs in Essential Tcl/Tk. Assuming all this runs successfully you should have a working device. Congratulations!。
vivado调用tcl指令【实用版】目录1.引言2.Vivado 与 TCL 指令的简介3.如何在 Vivado 中调用 TCL 指令4.实际应用案例5.总结正文【引言】在 FPGA 设计和开发过程中,Vivado 是 Xilinx 公司提供的一款强大的集成开发环境(IDE),可以帮助工程师更高效地完成项目。
而在Vivado 中,可以使用 TCL(Tool Command Language)指令来进行脚本编程和自动化操作。
本文将介绍如何在 Vivado 中调用 TCL 指令,并举例说明其在实际项目中的应用。
【Vivado 与 TCL 指令的简介】Vivado 是 Xilinx 公司推出的一款针对 FPGA 和 SoC 器件的设计工具,它支持从设计输入到验证、实施和测试等全流程的开发。
Vivado 具有丰富的功能,可以满足各种复杂数字逻辑电路的设计需求。
TCL(Tool Command Language)是一种脚本语言,用于控制和自动化Xilinx 开发工具的行为。
通过编写 TCL 脚本,用户可以实现自定义操作,提高开发效率。
【如何在 Vivado 中调用 TCL 指令】要在 Vivado 中调用 TCL 指令,需要遵循以下步骤:1.打开 Vivado,并加载需要进行 TCL 指令操作的 FPGA 设计项目。
2.在 Vivado 的菜单栏中,选择“File”>“Automation”>“Create”来创建一个新的 TCL 脚本文件。
3.编写 TCL 脚本。
例如,以下脚本用于创建一个名为“my_design”的工程:```# Create a new project named "my_design"set project_name "my_design"set project_path"C:/Users/username/Documents/Vivado/Projects"create_project $project_name $project_path```4.保存 TCL 脚本,并将其与 Vivado 项目关联。
vivado tcl语句1. 什么是Vivado TCL语句?Vivado是一种由赛灵思公司开发的综合工具套件,用于设计和实现复杂的数字电路。
TCL(Tool Command Language)是一种脚本语言,由约翰·奥斯汀(John Ousterhout)于1988年开发,用于自动化软件任务。
在Vivado中,你可以使用TCL语句来定义和执行各种操作,例如创建设计工程,生成约束文件,运行综合和实现流程等。
2. 使用TCL语句的优势有哪些?使用TCL语句可以带来许多优势。
首先,TCL是一种脚本语言,它允许你编写一系列命令来执行复杂的任务,无需逐个手动输入命令。
这大大提高了工作效率,减少了错误的可能性。
其次,TCL语句是可编程的,这意味着你可以使用条件语句、循环和函数等控制结构来编写更加灵活和智能的代码。
你可以根据特定需求自定义脚本,以便自动执行一系列任务,而不是手动操作。
此外,TCL语句还可以与其他脚本语言和工具进行交互,例如Python和Shell脚本。
这意味着你可以在TCL脚本中调用其他脚本或工具的功能,以实现更高级的自动化和集成。
3. 如何使用Vivado TCL语句?使用Vivado TCL语句有一些基本步骤。
首先,你需要打开Vivado软件,并创建或打开一个设计工程。
在Vivado界面中,你可以打开"TCL Console"窗口,它允许你在其中输入和执行TCL命令。
接下来,你可以使用TCL语句来执行各种操作,例如创建设计工程、添加源文件、设置约束、运行综合和实现等。
可以使用"source"命令执行一个TCL脚本文件,或者逐个输入命令。
通过在命令前加上"puts"命令,你还可以打印输出结果,以便进行调试和验证。
此外,Vivado还提供了TCL命令的完整文档和参考手册,你可以在其中查找各种命令和用法的详细信息。
这些文档可以帮助你学习和理解TCL 语句的功能和用法。
程式尾的做法_加入加工时间和程式头的做法一样,这里就不详细说明了这里就说一下加入加工时间在自定义命令里输入如下指令global mom_machine_timeMOM_output_literal "(TIME: [ format "%.2f" $mom_machine_time] MIN)"加turbo,使后处理速度快5~6倍再在如图位置增加一个自定义命令输入以下内容uplevel #0 {set mom_kin_is_turbo_output "TRUE"MOM_reload_kinematics}加入刀具信息在弹出的对话框中输入如下指令global mom_tool_diameterglobal mom_tool_corner1_radiusglobal mom_tool_nameMOM_output_literal "( $mom_tool_name D=[format "%.2f" $mom_tool_diameter]R=[format "%.2f" $mom_tool_corner1_radius] )"注意,D和R都可以改成你方便识别的文字,也可以改成汉字,不过要你的机床能识别汉字,%.2f是输出刀具信息的精度,这个意思是小数点后面2位数,2可以改成其它数字,其它地方就不要改了主軸轉速﹕[format "%.0f" $mom_spindle_rpm]進給﹕[format %.1f $mom_feed_cut_value]加工時間﹕[ format "%.2f" $mom_machine_time]刀具名稱:$mom_tool_name刀具直徑:[ format "D=%.2f" $mom_tool_diameter]刀具R角半徑:[ format "R=%.2f" $mom_tool_corner1_radius]刀具伸出長L:[ format "L=%.2f" $mom_tool_length]刀具首下長FL:[ format "FL=%.2f" $mom_tool_flute_length]攻牙Q值的設定﹕$mom_cycle_retract_to自定程式名﹕$mom_output_file_basename內定程式名﹕$mom_group_nameglobal mom_tool_name 刀具详思信息global mom_tool_diameter mom_tool_corner1_radius mom_tool_flute_lengthmom_tool_lengthMOM_set_seq_offMOM_output_literal "(ToolName=$mom_tool_name\D=[format "%.2f" $mom_tool_diameter]\R=[format "%.2f" $mom_tool_corner1_radius]\F=[format "%.2f" $mom_tool_flute_length]\L=[format "%.2f" $mom_tool_length])"global mom_tool_nameMOM_output_literal "(TOOL: $mom_tool_name)" 程式中加刀具名global mom_group_nameMOM_output_literal "(NAME: $mom_group_name)" 程式中加程式名global mom_operation_name 程式中单节名MOM_output_literal "(Operation_Name= $mom_operation_name)"在程序尾加入的代码:#=============================================================proc MOM_end_of_program { } {#===================================================== ========global mom_stock_part mom_stock_floor (后处理加佘量 )MOM_output_literal "(Part stock=[format "%.3f" $mom_stock_part] MM \ Floor stock= [format "%.3f" $mom_stock_floor ] MM)"global mom_machine_time 加工时间MOM_output_literal "(Total Machine Time: [ format "%.2f" $mom_machine_time] minutes)"以上源代码适合各类机床。
TCL-TK实现modelsim仿真多用例顺序执行背景:随着逻辑的复杂程度的增加,逻辑的设计越来越复杂,逻辑得规模也越来越大。
在进行一个设计时候,需要多个仿真用例来对设计进行功能、异常的验证。
如果从传统的单个执行用例一个一个执行往往需要很费时间。
本文阐述的是,如何用TCL/TK实现可视化的,基于mentor公司的modelsim的仿真用例串行执行。
也就是,一次性将所有用例执行完毕,并生成测试报告。
TCL/TK编写的程序可以通过细微的改动移植到LINUX环境下。
本文的代码部分实现的是可以兼容两种系统的仿真用例串行执行程序。
本文所涉及的的工具为xilinx公司ise9.2.04,modelsim6.0d,tcl8.5。
1.设计工程准备对于一个设计工程,我们会建立相应的目录。
目录结构如下图:图1.1 工程结构图下面分别介绍各个目录的作用。
bfm文件夹存放仿真需要用的仿真接口模型,用于进行激励的输入。
lib文件夹存放仿真的库文件。
利用modlsim将xilinx库提供的器件库文件vlog。
编译后的文件放到lib/work文件夹下。
rtl文件夹存放设计的源代码,lib用于存放编译设计后的库文件。
sim文件夹用于存放设计文件代码所编译后的仿真文件。
tests文件夹下存放的是仿真用例。
在每个用例文件夹下存放着start.tcl文件,用于进行该用例的执行。
内容如下:exec vsimk –do “vmap work ../sim/work; vlog ../rtl/*.v;vlog ../bfm/*.v; vsim ../lib/work/ work.tb_design; do wave.do;p_run 5ms; quit -f”通过tcl解释器加载该文件,该用例可以自动运行,且自动退出modlsim。
如果该设计的用例数较多,务必导致,工作效率的降低。
通过tcl/tk编写的串行脚本用例,可以方便的将所有的用例串行执行完毕。
vivado tcl语法Vivado是一款用于FPGA设计的软件,而Tcl(Tool Command Language)是Vivado软件中用于编程和自动化的一种脚本语言。
以下是一些Vivado Tcl语法的基本概念和示例:1. 控制流程命令:`if`:例如,`if { $value == 1 } { do something }``foreach`:例如,`foreach item $list { do something }``while`:例如,`while { $condition } { do something }`2. 数组:数组可以直接赋值,例如:`set i(1) 123` 和 `set i(16) "hi"`。
支持任意维数的数组,例如:`set i(1,2,3) "hi"`,引用时直接使用`$i(1,2,3)`。
使用 `parray` 命令可以打印出数组的全部信息。
3. 目标选择与定位:Vivado中的目标可以分为五类:ports(顶层I/O)、pins(其他所有端口)、cells(各级模块、blackbox和门级元件)、nets(连线)和clocks(在XDC中定义的时钟)。
使用 `get_` 命令来选取这些目标,例如 `get_ports`、`get_cells`、`get_nets` 等。
4. 层次问题:Vivado中Tcl/XDC对网表中目标的搜索是层次化的。
搜索特定层次的目标时,可以使用 `current_instance` 命令来设置搜索的层次。
5. 其他常用命令:`create_clock`:创建一个时钟源。
`create_pin`:在IP或FPGA设备上创建一个物理引脚。
`create_task` 和 `create_process`:创建任务和进程来定义设计流程。
6. 文件操作:使用 `open` 和 `close` 命令来打开和关闭文件。
vivado调用tcl指令摘要:1.简介2.vivado 和tcl 指令的基本概念3.vivado 调用tcl 指令的方法4.实例演示5.总结正文:1.简介Vivado 是Xilinx 公司推出的一款FPGA 设计工具,它集成了大量的IP 核,可以方便地进行FPGA 设计。
在Vivado 中,我们可以通过调用TCL 指令来实现一些复杂的功能。
本文将详细介绍Vivado 调用TCL 指令的方法。
2.vivado 和tcl 指令的基本概念Vivado是一个基于TCL/TK的脚本语言,我们可以通过编写TCL脚本实现对Vivado的命令控制。
TCL(Tool Command Language)是一种脚本语言,用于控制不同类型的工具,它具有简单、易于学习的特点。
3.vivado 调用tcl 指令的方法在Vivado 中调用TCL 指令,主要分为以下几个步骤:步骤一:编写TCL 脚本首先,我们需要编写一个TCL 脚本文件,例如:example.tcl。
在脚本中,我们可以定义一些变量,以及实现所需功能的TCL 指令。
步骤二:设置TCL 环境打开Vivado,进入“File” -> “Setup” -> “TCL/TK Interpreter”。
在这里,我们需要设置TCL 脚本的路径,指向我们刚刚创建的example.tcl 文件。
步骤三:运行TCL 脚本在Vivado 中,我们可以通过“Run” -> “Script”来运行TCL 脚本。
在弹出的对话框中,选择我们设置好的TCL 脚本文件,点击“Run”按钮即可执行脚本。
4.实例演示下面,我们通过一个简单的实例来演示如何在Vivado 中调用TCL 指令:实例需求:创建一个简单的4 位加法器,并将结果保存到文件中。
步骤一:编写TCL 脚本创建一个名为“add4.tcl”的文件,编写以下代码:```set top_module add4_topset top_file [top_module]_wrap.vcreate_module $top_moduleset_property INTERFACE_TYPE vlnv [get_property INTERFACE_TYPE $top_module]create_module adder_4bitset_property INTERFACE_TYPE vlnv [get_property INTERFACE_TYPEadder_4bit]connect_portsset_property PACKAGE_PIN A [get_property PACKAGE_PIN A $top_module]set_property PACKAGE_PIN B [get_property PACKAGE_PIN B$top_module]set_property PACKAGE_PIN C [get_property PACKAGE_PIN C$top_module]set_property PACKAGE_PIN D [get_property PACKAGE_PIN D $top_module]set_property PACKAGE_PIN Y [get_property PACKAGE_PIN Y adder_4bit]set_property PACKAGE_PIN_NAME Y [get_propertyPACKAGE_PIN_NAME Y adder_4bit]set_property PACKAGE_PIN_DIRECTION Y inputcreate_property_array -name IO_PIN_DIRECTIONS -values "input output input input output"set_property IO_PIN_DIRECTIONS [get_propertyIO_PIN_DIRECTIONS $top_module]```步骤二:设置TCL 环境打开Vivado,进入“File” -> “Setup” -> “TCL/TK Interpreter”,设置TCL 脚本的路径为“add4.tcl”。
ISE的使用说明ISE(Integrated Software Environment)是一种集成软件环境,用于设计和验证硬件开发项目。
它由Xilinx公司开发,旨在为FPGA(Field-Programmable Gate Array)和SoC(System-on-a-Chip)设计提供完整的解决方案。
ISE具有多种功能和工具,可以帮助工程师在整个开发过程中完成各种任务。
ISE的安装:ISE的主要功能:ISE为硬件设计和验证提供了全面的解决方案。
以下是ISE的主要功能:2.综合和优化:ISE包含了综合和优化工具,将HDL代码转换为布尔函数表示。
综合工具会分析代码并生成等效的硬件电路电路。
优化工具会尝试将电路改进为更有效的形式,以提高性能和减少资源消耗。
3.约束和分析:在设计过程中,您通常需要对硬件进行约束,以满足特定的要求。
ISE提供了工具来定义时序约束、电气约束和物理约束,并分析设计是否满足这些约束。
4.实现和布局:一旦设计和优化完成,ISE将使用实现和布局工具将电路映射到目标FPGA或SoC中。
这些工具将选择适当的逻辑资源,并将其布局在特定的芯片区域,以最大程度地提高性能和效率。
5.仿真和调试:在设计过程中,您需要对硬件进行仿真和调试,以验证其正确性和性能。
ISE提供了仿真工具,可以对设计进行功能仿真、时序仿真和混合信号仿真。
它还提供了调试功能,可帮助您定位和解决问题。
以下是使用ISE的一般步骤:1.创建新工程:在ISE中,您需要先创建一个新的工程,用于存储和组织设计文件。
可以在ISE中创建一个新的工程,并选择适当的目标设备。
2. 添加设计文件:一旦工程创建完成,您可以添加设计文件到工程中。
通过右键单击工程文件夹,并选择“Add Source”来添加设计文件。
选择适当的文件类型,并在文件对话框中选择要添加的文件。
3. 设置约束:在设计过程中,您需要为硬件设计设置约束,以满足特定的要求。
通过右键单击工程文件夹,并选择“Add Constraints”来添加约束文件。
在Vivado下利用Tcl脚本对综合后的网表进行编辑
过程
在ISE下,对综合后的网表进行编辑几乎是不可能的事情,但在Vivado 下成为可能。
Vivado对Tcl的支持,使得Tcl脚本在FPGA设计中有了用武之地。
本文通过一个实例演示如何在Vivado下利用Tcl脚本对综合后的网表进行编辑。
Vivado支持传统的Tcl命令,在此基础上添加了很多自身独有的命令,这些命令可看做是对Tcl命令的进一步扩展。
因此,在Vivado下,图形界面(GUI)方式进行的操作都有相应的Tcl
命令,通常会在Tcl Console中显示出来。
而相反,很多Tcl脚本能做的事情,GUI方式却无法处理,这也说明了Tcl的强大之处,对综合后的网表编辑就是如此。
什幺情况下需要对综合后的网表进行编辑?通常是需要对网表进行微小的改动,比如对高扇出net做寄存器复制或插入BUFG,对logic level较大的路径插入流水寄存器以改善路径延迟,更改待测net等。
需要注意的是,利用Tcl直接编辑网表的意义在于可以无需重新综合以节省综合的时间而直接观察。
Modelsim中常用的Tcl命令Modelsim中常用的Tcl命令:一.执行tcldo ./work/run.tcl二.编译1. vlogvlog testbench.vvlog –work work testbench.v三.启动仿真1. vsimvsim work.testbenchvsim –work work testbench四.将信号加入波形add wave *view wave五.执行仿真1. runrun 1000run –all //run to finishrun // 默认run 100ns六.退出仿真quit -simTcl模板################### ModelSim TCL ########################################### Created by Zhiwei.Liu ############################ Create the Project/Lib ######vlib work# map the library#vmap work work##### Compile the verilog #####vlog testbench.v##### Start Simulation #####vsim work.testbenchadd wave -binary clk rstadd wave -unsigned random c_countrun 990##### Quit the Simulation ###### quit –sim为方便工程管理,我建了三个文件夹来存放工程。
sim:存放批处理文件,modelsim的do文件和存相对路径的文件core:存放源代码data:产生仿真的数据下面开始写批处理文件与do文件1:新建文件,改名为sim.bat在这个文件里输入代码:vsim -do sim.do2.新建文件,改名为path.f在这个文件中输入要仿真的源代码的相对路径:../core/test.v../core/tb.v2.新建sim.do文件,tcl脚本文件,用于控制modelsim仿真输入代码:#带#号为注释部分#建立工作库并映射工作库vlib workvmap work work#编译verilog源代码vlog -f path.f#编译systemc代码vccom -f path.f#连接systemc代码vccom -link#生成波形文件wlfvsim -wlf test.wlf tb#添加信号波形add wave *#开始仿真run 200 ms#结束仿真quit -sim操作流程:直接进入sim文件夹下运行sim.bat文件即可按照上述代码流程控制modelsim。
Vivado之TCL脚本语言基本语法介绍
TCL脚本语言
Tcl(Tool Command Language)是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,而且VIV ADO也提供了TCL命令行。
最近发现TCL脚本貌似比GUI下操作VIV ADO效率高一些,方便一些。
而且最近跟着官网文档做SDSOC的flatform,发现xilinx 官网的文档里都是用TCL命令来完成操作,于是决心学习一下TCL的语法。
应用程序(如VIV ADO)使用Tcl作为它的命令语言的好处:
1 Tcl提供了标准语法,一旦用户掌握了Tcl就可以很容易的发布命令给基于Tcl的程序。
2 Tcl实现了很多的功能,使你的工作变得很方便。
3 TCl可作为程序间通信的接口。
命令格式
一条Tcl的命令串包含了多条命令时,用换行符或分号来隔开
而每一条命令包含了一个域的集合,域使用空白分开的,第一个域是一个命令的名字,其它的是作为参数来传给它
数据类型
Tcl只支持一种数据结构:字符串。
所有的命令、命令里的所有的参数、命令的结果、变量全部都是都是字符串。
简单实例:
set i 123
将123这个字符串赋值给i变量
unset i
清除变量
set i hi
将hi这个字符串赋值给i变量
set i hi hello
hi hello中有空格,所以加引号。
Tcl在Vivado中的基础应用Xilinx的新一代设计套件Vivado相比上一代产品ISE,在运行速度、算法优化和功能整合等很多方面都有了显著地改进。
但是对初学者来说,新的约束语言XDC以及脚本语言Tcl的引入则成为了快速掌握Vivado使用技巧的最大障碍,以至于两年多后的今天,仍有很多用户缺乏升级到Vivado的信心。
本文介绍了Tcl在Vivado中的基础应用,希望起到抛砖引玉的作用,指引使用者在短时间内快速掌握相关技巧,更好地发挥Vivado在FPGA设计中的优势。
Tcl的背景介绍和基础语法Tcl(读作TIckle)诞生于80年代的加州大学伯克利分校,作为一种简单高效可移植性好的脚本语言,目前已经广泛应用在几乎所有的EDA工具中。
Tcl 的最大特点就是其语法格式极其简单甚至可以说僵化,采用纯粹的[命令选项参数] 形式,是名副其实的工具命令语言(即Tcl的全称Tool Command Language)。
实际上Tcl的功能可以很强大,用其编写的程序也可以很复杂,但要在Vivado或大部分其它EDA工具中使用,则只需掌握其中最基本的几个部分。
注:在以下示例中,% 表示Tcl的命令提示符,执行回车后,Tcl会在下一行输出命令执行结果。
// 后是作者所加注释,并不是例子的一部分。
设置变量打印主要通过puts语句来执行,配合特殊符号,直接决定最终输出内容。
文件I/O可以看到Tcl对文件的操作也是通过设置变量,改变属性以及打印命令来进行的。
上述写文件的例子中通过puts命令在my_file.txt文件中写入两行文字,分别为Hello World! 和myVar变量的值,然后在读文件操作中逐行读取同一文件的内容。
控制流和循环命令Tcl语言中用于控制流程和循环的命令与C语言及其它高级语言中相似,包括if、while、for和foreach等等。
具体使用可以参考如下示例:。
tool control language,tcl 编译-概述说明以及解释1.引言1.1 概述概述部分的内容可以在以下方向展开:TCL(Tool Control Language)编译是一种常用的编程语言,特别适用于用于自动化脚本和软件开发中。
本文将对TCL编译进行深入的研究和探讨。
TCL编译是将TCL语言代码转换为可执行的机器码或字节码的过程。
通过编译,可以使TCL代码在执行时更高效、更快速地运行。
TCL编译器将TCL程序转化为机器码或字节码,以便在不同的计算机平台上执行。
本文将首先介绍TCL编译的基本定义和原理。
我们将探讨TCL编译的实现方式,包括语法分析、语义分析和代码生成等步骤。
通过深入理解TCL 编译的原理,我们可以更好地利用该编程语言的特性和优势。
其次,本文将详细讨论TCL编译的应用领域。
TCL编译广泛应用于自动化脚本编写、软件开发和系统管理等领域。
我们将针对不同应用场景,介绍TCL编译的具体应用案例和实践经验。
最后,我们将总结TCL编译的重要性、优势和局限性。
TCL编译能够提高代码执行效率,加快程序运行速度,提升开发效率。
但同时,TCL编译也存在一定的局限性,例如对于大规模和复杂程序的编译支持相对较弱。
我们还将对未来TCL编译的发展进行展望,探讨可能的技术改进和应用拓展。
通过本文的研究,读者可以深入了解TCL编译的概念、原理及其应用领域。
同时,读者也可以更好地理解TCL编译的优势和局限性,并对未来TCL编译的发展方向有所展望。
1.2 文章结构文章结构简要说明了整篇文章的分章节和每个章节的内容概述。
通过清晰的结构,读者可以更好地理解和掌握文章的主题和逻辑。
在本文中,文章结构分为引言、正文和结论三个部分。
引言部分主要包括概述、文章结构和目的三个小节。
其中,概述介绍了TCL编译的基本概念和主要内容;文章结构部分则给出了整篇文章的目录结构,方便读者了解各个章节的内容;目的部分则明确了本文的写作目标,即探讨TCL编译的定义、原理、应用以及其重要性、优势和展望。
Tcl 在Vivado 中的应用Xilinx©的新一代设计套件Vivado 相比上一代产品ISE ,在运行速度、算法优化和功能整合等很多方面都有了显著地改进。
但是对初学者来说,新的约束语言XDC 以及脚本语言Tcl 的引入则成为了快速掌握Vivado 使用技巧的最大障碍,以至于两年多后的今天,仍有很多用户缺乏升级到Vivado 的信心。
本文介绍了Tcl 在Vivado 中的基础应用,希望起到抛砖引玉的作用,指引使用者在短时间内快速掌握相关技巧,更好地发挥Vivado 在FPGA 设计中的优势。
Tcl 的背景介绍和基础语法Tcl (读作tickle )诞生于80年代的加州大学伯克利分校,作为一种简单高效可移植性好的脚本语言,目前已经广泛应用在几乎所有的EDA 工具中。
Tcl 的最大特点就是其语法格式极其简单甚至可以说僵化,采用纯粹的 [命令 选项 参数] 形式,是名副其实的“工具命令语言”( 即Tcl 的全称Tool Command Language )。
实际上Tcl 的功能可以很强大,用其编写的程序也可以很复杂,但要在Vivado 或大部分其它EDA 工具中使用,则只需掌握其中最基本的几个部分。
注: 在以下示例中,% 表示Tcl 的命令提示符,执行回车后,Tcl 会在下一行输出命令执行结果。
// 后是作者所加注释,并不是例子的一部分。
设置变量打印打印主要通过puts 语句来执行,配合特殊符号,直接决定最终输出内容。
% set myVar "Hello World!" //设置一个名为myVar 的变量,其值为Hello World!% puts $myVar Hello World! % puts "Hello World!" Hello World!% puts myVar myVar % puts {$myVar} $myVar% puts "\$myVar" $myVar文件I/O写文件读文件可以看到Tcl 对文件的操作也是通过设置变量,改变属性以及打印命令来进行的。
vivado tcl语句-回复题目:“Vivado TCL语句”- 简介、语法和常用命令引言:Vivado是美国赛灵思公司(Xilinx)推出的一款集成电路设计和验证软件。
随着FPGA(现场可编程门阵列)技术的广泛应用,越来越多的工程师开始使用Vivado进行硬件设计和开发。
而TCL(Tool Command Language)则是在Vivado中进行编程和操作的一种脚本语言。
本文将详细介绍Vivado TCL语句的基础知识、语法和常用命令,供读者参考和学习。
第一部分:Vivado TCL语句的概述Vivado TCL语句是一组被Vivado软件接受的命令,用于执行各种硬件设计和验证任务。
与其他编程语言不同的是,TCL是一种解释性语言,可以直接在Vivado的命令行界面中输入和执行。
通过TCL语句,我们可以控制和操作Vivado软件来完成诸如工程建立、综合、实现、验证和仿真等任务。
第二部分:Vivado TCL语句的语法TCL语句由一系列命令组成,每个命令由关键字和参数组成。
以下是一个基本的TCL语句的语法结构:<command> <arg1> <arg2> ... <argN>其中,`<command>`表示命令的关键字,`<arg1> <arg2> ... <argN>`表示命令的参数,可以有零个或多个。
TCL语句还支持变量和表达式,可以使用`set`命令来定义和修改变量的值,使用`expr`命令来进行数学计算和逻辑运算。
例如:set variable_name valueset result [expr 2 + 3]此外,TCL还支持条件语句(如`if-else`)、循环语句(如`for`、`while`)和函数等高级语法结构,以实现更复杂的控制逻辑和功能。
第三部分:常用的Vivado TCL命令1. `open_project`: 打开一个工程文件。
Vivado之TCL脚本语言基本语法介绍TCL脚本语言Tcl(Tool Command Language)是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,而且VIV ADO也提供了TCL命令行。
最近发现TCL脚本貌似比GUI下操作VIV ADO效率高一些,方便一些。
而且最近跟着官网文档做SDSOC的flatform,发现xilinx 官网的文档里都是用TCL命令来完成操作,于是决心学习一下TCL的语法。
应用程序(如VIV ADO)使用Tcl作为它的命令语言的好处:1 Tcl提供了标准语法,一旦用户掌握了Tcl就可以很容易的发布命令给基于Tcl的程序。
2 Tcl实现了很多的功能,使你的工作变得很方便。
3 TCl可作为程序间通信的接口。
命令格式一条Tcl的命令串包含了多条命令时,用换行符或分号来隔开而每一条命令包含了一个域的集合,域使用空白分开的,第一个域是一个命令的名字,其它的是作为参数来传给它数据类型Tcl只支持一种数据结构:字符串。
所有的命令、命令里的所有的参数、命令的结果、变量全部都是都是字符串。
简单实例:set i 123将123这个字符串赋值给i变量unset i清除变量set i hi将hi这个字符串赋值给i变量set i hi hellohi hello中有空格,所以加引号set i 123;#开始注释注意注释前,要先用分号,把命令结束掉,或者换行注释基本语法和基础命令在VIV ADO中的TCL命令行里,学习这些基本语法(Windows下》开始》所有程序》Xilinx Design Tools 》Vivado xxx 》Vivado xxx Tcl Shell)1》使用$符号引用变量其中puts是打印命令2》使用[]将命令返回值,作为新命令的参数set j 232命令会返回值232新命令就成了set i 232这里稍微复杂一点点的例子:set i a[set j b][set k c]最后的结果就是:j=b ; k=c ; i=abc3》数组数组不需要声明,直接赋值即可,也不必按照顺序来:set i(1)123 ; set i(16)hi当然也支持任意维数的数组:set i(1,2,3)hi引用的时候直接$i(1,2,3)即可parray命令可以打印出一个数组的全部信息:array命令命令格式:array opTIon arrayNameopTIon 是操作选项,有如下可选:name :返回数组的所有元素的名称size :返回数组的长度startsearch :初始化一次遍历,返回一个遍历标识符(searchId),这个searchId在下面用到,(是可以多个遍历同时进行的)下面的命令格式为:array opTIon arrayName searchId-》nextelement :返回数组中下一个元素,如果没有返回空-》anymore :如果接下来还有元素,返回1,否则返回0-》donesearch :结束遍历4》字符串命令string命令命令格式:string opTIon string1 string2option 是操作选项,有如下可选:compare :按照字母的排序方式比较,string1 《,=,》string2,分别返回-1,0,1 match :判断string1和string2是否匹配first :检索string2中第一次出现string1的位置,如果没有出现string1则返回-1last :和first相反trim :从string1中删除开头和结尾的,string2的字符命令格式:string option stringtolower :返回string中的所有字符被转换为小写字符后的新字符串toupper :返回string中的所有字符串转换为大写后的字符串trimleft :,去除string左空白,类似的还有trimrightlength :返回string1的长度range :string range abcdef 1 2,返回输出结果为bcappend命令字符串追加,可以无限拼接set i aappend i b c dputs $ii变量的值就成了abcd,注意append i b c d命令,而不是append $i b c dsplit命令除此之外,expr还能够识别一些函数及其返回值:abs(x)、round(x)、sin(x)、cos(x)等使用方法:expr 表达式6》list列表类似python中的列表,比如:{abc {def {jkl ccc}}}是一个有两个元素的列表abc和{def {jkl ccc}},Tcl中对list的命令有:(首先set l {abc {def {jkl ccc}}},下面实例中将对这个l列表进行操作)需要注意的是:大部分命令都是对$l进行处理,也把就是l的内容字符串取出来,再处理,并不会对l列表的内容造成影响需要注意的是lappend命令,lappend $l abcd是无效的,必须lappend l abcd才能实现列表内容的更新,而且是直接更改列表的内容7》proc自定义函数proc:proc hello {str} {puts hello:$str}需要注意的是,如果不能一行写完,那建议按照如下格式来定义(主要是要将{放到第一行的末尾):第一行:proc+(空格)+函数名+(空格)+{参数}+(空格)+{中间行:逻辑运算最后行:}全局变量global:用于将过程中的局部变量变成外界可操作的全局变量proc hello {} {global xset x hiset i hello}上述代码,执行结果:return命令:proc hello {} {return world}set i [hello]return命令没啥好说的,上述代码的结果是,将i变量赋值为world字符串8》流控制if 流控制这个同样建议按照格式来:第一行:if+(空格)+{表达式}+(空格)+{中间行:逻辑运算第N行:}+(空格)+else+(空格)+{中间行:逻辑运算最后行:}switch流控制例子如下,一目了然:switch 2 {1 {puts 111}2 {puts 222}3 {puts 333}default {puts xxx}}case流控制case abcd in a {puts 111} *bc* {puts 333} default {puts xxx}上述程序对字符串abcd进行判断:条件一:字符串为a条件二:不管字符串的前后字符是啥,只要中间有bc子字符串即可条件三:default9》循环控制foreach循环:假如想要将0,3,2,1按照顺序分别放到上述switch的判决条件(列表)里,输出四个结果,那就需要这个foreach了:foreach i {0 3 2 1} {switch $i {1 {puts 111}2 {puts 222}3 {puts 333}default {puts xxx}}}for循环:TCL的for循环也是很类似C语言的:for {set i 0} {$i 《10} {incr i} {puts $i}初始化i=0,范围i《10 ,循环i=i+1while循环:set i 10while {$i!=5} {puts $iincr i -1}运行的结果,自己就可以想象了10》字符串转为命令eval命令:set a set ; set b i ; set c hello ; eval $a $b $c上述代码就等效于:set i helloeval将字符串的内容,作为命令,执行11》打印输出之前的那个puts命令也是可以打印到命令行,但是,也只是能打印出来而已,而这个format 类似于C中的sprintf(用于格式化输出):format命令:format可以这样用:format %s %d hello 666set i [format %s %d hello 666]scan命令:说到format,刚好一起把scan说了,这两个命令可以看做是相反的一对,前者组合成字符串,后者把字符串拆分后赋值给变量scan 12.34.56.78 %d.%d.%d.%d a b c d将12.34.56.78拆分,并分别赋值给a b c d四个变量,命令返回赋值成功的变量的个数puts命令:puts当然也可以打印到文件中set f [open test.txt w]puts -nonewline $f hello\nputs $f worldclose $fputs -nonewline $f hello\n表示的是强制不换行打印,否则自动追加一个换行符文件系统基本常用操作:gets 》一次读一行文件puts 》写入文件open 》打开文件close 》关闭文件flush 》刷新缓冲区cd命令和shell中的cd一样pwd命令用于查看当前所在的目录open命令打开文件,返回文件描述符命令格式:open 文件名模式,支持6种模式,和其他编程语言中的文件IO,也是很相似的,模式如下:r 模式:打开只读文件(文件必须存在)r+ 模式:打开可读写文件[r+和a+模式可以类比]w 模式:打开只写文件,若文件存在则清空内容;若文件不存在则创建文件。
使用TCL脚本可以极大地提高ISE的工作效率,省去了很多手动的鼠标点击,你只要编辑好相关的Verilog/VHDL源文件和UCF文件即可,然后运行一下.tcl文件就可以等着看结果了。
下面简要说明:
第一步:新建工程文件夹,将编写好的Verilog/VHDL源文件和UCF文件及TCL文件(编写方法见下文)放入文件夹中
第二步:打开ISE,单击ISE信息提示栏中的Tcl Console,在Command栏键入pwd,查看当前目录,然后键入cd命令进入到你新建的工程文件夹,例如:cd D:/new
第三步:运行tcl脚本文件,键入source new.tcl(假设你的.tcl文件名为new.tcl),剩下的工作就是等待了,脚本运行完后会生成bit文件
下面大致讲一下Xilinx下tcl脚本文件的编写,首先新建一个文本文件,保存为.tcl格式,将下面的内容复制进文本文件,照着修改就行了要深入学习TCL建议看Xilinx的相关文档,还有华为TCL培训教程等
project new my_proj1.ise;# 新建工程
project set family spartan3e;# 选择器件
project set device xc3s500e
project set package fg320
project set speed -4
##################################################################### ##########
# 添加源文件
##################################################################### ##########
puts "Adding Source Files..."
xfile add di.vhd;# 添加.vhd文件
xfile add ce.vhd;# 添加.vhd文件
xfile add top.ucf;# 添加.ucf文件
##################################################################### ##########
# 设置实现选项,可根据需要自己修改
##################################################################### ##########
puts "Setting Project Properties..."
project set "custom compile file list" "fpga_b.prj"
project set "Optimization Effort" High
project set "Cores Search Directories" ../src
project set "Read Cores" true ;# default is true, don't need to set project set "Macro Search Path" ../src
project set "Map Effort Level" High
project set "Perform Timing-Driven Packing and Placement" 1
project set "Place & Route Effort Level (Overall)" High
# Do not generate the default post place static timing report
project set "generate post-place & route static timing report" false
##################################################################### ##########
# 运行设计
##################################################################### ##########
process run "Implement Design";# 运行Implement Design
puts "Implement design done"
process run "Generate Programming File";# 生成bit文件
puts "Bit file ready!"
#project close;# 如需关闭本工程,把本行前面的#去掉
#puts "project closed!"。