vivado 时序分析1 2
作者:互联网
对于FPGA的工具来讲,未知的是你设置的时钟频率
寄存器与寄存器之间的时序分析占整个设计里边的60%或以上 还有一部分是I/O部分的时序分析
知道信号是如何传递的,分析又有何意义
理想 时钟和数据同时到达,则保持时间为0,沿打沿现象。建立时间为整个时钟周期,保持时间出现违例。比如说在modulsim里仿真就是这种现象。但在实际电路里是带有延迟的
理想情况下 采样沿与数据起始沿对齐,即保持时间为最大值,在这种情况下我们认为delay最大,称为沿打沿现象,边沿跟边沿碰上了。建立时间违例。
我们希望是采集在数据稳定的位置,布线工具会为我们布线,理想状态下,采样沿正好对在数据的中心位置
建立时间过大,保持时间就过小。保持时间过大,建立时间就越小,是一对矛盾体。
分析寄存器与寄存器间的时序
时序分析的过程
以两级寄存器作为模型
芯片上有专用的时钟管脚, 到达reg1的延时脚tclk1 到reg2 tclk2 延时
全局时钟网络,希望到达寄存器的延时尽量保持一致,减小时钟的偏斜SKEW =TCLK2-TLCK1
TDATA表示数据传输路径的延时,也包含组合逻辑操作(加,减)有相关的门电路,实际上有物理性的延时,统称为tdata
数据延时和时钟延时之间的差值:
静态时序分析,不需要电路跑起来,通过电路的已知参数分析出时钟和数据的关系
动态时序分析,把所有的延时都加上进行仿真,通过波形上去测量出来我们的建立时间保持时间是否满足我们的时序要求。让电路模拟的跑起来
分析时钟到达情况
建立时间的门限:上升沿到了,在上升沿之前,数据需要稳定的最小时间 Tsu
我们一般把 launch沿是时刻0,latch沿是时刻一个时刻周期T_CYCLE
这两个时间谁先谁后到达称为建立时间的余量
再晚这么久时间来我们的时钟也可以采到数据
实例
这个模块是IDDR的IN 和ODDR, 就是有一路数据进来和一路数据出去,(输入输出)
我们把输入的数据,rx的数据累加再减一,就是一个组合逻辑的操作 然后tx_data1又做了一个累加,计算的操作赋值给了tx。这样中间就增加了两级寄存器。
做时序分析,观察这些寄存器之间的时序结果
分析的时候,时钟的周期 T_CYCLE非常重要,对于时序分析软件来说它是一个未知量,我们要通过时钟的约束来告诉时序分析软件我的时钟频率是多少
还有 约束文件,管脚绑定好。不然做这些约束没什么意义
添加完约束之后先生成我们的bit
相当于打开了我们布局布线完成的相关配置,打开之后就能在里边添加我们的时钟约束了
VIVADO里的约束在综合和布局布线里边都可以添加
小工程,综合肯定没有问题,直接进入到布局布线里边
1.约束我们的时钟
creat clock:让我们时序分析的软件知道我们输入的时钟时钟频率是多少 ,如果输入时钟已经送入了PLL,就不需要再设置约束了,称为主时钟。在PLL设置的时候,就设置了它的时钟频率,会自动帮我们生成creat clock的约束
点加号+ 添加creat clock
保存后更新,打开XDC文件,多了一条时钟约束
意思是生成一个creat clock 周期是8NS,名称是RX_CLK 波形是上升沿是0,下降沿是4,然后查找到管脚使用
要查看数据分析的结果需要重新生成bit文件
所以对于一个比较大的工程,就需要很多个小时,每改一次都要重新生成bit文件
重新生成bit文件之后打开布局布线 更新。有一个timing的报告,会给我们一个总体的summy,总结
点右键关闭窗口
打印报告,很重要的一个
点开去看里面是怎样的
时钟的ibuffer,我们所有管脚进来的信号都要进到ibuffer,增加其驱动能力,缓冲器
从ibuffer的 i到o延时是1.416 再从它的o到我们的rx的这个buffg,这个中间经过一个网络 net就是连线,两个cell之间的连线,增加了1.706
看这个buffer怎么连线
rx clock的ibuffer,从它的输出端连接到了 rx clock ibuffer G到ibufferg之间
走的延时是1.709
所有的时间加一起是4.628实际上就是我们的TCLK1
TCO 0.348 +4.628=4.976
再后面到达Q端,再到ddr寄存器的D端 这个延时是5.634 数据到达时间
接着求数据要求时间
建立时钟的悲观度:我们路径的延时有最小值最大值,分析路径的时候分析最悲观的状态,TCL1如果取小了,建立时间余量大了。宁愿TCLK1取最大值,余量小了,但是能保证在延时最差的情况下我们还能工作。如果给了小了,延时变大了就不对了。为什么TCLK1能考虑取最大值的原因
建立时钟的门限 -0.035
下边这个目的时钟取的是最小值
看公式 SETUP SLACK=TCYCLE+TCLK2-TSU-(TCLK1+TCO+TDATA)
这边TCLK2是目的时钟,如果目的时钟取大值的话相当于给余量做增加了,我们就希望TCLK2是一个小值,所以我们取共同路径的最小值
原始时钟取最大值,目的时钟取最小值,在做计算的时候就会有结果的差异,所以要做一个结果的补偿
1.416+1.709+0.081=3.206
3.206-1.350-1.62-0.077=0.159
系统算出来的补偿 0.159与0.224差不多。应该不是取我们这一路算的,应该是由我们路径上面的最大最小的悲观的差值来计算出来的
共同路径有最大延时和最小延时。最大延时减去最小延时就是我们悲观度的补偿
时钟的不稳定度,芯片的一个系统参数,不是我们计算出来的
标签:分析,时序,vivado,延时,寄存器,我们,时钟 来源: https://www.cnblogs.com/lht-learning/p/16651902.html