





FPGA向导信赖的TCL
TCL(工具命令语言)是FPGA向导首选的瑞士军刀。要么学会它,要么被时代抛在后面,但它究竟是什么,又该如何掌握它呢?
正如所有伟大名字的寓意一样,答案就在名字之中。在这里,TCL是一种用语言来驾驭工具的工具。它是一种与工具进行程序化交互的方式,而非那种常常以挫败感告终、令人忍不住爆粗口的点击式操作。
但为什么我们要回到70年代?命令行难道不是70年代的风潮吗?因为每一个工具(TCL本身也是其中之一)都有其用武之地,在FPGA的语境下,它解决了大量痛点,尤其是在以可复现的方式构建和测试项目方面,而且比令人沮丧、极易出错的疯狂鼠标点击要快上几个数量级。
那么让我们直接上手,用一个简单的TCL脚本为Xilinx xc7a35tcpg236-1 FPGA创建一个项目,包含一组源文件和约束文件,随后执行综合与实现步骤:
我们可以分步来完成,先从项目名称和目录结构开始:
# 设置用于相对路径的参考目录 set origin_dir "." set project_name "example_project" # 设置新工程的目录路径 set proj_dir [file join $origin_dir $project_name] # 创建工程并设置器件型号 create_project $project_name $proj_dir -part xc7a35tcpg236-1 # 设置新工程的目录路径 set proj_dir [get_property directory [current_project]] 到目前为止还不算太糟,对吧?只不过是多了一些以指令形式出现的语法糖而已。
从这里我们可以定义设计和仿真语言(本例中为 VHDL/Verilog):
set obj [current_project] set_property -name "default_lib" -value "xil_defaultlib" -objects $obj set_property -name "simulator_language" -value "VHDL" -objects $obj set_property -name "target_language" -value "VHDL" -objects $obj 我们已将默认库选为 xil_defaultlib,并将仿真器和设计语言均选为 VHDL。接下来我们可以把设计文件和约束文件一并纳入:
# 创建 'sources_1' 文件集(如果未找到) if {[string equal [get_filesets -quiet sources_1] ""]} { create_fileset -srcset sources_1 } # 添加 HDL 源文件 add_files -norecurse -fileset [get_filesets sources_1] [list \ "[file normalize "$origin_dir/src/top.vhd"]"\ "[file normalize "$origin_dir/src/ip_core.vhd"]"\ ] # 设置 'sources_1' 文件集属性 set obj [get_filesets sources_1] # 将“顶层”文件指定为 top.vhd set_property -name "top" -value "top" -objects $obj # 创建 'constrs_1' 文件集 if {[string equal [get_filesets -quiet constrs_1] ""]} { create_fileset -constrset constrs_1 } # 添加约束文件 add_files -fileset constrs_1 [list \ "[file normalize "$origin_dir/constrs/constraints.xdc"]"\ ] # 创建 'sim_1' 文件集 if {[string equal [get_filesets -quiet sim_1] ""]} { create_fileset -simset sim_1 } # 添加仿真文件 add_files -fileset sim_1 -norecurse [list \ "[file normalize "$origin_dir/sim/top_tb.vhd"]"\ "[file normalize "$origin_dir/sim/ip_core_tb.vhd"]"\ ] # 设置 'sim_1' 文件集属性 set obj [get_filesets sim_1] set_property -name "top" -value "testbench" -objects $ob 最后,我们可以保存项目(丢失所有辛勤工作的成果就太可惜了),随后进行综合、实现和比特流生成步骤,以及打开我们已实现的设计:
# 保存工程 save_project_as $project_name $proj_dir -force puts “工程已创建:$project_name” # 运行综合 puts “正在运行综合...” launch_runs synth_1 -jobs 8 wait_on_run synth_1 # 运行实现 puts “正在运行实现...” launch_runs impl_1 -jobs 8 wait_on_run impl_1 # 生成比特流 puts “正在生成比特流...” launch_runs impl_1 -to_step write_bitstream -jobs 8 wait_on_run impl_1 puts “综合、实现和比特流生成已完成。” # 打开实现后的设计 open_run impl_1 注意上述命令中的 -jobs 参数,它表示该步骤中使用的核心数。可根据您的机器配置酌情修改。
以上是一个非常简单的示例,类似地我们也可以编写一些测试平台相关的内容:
# 运行仿真 puts “正在运行仿真...” launch_simulation run all # 打开波形窗口 puts “正在打开波形查看器...” open_wave_config # 向波形窗口添加信号 add_wave {{/testbench/dut}} # 根据需要添加更多信号,例如: # add_wave {{/testbench/dut/sub_module_inst}} # 重新运行仿真以填充波形 run all 可以想象将上述内容应用于在 Jenkins 等平台上运行的自动化流水线,这些流水线由分支上的提交触发。
您可能还喜欢
Tcl 的美妙之处在于讨论它的网站非常少,因此网络搜索通常会返回权威结果。
要对某条评论进行回复,请点击每条评论附带的“reply”按钮。要发表新评论(而非回复某条评论),请查看评论顶部的“Write a Comment”选项卡。
如果您已在本平台拥有账户,请(在右侧)登录。
否则,请使用此表单免费注册,并加入最大的电子/嵌入式/DSP/FPGA/机器学习工程师在线社区之一:
每天都有数百名垃圾信息发送者试图在本平台创建账户,企图滥用论坛和评论区。
我们发现,确保只有合法用户被接纳的唯一有效方法,是要求新用户输入并确认其工作、学校或IEEE邮箱地址。
关于GLENN Kirilow
我是一名嵌入式系统顾问和技术撰稿人,专注于FPGA/ASIC和嵌入式软件,拥有超过14年的行业经验。
GLENN Kirilow的热门文章
博客 - 名人堂
VHDL教程系列 Gene Breniman
FPGA的工作原理以及您为何会购买一块 Yossi Krenin
MyHDL FPGA教程(LED频闪) Christopher Felton
微控制器入门 Mike Silva
免费PDF下载
关于FPGARelated.com
社交网络
相关网站
请注意,目前hotmail/outlook/msn邮箱地址存在问题。如果您输入这些提供商之一的邮箱地址,您将无法确认您的邮箱地址并使用本网站的功能。
本页摘要由 AI 辅助整理,经编辑审核后发布;AI 仅用于提炼与分类,原文均附来源链接。