添加IP repo的方法:
工程打开后->Flow Navigator->PROJECT MANAGER->Settings->IP->Repository->IP Repositories->点击加号->选中IP所在的目录(可以选上级目录,它会自动查找子目录IP)->OK->OK;即可被Vivado的IP Catalog使用。
建议看本文前,先阅读Vivado IP Integrator: Using TTCL
本文设计一个IP,它具有以下功能:
- 它有32bit位宽;
- 每次综合生成的值不一样,但可以追溯这个值;
本次设计平台:Vivado2017.2 @ Windows7 x64;
第一步打开Vivado,建立一个Dummy工程;
第二步,建立一个空目录,在目录内建立以下几个文件:
-
top_wrapper.v
module top_wrapper(output [31:0] data);
top inst(.data(data));
endmodule
-
fpgabuild.ttcl
<: set ComponentName [getComponentNameString] :>
<: setFileName [ttcl_string_concat [getComponentNameString] "_TOP"] :>
<: setFileExtension ".v":>
<: setOutputDirectory [getComponentNameString] :>
<: set curtime [format "%-16x" [clock seconds]]:>
module top #(
parameter WIDTH = 32
)(
output [WIDTH-1:0] out
);
<: puts "Hello" :>
assign out = 'h<=: $curtime :>;
<: puts "Hello" :>
endmodule
第三步,使用创建IP的第三种方法创建IP
Directory为top_wrapper.v和fpgabuild.ttcl所在的目录;
在之前
上述图的Project name可以随意,Project location选一个空目录;
第四步,点击Package IP即可。欲知效果,可以添加IP,使用generate一下即可。
下面介绍fpgabuild.tcl
<:tcl语句:>:此刻执行tcl 8.5的支持语法,并包括一些vivado的扩展;
<=:tcl变量引用:>:此语句只允许变量,如需要复杂语句,可先使用上面的语法将计算值赋予一个新变量,再使用本语句;
ttcl内可以使用puts函数进行打印调试;下面是ttcl生成的verilog:
module top #(
parameter WIDTH = 32
)(
output [WIDTH-1:0] out
);
assign out = 'h5f12a680 ;
endmodule