干货满满的高老师微信公众号
- 所有源文件存放在<prj_dir>/src文件夹中
- 约束文件:<prj_dir>/src/cons
- verilog代码存放在<prj_dir>/src/rtl中
- ip生成脚本存放在<prj_dir>/src/ip_scripts中
- 已经生成好的或者复制于其它地方的ip存放在<prj_dir>/src/ips中,每个文件夹代表一个ip
- 所有工程运行tcl脚本存放在<prj_dir>/Prj_Tcl中
- 一些pdf和参考、笔记存放在<prj_dir>/docs中
在使用上述默认目录结构时及默认的脚本时,必须根据你自己的FPGA工程修改的参数有
-
顶层module名:修改
run_set_env.tcl
中的top变量为你的顶层module名 -
verilog header文件:修改
run_set_env.tcl
中的列表变量HeaderFileSet
,以空格分隔,每个名字是一个Header文件。如果你的源文件中使用了include
选项,则必须执行这一步,显式地将这些文件的file type设置为verilog header,若没有include文件,{}
内容直接留空即可 -
ip的生成:
-
如果ip要通过脚本生成,那么将生成ip的脚本放入<prj_dir>/src/ip_scripts中,然后执行
source ./Prj_Tcl/run_set_env.tcl source ./Prj_Tcl/run_ip_gen.tcl
- 使用脚本生成生成ip时可以选择以OOC方式先行综合ip,取消注释
run_ip_gen.tcl
中下图代码即可。工程综合时默认也会OOC综合ip,所以这一步可选,默认关闭
- 也可以在读取verilog源代码之后,手动使用
create_ip
命令自行添加,脚本熟练完全可以自行任意修改
- 创建工程文件夹<prj_dir>,复制Prj_Tcl文件夹到<prj_dir>中
- 打开vivado,在下方Tcl Console中输入
# <prj_dir>是你自己的目录路径
cd <prj_dir>
# 输入pwd确认是否所在目录是否正确
pwd
- (可选)创建文件目录,也可以手动创建,省略这一步
source ./Prj_Tcl/run_create_dirs.tcl
-
将verilog源代码放入
<prj_dir>/src/rtl
,约束文件放入<prj_dir>/src/cons
,ip根据已生成或者使用脚本两种情况,参照必须修改的选项中ip的添加方法。 -
源文件添加完成之后
source ./Prj_Tcl/run_set_env.tcl
source ./Prj_Tcl/run_prj.tcl
- 除了工程初始化,其后如果修改了源文件或者需要单独执行综合、布局布线、生成bit,可单独source相应的脚本,脚本功能如名
- 相关文件路径与工程属性变量设置位于
run_set_env.tcl
中,如果执行tcl命令中出现变量未定义或者文件路径找不到可单独执行
source ./Prj_Tcl/run_set_env.tcl
- 来自高老师的源码
解决了以下问题
- glob无法递归获取子文件夹中的文件
- read_verilog不能自动识别Verilog Header
- 文件夹需要提前创建,否则综合报dcp写入权限错误
- 对一些功能进行了拆分,创建了不同的tcl脚本
- 撰写了脚本介绍和使用教程
V0.3 2021-11-21
- 改变了ip生成的方式,工程运行时只会去读取ip,ip必须要单独生成或者复制已存在的