一:FPGA内部(寄存器到寄存器之间的)
1.Tskew=Tclk2(目的寄存器)-Tclk1
如为正——表示改善
如为负——表示恶化
2.关键路径——延时最长的路径
优化:不断拆解组合逻辑电路,用寄存器代替(流水线),因为其他的都基本不能改变。
3.
intra-clock paths:不能设置为伪路径,让EDA去分析。和组合逻辑是否优化有关(代码风格)
inter-clock paths:跨时钟问题,系统检查多半是不满足时序要求的,一般成熟工程都是做了同步处理的所以不用管了。直接设置伪路径。
4.false_patch
a.常量和伪常量:(不会变,就不会有亚稳态的时候)
b.跨时钟问题,系统检查多半是不满足时序要求的,一般成熟工程都是做了同步处理的所以不用管了。直接设置伪路径。
c.虽然做了打两拍/fifo隔离,时序还是会报错(因为异步肯定不满足建立时间和保持时间),告诉他不要检查这个路径,我已经做了隔离处理了(但是自己确保真的做了时序处理了)。
5.
不应该出现always@(posedge clk or negedge clk ),如果你TM想提升速率请把fclk提升(100M——200M),不要搞这种双沿的东西,都是单沿触发。
6.
D触发器时序问题——由于Tsetup,Thold不满足导致亚稳态(海思的芯片基本都是挂在这个地方,数字芯片内部只有0、1(它只认这两个东西)没有什么Z和X态)
7.个人猜想组合逻辑器件延迟(导致的竞争与冒险)比出发器的tco大不然怎么会做流水线呢?哈哈哈
8.
如下的always 块就是D触发器的时序(其实FPGA用到的基本就是D触发器)
9.
Tsetup_slack建立时间余量:需求达到的时间-实际到达的时间={T(一个时钟周期)+Tclk_2(时钟到达目的寄存器的延迟)-Tsu(建立时间)}-{Tclk_1(时钟到达源端寄存器的延时)+Tco+Tdate}
9.1Tsetup_slack就与f(系统)是强相关了——fmax=1/(T-Tsetup_slack)
10.
Thold_slack保持时间余量:实际到达源端寄存器的时间-需求达到源端寄存器的时间={T(一个时钟周期)+Tclk_1(时钟到达源端寄存器的延时)+Tco+Tdate}-{T(一个时钟周期)+Tclk_2(时钟到达目的寄存器的延迟)+Thold(保持时间)}
10.1Thold_slack就与f(系统)是无关了——应为上式把T约掉了
二:(FPGA与上游器件之间的)——源同步(如ADS42的LVDS与FPAG之间的数据交互)
1Input Delay(原理与FPGA内部之间寄存器之间的建立和保持时间一样只不过是PCB走线):可在vivado——edit contriant通过GUI设置
Input Delay是以上游芯片的时钟发送沿为参考,上游的输出数据到达FPGA的外部输入端口之间的延迟。
三:(FPGA与下游器件之间的)
2output Delay:
输出延时指的是从FPGA输出数据后到达外部器件时钟沿的延时时间,可以理解为在捕获沿到来时,数据已经存在的时间。
四:趋势(现在高速串行接口(jesd204B,SATA,PCIE)自动恢复时钟技术慢慢取缔——源同步接口(LVDS)有信道偏斜的缺点)
五:
从上面的Design Timing Summary中可以看出,WNS以及TNS是针对Setup Time Check的,而WHS以及TNS是针对Hold Time Check的,
六:
静态时序分析(STA)
STA不需要输入向量就能穷尽所有的路径,且运行速度很快、占用内存较少、覆盖率极高,不仅可以对芯片设计进行全面的时序功能检查,而且还可利用时序分析的结果来优化设计。所以STA不仅是数字集成电路设计Timing Sign-off的必备手段,也越来越多地被用到设计的验证调试工作中。
七:
生成时钟分为两种。由PLL MMCM等专用时钟单元生成产生的时钟信号,Vivado会自动产生相关约束。还有一种是自定义生成时钟,一般为逻辑分频得到。
时钟源是时钟端口:create_generated_clock -name clk_div -source [get_ports clk] -divide_by 2 [get_pins rega/Q] 意思是在rega单元的Q引脚上的时钟信号clk_div是由clk经过2分频得到的生成时钟。
八:VIVADO看综合后STA
8.1
条数最好选择100才能把所有路径穷尽出来,不然默认是10就会忽略掉一些路径。
8.2
Design Timing Summary——包括最差和总的两个参数,点击直接展示路径
Clock Summary——包含了全部已创建的时钟信号。
Check Timing——部分则包含了未被约束的部分,我们可以根据该部分信息进一步添加必要的约束。
Intra-Clock Paths和Inter-Clock Paths——则分别描述了同步和异步电路时序路径的裕量参数
8.3
level表示两个寄存器之间的组合逻辑器件
8.4
双击打开
解释一下:
- source:源端寄存器,即时序分析的起点,发射沿(Launch Edge)
- destination:目的端寄存器,即时序分析的终点,锁存沿(Latch Edge)
- path group:时序分析的时钟来源
- path type:路径类型,此路径为建立时间的分析
- requirement:时序要求,设定为100MHz,所以就是10ns
- clock path skew:时钟到达目的寄存器和源寄存器之间的时间差值
- clock uncertainty :时钟的不确定度,包括skew和jitter
8.5
本人觉得:原理图上的源端的时钟端口是错误的?怎么数据起始是从clk端开始的呢?