赞
踩
时钟约束和物理约束一般分为2个文件一目了然。
约束的属性告诉我们约束使用在综合还是实现。时序约束一般在综合和实现都需要用到,物理约束一般应用于实现。
primary clock来自端口或者gigabit传输器输出。
生成时钟包括用户分频时钟和pll/MMCM/BUFR生成的时钟。其中后者生成的时钟无须约束,只需要约束输入即可。
注意自动生成的时钟名字一般就是输出net的名字,比如上图的cpuclk。
注意上图get_pins 指向的是mmcm的pin,而不是bufg的pin;同样get_nets也指的是mmcm相连的nets。
pll的时钟重新命名后,命名的是bufg的名字和输入时钟的命令,而不是mmcm相连的net的名字。
时钟重命名的好处是:1.简化了vivado自动生成的时钟名字的繁琐,可以看到重新命名后相比较上一副图clk名字有clk_rx_clk_core变为clk_rx,clk_tx同理。2.如果我们在约束时,如果要引用这个时钟,直接写get_clocks clk_rx,不用想之前那么复杂写一串子路径get_clocks -of object [get_pins xxxx/xxx/xxxx]。
时钟的分组:同步时钟、异步时钟、不可扩展时钟
clk0和clka是同步时钟;同理clk0和clkb是同步时钟。clka、clkb、clkc、clkd也是同步时钟。因为他们共享时钟源。
不可扩展的时钟
比如上图clk0的周期是6ns;clk1的周期是4ns。第一条红线表示的意思是从clk0的0时刻发送数据,在clk1 的4时刻接收数据,建立时间为4ns;第二天红线表示从clk0的6时刻发送数据到clk1的8时刻接收数据,建立时间是2ns。他们的公共最小周期是12ns,对于软件来说他们的建立时间就是这两种情况。但是对于时钟1周期是5.125ns,时钟2的周期是6.666ns,这两个时钟没有公用周期,建立时间无法可知,软件会进行1000个时钟周期分析,当分析后无法确定公共时钟周期,也就是无法确定发送沿和捕获沿的时钟关系,软件会按0.01ns做建立时间分析,显然不合理,所以在设计的时候要注意不要出现跨时钟域的情况。
异步时钟约束
两个来自不同的时钟源产生的时钟,要告诉软件是异步时钟。上图异步时钟组的名字可以忽略。
**默认情况下,vivado均会认为所有的时钟都是同步的。如果一个项目有多个锁相环,锁相环输入来自两个不同的晶振,两个锁相环输出的时钟是异步时钟,要告诉软件是异步时钟,vivado不进行分析时钟关系。**告诉软件的方法,通过2个命令,一个是set_clock_groups,一个是set_falus命令,前者是双向的,后者是单向的。
独立时钟组
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。