Vivado时序报告一:Check_timing详解

本文详细解读了Vivado工具中的Check_timing报告,包括no_clock、pulse_width_clock、unconstrained_internal_endpoints等12项检查内容,以及如何在实际工程中应用和解决时序约束问题,如设置输入/输出延迟、避免多时钟和环路等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、前言

二、Check_Timing

2.1 含义解释

2.2 工程代码

2.3 时序约束

2.4 Check_timing报告

no clock

pulse_width_clock

unconstrained_internal_endpoints

no_input_delay

no_output_delay

multiple_clock

generated_clocks

loops

partial_input_delay

partial_output_delay

latch_loops

三、参考文档


一、前言

    ​Vivado使用中会涉及到各种报告,内容也较多,很多初学者可能对其中一些内容感到困惑,下面将结合实际工程示例对report_timing_summary中的Check_timing部分进行说明,帮助大家理解报告。

二、Check_Timing

    ​Check_timing报告主要显示一些时钟约束类的检查结果,以Vivado2022.1为例,检查项有以下12项

read-normal-img

2.1 含义解释

no_clock:检查出没有时钟信号的寄存器

constant_clock:检查出连接到常量信号(如VSS、接地、数据信号)的时钟信号

pulse_width_clock:检查出只有脉冲宽度检查的时钟引脚,该时钟引脚没有setup/hold/recovery/removal检查

unconstrained_internal_endpoints:检查出以寄存器数据引脚为时序路径终点,但引脚没有约束

no_input_delay:检查出没有设置输入延时的输入端口

no_output_delay:检查出没有设置输出延时的输出端口

multiple_clock:检查出有多个时钟的时钟引脚,在检查出存在这样的时钟引脚时,建议使用set_case_analysis约束来限制只有一个时钟在该引脚上传输

generated_clocks:检查生成时钟是否存在环路或循环定义,如果生成时钟的源时钟也是生成时钟将报错

loops:检查组合逻辑中是否存在环路

partial_input_delay:检查出输入端口中设置了输入时延input_delay,但只设置了max或min,或者延时值只有rise或fall边沿触发

partial_output_delay:检查出输出端口中设置了输出时延output_delay,但只设置了max或min,或者延时值只有rise或fall边沿触发

latch_loops:检查设计中组合逻辑是否存在latch环路

2.2 工程代码

注意:此设计中在综合后会报错,因为PLL的参数COMPENSATION("ZHOLD")为ZHOLD,如果需要跑通,需设置为EXTERNAL或INTERNAL,之所以这样设置是为了看到pulse_width_clock检查

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/02/24 14:18:11
// Design Name: 
// Module Name: Check_timing
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module Check_timing(clk1,clk2,clk3,rst,d1,d2,S,CLKIN1,CLKIN2,CLKINSEL,CLKFBIN,CLKFBOUT,o_clk,o_lut,O,Q1,Q2,Q3,out_syn,pll_out,ff2);
input clk1,clk2,clk3,rst,d1,S;
input [4:0] d2;
input CLKIN1,CLKIN2,CLKINSEL,CLKFBIN;
output O,Q1,Q2,Q3,out_syn,pll_out,CLKFBOUT,o_clk,o_lut;
reg ff1,pll_ff1,pll_ff2,ff_syn;
output reg [4:0] ff2;
wire o_fdce;



always@(posedge clk1,negedge rst)
     if(!rst)
     begin
         ff1<=1'b0;
         ff2<=1'b0;
     end
     else begin
         ff1<=d1;
         ff2<=d2;
     end
//constant_clock
   (*DONT_TOUCH="YES"*)LUT2 #(
      .INIT(4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA芯中的小蚂蚁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值