首页›行业资讯›FPGA向导信赖的TCL
← 返回行业资讯
技术教程

FPGA向导信赖的TCL

FPGARelated ·
探讨TCL脚本在FPGA开发中的重要作用与应用技巧。
本文为原文全文的中文翻译(约 3425 字),原文配图已同步至站内;机器翻译仅供快速阅读,细节请以原文为准。

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邮箱地址存在问题。如果您输入这些提供商之一的邮箱地址,您将无法确认您的邮箱地址并使用本网站的功能。

阅读原文 →
来源:FPGARelated

本页摘要由 AI 辅助整理,经编辑审核后发布;AI 仅用于提炼与分类,原文均附来源链接。