[X]关闭
1

米联客(MSXBO)基于VIVADO FPGA时序笔记之时钟(二)

摘要: 1.1概述数字设计中,“时钟”表示在寄存器间可靠地传输数据所需的参考时间。Vivado的时序引擎通过时钟特征来计算时序路径需求,通过计算裕量(Slack)的方法报告设计时序空余。时钟必须有合适的定义,包含如下特性: ...

1.1概述

数字设计中,“时钟”表示在寄存器间可靠地传输数据所需的参考时间。Vivado的时序引擎通过时钟特征来计算时序路径需求,通过计算裕量(Slack)的方法报告设计时序空余。时钟必须有合适的定义,包含如下特性:

1)、定义时钟树的驱动管脚或端口,通常称作根或源点。

2)、通过周期和波形属性来描述时钟边沿。

3)、周期(period)以ns为单位进行设定,与波形重复率相关。

4)、波形(waveform)以列表的形式给出,表中包含上升沿和下降沿在周期中的绝对时间,以ns为单位。

 

如下图给出了两个时钟

Clk0: period=10, waveform={0 5}

Clk1: period=8, waveform = {2 8}

上述给出的只是时钟的理想特征,实际上当时钟通过外部的晶振或者芯片时钟,通过FPGA的管脚进入FPGA内部逻辑,时钟会产生延迟、飘逸、抖动、失真等现象,所以在硬件设计和软件设计上都必须考虑时钟的影响。

1)、应该增加时钟的稳定性,减少抖动和失真,在一些工业场合还要考虑温度导致的时钟偏移;

2)、高频的时钟应该走专用的FPGA时钟管脚

3)、异步时钟传输数据需要正确采取跨时钟域的解决办法

4)、使用VIVADO软件进行正确的时序约束设计

 

1.2主时钟Primary Clock

主时钟通常由两个来源:

1)、板级时钟通过输入端口进入设计;

2)、GT收发器的输出管脚(如恢复时钟)。主时钟必须与一个网表对象相连,该对象代表了所有时钟边沿的开始点,并且在时钟树中向下传递。也可以说,主时钟的源点定义了0时刻,Vivado靠此来计算时钟延迟和不确定性。

 

主时钟只能通过create_clock命令来定义,且必须放在约束的开始,这是因为其它时序约束几乎都要参考主时钟。下面给出两个主时钟的例子。第一个例子如下图所示,采用单端时钟输入:

如上图,板级时钟通过sysclk端口进入FPGA,通过一个输入缓冲器和一个时钟缓冲器后到达寄存器。下面是一些常用的时钟约束定义方法:

 

1)、定义一个周围为10ns,占空比50%,无相移的时钟

create_clock –name sysclk -period 10 [get_ports sysclk]  #10ns周期,,

2)、定义一个板级时钟devclk,周期10ns,占空比25%相移90°。

create_clock -name devclk -period 10 -wavefor {2.5 5} [get_ports sysclk]

3)、GTP/GTX恢复时钟

高速通信GTP/GTX的时钟是来自于恢复时钟,对于初学者来说可能还不清楚什么是恢复时钟,在做光通信部分的例子就知道了。光通信1条数据通道,可以从1条数据通道中恢复出来传输的时钟,然后用这个时钟同步用户数据就不会出错了。在GT0的引脚上定义rxclk时,gt0 / RXOUTCLK就是由MMCM驱动的所有生成的时钟的时钟源点,

create_clock -name rxclk -period 3.33 [get_pins gt0/RXOUTCLK]

4)、采用差分时钟输入只要约束P端就可以

create_clock -name sysclk -period 3.33 [get_ports SYS_CLK_clk_p]

上图中差分时钟驱动一个PLL,差分时钟输入通过IBUFDS转为单端进入CLKIN1。如果同时创建了P和N端输入,将会导致错误的CDC路径。

1.3虚拟时钟Virtual Clock

虚拟时钟通常用于设定输入和输出的延迟约束。之所以称为“虚拟”,是因为这种时钟在物理上没有与设计中的任何网表对象相连。定义时使用create_clock命令,但无需指定源对象。使用虚拟时钟在设置IO delay约束的时候可以简化我们的代码量,增加可读性,这个在我们最后分析udp通信RGMII时序约束中会用到。

下列情况需要用到虚拟时钟:

1)、所有设计时钟都不是外部器件I/O的参考时钟。

2)、FPGA的I/O路径与一个内部生成的时钟相关,但是该时钟不能合适地通过对板级时钟计时来生成(如两个周期的比不是整数)。

3)、希望为与I/O延迟约束相关的时钟设定不同的抖动和延迟,但是不希望修改内部时钟的特征。

比如时钟clk_virt的周期为10ns,且不与任何网表对象相连,可以这样定义:

create_clock -name clk_virt –period 10

没有指定objects参数。注意,虚拟时钟必须在使用之前便定义好。

        

虚拟机时钟的应用

1)、用于IO延迟案例1

create_clock -name clk –period 10 [get_ports clkin]

6

路过

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (6 人)

发表评论

最新评论

引用 I'mpossible 2020-4-1 16:28
感谢分享

查看全部评论(1)

本文作者
2019-10-20 22:50
  • 7
    粉丝
  • 4773
    阅读
  • 1
    回复

关注米联客

扫描关注,了解最新资讯

联系人:汤经理
电话:0519-80699907
EMAIL:270682667@qq.com
地址:常州溧阳市天目云谷3号楼北楼201B
相关分类
热门评论
排行榜