0、经验1、即使通过的是同一个LUT6,或者是LUT4延迟都不会一样。2、1、学习进度04:如何科学设计FPGA时序约束基础了解时序分析模型_哔哩哔哩_bilibili 21:14s需要归纳一下建立时间和保持时间的计算。2、相关资料参考视频基础篇05如何科学设计FPGA:VIVADO中的时序约束和分析以及进阶技巧_哔哩哔哩_bilibili升级篇05如何科学设计FPGA:VIVADO中的时序约束和分析以及进阶技巧_哔哩哔哩_bilibili参考文章菜鸟教程的3.3 Verilog 建立时间和保持时间 | 菜鸟教程csdn写的很好的文章目录《时序分析、时序约束和时序收敛》专栏的说明与导航_fpga时序约束与分析目录-CSDN博客第一章时序分析、时序约束和时序收敛1--时序分析、时序约束和时序收敛分别都是什么-CSDN博客3、D触发器的建立时间建立时间setup time和保持时间hold time:建立时间就是时钟触发事件来临之前数据需要保持稳定的最小时间以便数据能够被时钟正确的采样。保持时间就是时钟触发事件来临之后数据需要保持稳定的最小时间以便数据能够被电路准确的传输。slack松弛的在这里是是余量的意思。Tcq的意思是T(clock to q),也就是时钟到Q端花费的时间不叫Tdq是因为值的传递是由时钟驱动的可能data即D变化了时钟没有来值依旧不会变化。Tslack要求到达的时间-实际到达的时间菜鸟教程这一段写的很好得到公式如下Tcq Tcomb Tsu Tclk Tskew 1如果使用Tslack来做表达那么就是Tslack Tcq Tcomb Tsu Tclk Tskew更基础推导详见视频04:如何科学设计FPGA时序约束基础了解时序分析模型_哔哩哔哩_bilibili如果这个还是不太好理解可以从基础一点去推导这个公式:数据到达时间Tclk1TcqTcomb数据要求时间Tclk2Tclk-Tsu又因为数据到达时间 数据要求时间Tclk1TcqTcomb Tclk2Tclk-Tsu推得TcqTcomb Tsu Tclk2Tclk-Tclk1有因为时钟偏移TskewTclk2- Tclk1最后得到公式 TcqTcomb Tsu Tclk TskewTclk 是时钟周期。强行理解这个公式就是寄存器Tcq组合逻辑延迟Tcomb建立时间Tsu 要在一个时钟周期内完成由于有时钟偏移就是要在一个时钟周期时钟偏移内完成。4、D触发器的保持时间保持时间余量Tslack保持时间应满足数据到达时间 要求到达时间Tclk1 Tcq Tcomb T Tclk2 T Thd推得 Tcq Tcomb Tskew Thd强行理解就是因为时钟周期大T消掉了数据路径上的Tcq和组合逻辑延迟Tcomb 应该大于 时钟周期相关的Tskew和Thd这样数据才能维持到保持时间之后。5、同步时钟和异步时钟是同一个时钟的倍频或者别的关系或者说是一个MMCM一个PLL出来的一个源头的都是同步时钟。否则为异步时钟。我看到评论区有个说法我觉得是对的同步时钟就是知道其中的一个时钟什么时候上升沿我就能知道另一个什么时候上升沿这样就能做时序分析。异步时钟哪怕两个时钟的频率和相位都相等你也不知道它什么时候上升沿。UP主说MMCMMixed-Mode Clock Manager和PLLPhase-Locked Loop都是时钟管理单元MMCM的调频能力强PLL的调相能力强。6、vivado时序进入时序约束界面理论1、vivado中默认所有的时钟都是有关系的都做时钟约束2、如果有异步时钟需要进行异步时钟约束设置源时钟建立源时钟输入时钟的参数时钟周期时钟周期和频率互为反比一个增加一个就减少1Ghz对应1ns那么时钟周期增加10倍变成10ns时钟频率就会减少10倍变成0.1Ghz。上升沿和下降沿一般按照占空比50%。然后下图点击OK后摁住ctrls保存即可。随后会生成约束文件如果要修改约束的时钟频率修改约束文件里面的tcl脚本即可。如果我想修改时钟周期为800Mhz只需要按照下图进行操作要修改时钟频率要改变时钟的下降沿。重新布局布线查看建立时间余量最小min是分析建立时间最大max是分析保持时间。min_max默认两个都分析。其余项保持默认然后点击OK即可。一般图中两项都是正数即可说明都是满足情况的点击即可查看最坏的时序也就是建立时间余量最少的情况。参数的解释1.Name (路径名称)解释这列显示时序路径的名称用于标识具体的时序路径。在设计中每条路径都会有一个唯一的名称。举例Path 1Path 2等。假设有一个时序路径是从寄存器reg1到寄存器reg2则可能命名为Path 1。这样便于开发人员或工具对时序进行分析和查看。2.Slack (时序裕度)解释时序裕度是指路径的实际延迟与设计所要求的时序之间的差距。它表示时序是否满足要求。如果时序裕度为负表示时序违例即信号传输的时间超出了时钟周期。举例假设某路径的实际延迟为 8.5ns而要求的时序为 10ns那么时序裕度为10ns - 8.5ns 1.5ns此时时序满足裕度为正。如果实际延迟为 12ns时序裕度为10ns - 12ns -2ns这表示时序违例。3.Levels (应该指的是逻辑门的级数)解释级别表示路径中涉及的寄存器或逻辑单元的层数。路径中级别越高表示信号从源寄存器到目标寄存器的传播过程中经过了更多的逻辑门或触发器。举例如果路径从寄存器reg1直接连接到寄存器reg2则该路径的级别为 2因为有两个寄存器。如果路径从reg1到logic_gate1再到reg2则该路径的级别为 3因为路径经过了一个逻辑门。4.Routes (布线数量)解释该列显示信号从源到目的的布线数量通常表示信号传播路径的复杂度。布线数量高通常意味着路径复杂可能影响时序延迟。举例假设路径Path 1涉及两段布线连接reg1到reg2则布线数量为 2。如果路径经过多次逻辑单元涉及多个布线段则布线数量可能会增加如布线数量为 5。5.High Fanout (高扇出应该是1个信号被分成了几个)解释表示一个信号源连接到多个接收端的情况。高扇出意味着一个信号源驱动多个寄存器或逻辑单元。扇出较高的路径可能会引起较大的时序延迟因为信号需要传播到多个地方。举例如果一个信号源signal_A驱动了 3 个寄存器reg1、reg2和reg3那么该路径的高扇出为 3。如果信号源驱动了 5 个寄存器则高扇出为 5。6.From (路径来源)解释表示时序路径的起始点。通常是一个寄存器或逻辑单元表示信号从哪里开始传播。举例假设信号从寄存器reg1开始传播那么From列会显示reg1。如果路径的起始点是组合逻辑门logic_gate1那么From列显示logic_gate1。7.To (路径目的地)解释表示时序路径的终点通常是另一个寄存器或逻辑单元表示信号最终传播到哪里。举例假设信号传播到寄存器reg2那么To列会显示reg2。如果信号最终到达逻辑单元logic_gate2那么To列显示logic_gate2。8、寄存器的C端和D端在图中的某些路径中你可能会看到类似以下的情况Count_module_u0/cnt_value_reg[7]/CC端表示这是寄存器的时钟输入。Count_module_u0/cnt_value_reg[7]/DD端表示这是寄存器的数据输入端。综合举例假设有一条时序路径路径名称为Path 1其从Count_module_u0/cnt_value_reg[7]寄存器reg7开始到r_led_reg寄存器r_led结束。假设这条路径的时序裕度为 1.5ns路径级别为 2布线数量为 3扇出为 4信号从reg7到r_led其路径的各个字段将是Name: Path 1Slack: 1.5nsLevels: 2Routes: 3High Fanout: 4From:Count_module_u0/cnt_value_reg[7]To:r_led_reg通过这些字段Vivado能够帮助你了解每条路径的时序信息识别潜在的时序问题并进行优化。7、细看查看报告双击查看时序路径详细情况这个报告展开如下。查看每一个阶段增加的时延源时钟路径以下图为例时钟进入IBUF内部之后偏移增加了1.382ns,这个时候整个路径时延为01.382时钟在IBF内部经过了一连串逻辑之后输出时偏移增加了1.824ns,这个时候整个路径时延为01.3821.8243.206ns数据路径FDRE是Xilinx FPGA器件中的一种基础触发器类型全称为Flip-flop,D-type, synchronousReset, clockEnable即带同步复位和时钟使能的D触发器。LUT4LUT6是组合逻辑综合出来的查找表。net是线网连接逻辑的时延。数据路径Data Path通常指的是信号从一个寄存器Flip-Flop或触发器的Q端输出端出发经过组合逻辑电路最终到达下一级寄存器的D端输入端的传播路径。前面的Incr对于FDRE来说是C到D端的延迟如下图的0.443。如下图的对于LUT来说是固有延迟物理特性如下图的0.105.由于线路是并行的所以我们其实只需要关心延时最大的如下图的6.641ns的线路然后如果需要优化对其进行优化即可。目的时钟路径总结根据报告能够看出路径的时间裕度8.149ns往下能看到数据路径的数据实际到达目标寄存器的时间是6.641ns,此时时钟到达目标寄存器的时间是14.791ns两者相减也能得到时间裕度8.149ns8、约束衍生时钟和异步时钟需要再去看视频05如何科学设计FPGA:VIVADO中的时序约束和分析以及进阶技巧_哔哩哔哩_bilibili从大概1小时的时候开始
vivado时序约束和优化
0、经验1、即使通过的是同一个LUT6,或者是LUT4延迟都不会一样。2、1、学习进度04:如何科学设计FPGA时序约束基础了解时序分析模型_哔哩哔哩_bilibili 21:14s需要归纳一下建立时间和保持时间的计算。2、相关资料参考视频基础篇05如何科学设计FPGA:VIVADO中的时序约束和分析以及进阶技巧_哔哩哔哩_bilibili升级篇05如何科学设计FPGA:VIVADO中的时序约束和分析以及进阶技巧_哔哩哔哩_bilibili参考文章菜鸟教程的3.3 Verilog 建立时间和保持时间 | 菜鸟教程csdn写的很好的文章目录《时序分析、时序约束和时序收敛》专栏的说明与导航_fpga时序约束与分析目录-CSDN博客第一章时序分析、时序约束和时序收敛1--时序分析、时序约束和时序收敛分别都是什么-CSDN博客3、D触发器的建立时间建立时间setup time和保持时间hold time:建立时间就是时钟触发事件来临之前数据需要保持稳定的最小时间以便数据能够被时钟正确的采样。保持时间就是时钟触发事件来临之后数据需要保持稳定的最小时间以便数据能够被电路准确的传输。slack松弛的在这里是是余量的意思。Tcq的意思是T(clock to q),也就是时钟到Q端花费的时间不叫Tdq是因为值的传递是由时钟驱动的可能data即D变化了时钟没有来值依旧不会变化。Tslack要求到达的时间-实际到达的时间菜鸟教程这一段写的很好得到公式如下Tcq Tcomb Tsu Tclk Tskew 1如果使用Tslack来做表达那么就是Tslack Tcq Tcomb Tsu Tclk Tskew更基础推导详见视频04:如何科学设计FPGA时序约束基础了解时序分析模型_哔哩哔哩_bilibili如果这个还是不太好理解可以从基础一点去推导这个公式:数据到达时间Tclk1TcqTcomb数据要求时间Tclk2Tclk-Tsu又因为数据到达时间 数据要求时间Tclk1TcqTcomb Tclk2Tclk-Tsu推得TcqTcomb Tsu Tclk2Tclk-Tclk1有因为时钟偏移TskewTclk2- Tclk1最后得到公式 TcqTcomb Tsu Tclk TskewTclk 是时钟周期。强行理解这个公式就是寄存器Tcq组合逻辑延迟Tcomb建立时间Tsu 要在一个时钟周期内完成由于有时钟偏移就是要在一个时钟周期时钟偏移内完成。4、D触发器的保持时间保持时间余量Tslack保持时间应满足数据到达时间 要求到达时间Tclk1 Tcq Tcomb T Tclk2 T Thd推得 Tcq Tcomb Tskew Thd强行理解就是因为时钟周期大T消掉了数据路径上的Tcq和组合逻辑延迟Tcomb 应该大于 时钟周期相关的Tskew和Thd这样数据才能维持到保持时间之后。5、同步时钟和异步时钟是同一个时钟的倍频或者别的关系或者说是一个MMCM一个PLL出来的一个源头的都是同步时钟。否则为异步时钟。我看到评论区有个说法我觉得是对的同步时钟就是知道其中的一个时钟什么时候上升沿我就能知道另一个什么时候上升沿这样就能做时序分析。异步时钟哪怕两个时钟的频率和相位都相等你也不知道它什么时候上升沿。UP主说MMCMMixed-Mode Clock Manager和PLLPhase-Locked Loop都是时钟管理单元MMCM的调频能力强PLL的调相能力强。6、vivado时序进入时序约束界面理论1、vivado中默认所有的时钟都是有关系的都做时钟约束2、如果有异步时钟需要进行异步时钟约束设置源时钟建立源时钟输入时钟的参数时钟周期时钟周期和频率互为反比一个增加一个就减少1Ghz对应1ns那么时钟周期增加10倍变成10ns时钟频率就会减少10倍变成0.1Ghz。上升沿和下降沿一般按照占空比50%。然后下图点击OK后摁住ctrls保存即可。随后会生成约束文件如果要修改约束的时钟频率修改约束文件里面的tcl脚本即可。如果我想修改时钟周期为800Mhz只需要按照下图进行操作要修改时钟频率要改变时钟的下降沿。重新布局布线查看建立时间余量最小min是分析建立时间最大max是分析保持时间。min_max默认两个都分析。其余项保持默认然后点击OK即可。一般图中两项都是正数即可说明都是满足情况的点击即可查看最坏的时序也就是建立时间余量最少的情况。参数的解释1.Name (路径名称)解释这列显示时序路径的名称用于标识具体的时序路径。在设计中每条路径都会有一个唯一的名称。举例Path 1Path 2等。假设有一个时序路径是从寄存器reg1到寄存器reg2则可能命名为Path 1。这样便于开发人员或工具对时序进行分析和查看。2.Slack (时序裕度)解释时序裕度是指路径的实际延迟与设计所要求的时序之间的差距。它表示时序是否满足要求。如果时序裕度为负表示时序违例即信号传输的时间超出了时钟周期。举例假设某路径的实际延迟为 8.5ns而要求的时序为 10ns那么时序裕度为10ns - 8.5ns 1.5ns此时时序满足裕度为正。如果实际延迟为 12ns时序裕度为10ns - 12ns -2ns这表示时序违例。3.Levels (应该指的是逻辑门的级数)解释级别表示路径中涉及的寄存器或逻辑单元的层数。路径中级别越高表示信号从源寄存器到目标寄存器的传播过程中经过了更多的逻辑门或触发器。举例如果路径从寄存器reg1直接连接到寄存器reg2则该路径的级别为 2因为有两个寄存器。如果路径从reg1到logic_gate1再到reg2则该路径的级别为 3因为路径经过了一个逻辑门。4.Routes (布线数量)解释该列显示信号从源到目的的布线数量通常表示信号传播路径的复杂度。布线数量高通常意味着路径复杂可能影响时序延迟。举例假设路径Path 1涉及两段布线连接reg1到reg2则布线数量为 2。如果路径经过多次逻辑单元涉及多个布线段则布线数量可能会增加如布线数量为 5。5.High Fanout (高扇出应该是1个信号被分成了几个)解释表示一个信号源连接到多个接收端的情况。高扇出意味着一个信号源驱动多个寄存器或逻辑单元。扇出较高的路径可能会引起较大的时序延迟因为信号需要传播到多个地方。举例如果一个信号源signal_A驱动了 3 个寄存器reg1、reg2和reg3那么该路径的高扇出为 3。如果信号源驱动了 5 个寄存器则高扇出为 5。6.From (路径来源)解释表示时序路径的起始点。通常是一个寄存器或逻辑单元表示信号从哪里开始传播。举例假设信号从寄存器reg1开始传播那么From列会显示reg1。如果路径的起始点是组合逻辑门logic_gate1那么From列显示logic_gate1。7.To (路径目的地)解释表示时序路径的终点通常是另一个寄存器或逻辑单元表示信号最终传播到哪里。举例假设信号传播到寄存器reg2那么To列会显示reg2。如果信号最终到达逻辑单元logic_gate2那么To列显示logic_gate2。8、寄存器的C端和D端在图中的某些路径中你可能会看到类似以下的情况Count_module_u0/cnt_value_reg[7]/CC端表示这是寄存器的时钟输入。Count_module_u0/cnt_value_reg[7]/DD端表示这是寄存器的数据输入端。综合举例假设有一条时序路径路径名称为Path 1其从Count_module_u0/cnt_value_reg[7]寄存器reg7开始到r_led_reg寄存器r_led结束。假设这条路径的时序裕度为 1.5ns路径级别为 2布线数量为 3扇出为 4信号从reg7到r_led其路径的各个字段将是Name: Path 1Slack: 1.5nsLevels: 2Routes: 3High Fanout: 4From:Count_module_u0/cnt_value_reg[7]To:r_led_reg通过这些字段Vivado能够帮助你了解每条路径的时序信息识别潜在的时序问题并进行优化。7、细看查看报告双击查看时序路径详细情况这个报告展开如下。查看每一个阶段增加的时延源时钟路径以下图为例时钟进入IBUF内部之后偏移增加了1.382ns,这个时候整个路径时延为01.382时钟在IBF内部经过了一连串逻辑之后输出时偏移增加了1.824ns,这个时候整个路径时延为01.3821.8243.206ns数据路径FDRE是Xilinx FPGA器件中的一种基础触发器类型全称为Flip-flop,D-type, synchronousReset, clockEnable即带同步复位和时钟使能的D触发器。LUT4LUT6是组合逻辑综合出来的查找表。net是线网连接逻辑的时延。数据路径Data Path通常指的是信号从一个寄存器Flip-Flop或触发器的Q端输出端出发经过组合逻辑电路最终到达下一级寄存器的D端输入端的传播路径。前面的Incr对于FDRE来说是C到D端的延迟如下图的0.443。如下图的对于LUT来说是固有延迟物理特性如下图的0.105.由于线路是并行的所以我们其实只需要关心延时最大的如下图的6.641ns的线路然后如果需要优化对其进行优化即可。目的时钟路径总结根据报告能够看出路径的时间裕度8.149ns往下能看到数据路径的数据实际到达目标寄存器的时间是6.641ns,此时时钟到达目标寄存器的时间是14.791ns两者相减也能得到时间裕度8.149ns8、约束衍生时钟和异步时钟需要再去看视频05如何科学设计FPGA:VIVADO中的时序约束和分析以及进阶技巧_哔哩哔哩_bilibili从大概1小时的时候开始