目录
unconstrained_internal_endpoints
一、前言
Vivado使用中会涉及到各种报告,内容也较多,很多初学者可能对其中一些内容感到困惑,下面将结合实际工程示例对report_timing_summary中的Check_timing部分进行说明,帮助大家理解报告。
二、Check_Timing
Check_timing报告主要显示一些时钟约束类的检查结果,以Vivado2022.1为例,检查项有以下12项
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