Vivado开发工具的使用之前已经有了比较多的了解,在建立工程图形化界面操作这里已经不存在什么问题,不论是IP核,embedded system(block design),还是添加约束,编译流程,流程已经打通了。
但是在实际工程移植过程中,发现Vivado开发中最不一样的地方还是约束这里,这里把约束相关的一些与ISE不同的地方,和Vivado新增加的关于约束的工具总结一下。
1,vivado约束文件参考ug903-vivado-using-constraints,这里有详细关于约束规则,原理,语法的介绍;
2,vivado约束采用xdc约束文件,这里的语法其实是和TCL语法一致,这个语法详见UG903手册;
3,vivado约束和ISE不同,ISE主要是针对net和inst进行约束,而xdc中,分成get_pins,get_cells,get_ports,get_clocks,这里get_cells和ISE里面的inst类似,而在进行时序例外约束的时候多用的是get_pins(其实就是一个实例中的管脚定义,也包括底层原件的管脚,比如寄存器)。在使用通配符匹配路径的时候,最好使用edit timing constraints图形界面配合。
4,vivado时序约束是最有变化的,和ISE最大不同的是ISE中对于跨时钟路径都是默认不分析的,但是对于vivado,所有的路径其实都是进行分析的,同步时钟会进行分析(比如PLL或者MMCM输出时钟,相位关系确定),而且异步时钟如果不加异步时钟约束也会按照同步时钟那样进行时序分析,在时序报告中other path groups里面的async_default中就都是异步时钟跨时钟路径。这时候就需要很全面的对时钟域有很全面很清楚的认识,这个vivado有可以利用的工具,后面会介绍;
5,vivado关于时序约束的工具介绍:
1)edit timing constraints,这个就跟ISE中的一致,其实就是一个图形化添加约束的接口,可以用图形界面将约束的tcl命令转化出来,主要作用是在用通配符匹配路径的时候可以配合使用;
2)report timing constraints,这个就是最后时序分析的报告,这里面主要由三项,首先intra-clock paths是单时钟约束,其次inter-clock paths,这个是同步时钟的跨时钟路径,最后就是other path group,这里面的async_default就是异步时钟的跨时钟路径。
这里点击时序不达标的路径,然后右键可以直接添加约束,set_false_path,set_max_delay等,这时候约束会加到edit timing constraints里面,然后添加到xdc约束文件中,这个对应的约束文件就是constraints里面标注target的文件(可修改target)。
此外,在report timing constraints里面的路径双击可以在device页面看到类似plan ahead里面的实际在芯片中的路径,此外还有Path xxx - timing_1页面会列出详细的souce clock data path destination clock,以及对应的延时。
3)report clock interaction,这个工具就是解决前面说的vivado分析跨时钟域路径的问题,这个工具会以一个表格的形式列出所有时钟域对应关系以及是否有约束,如下图,方便对所有时钟域有一个完整的认识,而且可以看到那个跨时钟路径没有被约束可能存在问题。
这里对于vivado约束方面关于跨时钟(CDC)约束的技巧,看到一篇比较好的文章【Vivado使用误区与进阶】XDC约束技巧——CDC篇,可供参考。
本文地址:https://www.huajie.net.cn/qkl/44938.html