Tcl(Tool CommandLanguage)是IC业界标准程序语言。Xilinx将其集成于Vivado中,使得Vivado如虎添翼。通常,凡是借助图形界面可实现的操作都有其对应的Tcl脚本;相反,借助Tcl脚本实现更复杂、更深入的分析或操作是图形界面方式无法实现的。
就Vivado而言,采用Tcl脚本时(本质上,XDC是Tcl的一个子集)需要明确操作对象。这里介绍几个最基本的操作对象:cell, pin, net和port。如下图所示。
从图中不难看出,cell就是基本的模块,可以是Verilog中的module或VHDL中的entity,或者综合后的更细粒度的逻辑单元,比如触发器(Flip Flop)、查找表(LUT)、进位链(Carry chain)。每个cell都有自己的pin,pin是有方向的。cell之间通过net相连。顶层设计中,需要给输入/输出端口(port)分配管脚(package pin),这里就体现了pin与port的区别。package pin必然位于IO bank之中。
那么是不是只有顶层设计才有port呢?其实port和pin是相对的,例如:描述约束时,指定该约束文件的作用域(SCOPED_TO_CELLS或SCOPED_TO_REF)是某个cell,此时就可以把这个cell当作顶层来看待,这时就要把cell的输入/输出端口当作port来处理。