时序分析及约束实操(VIVADO IDE)——建立时间检查


目录

前言

1、知识回顾

2、实际操作

2.1 工程相关配置

2.2 模块源码

2.3 建立IO约束

2.4 建立时序约束

2.4.1 主时钟

参考说明



前言

《Tcl&STA》专栏主要是学习了Tcl一些基本语法以及STA各种理论知识,包括时序分析的目的和各种概念,以及时序报告的分析等等。但是总有一个问题感觉悬而未决:如何确定我需要的约束条件并且具体的约束步骤是什么?具体的实际操作需要注意什么?检查什么?

真正到一个项目上,还是会手忙脚乱,不知要从何做起。也就是大家调侃的“理论满分,实操零分”。可以和别人侃侃而谈理论要点,做题目也不会有什么问题,但是遇到项目实际做的时候就会一头雾水。

此专栏就是立足于实际项目进行时序分析和约束的学习,此专栏将会一直和我的学习进度同步,加油吧,各位 IC 人!

建议PC或Pad端食用~


1、知识回顾

建立时间:时钟上升沿到达之前,数据必须保持稳定的最小时间。

建立时间裕量:数据到达时间和数据需求时间的差值。

数据实际到达时间:

数据要求到达时间:

 建立时间裕量:

 应试例题:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第1张图片

 建立时间裕量:10+(2+2)-0.5-(2+3+1+3)=4.5ns

Fmax = 1/Tcycle_min = 1/((2+3+1+3)+0.5-(2+2)) = 1/5.5ns = 181.82MHz

2、实际操作

以 XILINX Artix7 开发板为设计平台,设计一个简单的计数点灯模块。主要是分析时序和建立时序约束。

2.1 工程相关配置

时序分析及约束实操(VIVADO IDE)——建立时间检查_第2张图片

2.2 模块源码

随便写一个电灯的程序:

闪烁周期:2s,持续时间:1s。直接使用片上时钟晶振的时钟。

里面对输出进行了打两拍处理,模拟数据在寄存器之间的传输

程序写的方式不唯一,贴在这里仅供参考。

TOP:

//********************************** 文 件 说 明 **********************************\

//    版本:1.0
//设计日期:2022 04 12
//    作者:在路上,正出发

//功能说明:简单的点灯。2s亮一次,1次持续1s

//相关参考:

//*********************************************************************************\



//********************************** 代 码 部 分 **********************************\

`timescale         1ns/1ps

module 	  TOP(

//*************-------------------- 输入端口列表 -----------------------***********\
input 																	I_CLK_50M,
input																	I_Rstn,

    
//*************-------------------- 输出端口列表 -----------------------***********\
output		[7:0]														O_LED

//各 output 之间以逗号隔开 且 最后一个 output 后面无 逗号 

);

//*************-------------------- 内部参数定义 ----------------------************\
localparam						    P_COUNT_MAX  		=  		26'd50000000;


//*************-------------------- 内部变信号定义 ----------------------************\
reg 								[25:0]								R_COUNTER;
reg									[7:0]								R_LED;
reg									[7:0]								RR_LED;

//*************------------------- 模块的程序设计 ---------------------************\
always@(posedge I_CLK_50M)
begin
	if(I_Rstn == 1'b0)
		begin
			R_LED <= 8'd0;
			RR_LED <= 8'd0;;
		end
    else 
    	begin
    	    RR_LED <= R_LED;
    	end
    
end

always@(posedge I_CLK_50M)
	begin
 		if(I_Rstn == 1'b0)
 			begin
 				R_COUNTER <= 26'b0;
 			end
 		else if(R_COUNTER < P_COUNT_MAX)
 		begin
 			R_COUNTER <= R_COUNTER+1;
 			R_LED <= R_LED;
 		end
 		else
 		begin
 			R_COUNTER <= 26'b0;
 			R_LED <= ~R_LED;
 		end
	end

assign O_LED = RR_LED;

endmodule

//*********************************************************************************\

TB文件:


//********************************** 测 试 文 件 说 明 **********************************\

//作者:在路上正出发
//日期:2022 04 12


`timescale 1ns/1ps

module   TOP_TB();

//********************************** 仿 真 参 数 声 明 **********************************\



//********************************** 输 入 接 口 声 明 **********************************\
reg I_CLK_50M;
reg I_Rstn;


//********************************** 输 出 接 口 声 明 **********************************\
wire [7:0] O_LED;


//********************************** 内 部 信 号 声 明 **********************************\



//**********************************    测 试 程 序    **********************************\

//---------------------------------- 产 生 激 励 时 钟
`define	 CLK_PERIOD	 20
initial    I_CLK_50M=	 0;
always #(`CLK_PERIOD/2)   I_CLK_50M=  ~I_CLK_50M;


//---------------------------------- 初 始 化 控 制 信 号
initial
	begin
		I_Rstn = 0;
		#1000;
		I_Rstn = 1;

	end

//---------------------------------- 输 入 数 据 配 置 



//---------------------------------- 被 测 试 模 块 例 化
TOP TOP_INST(
	.I_CLK_50M(I_CLK_50M),
	.I_Rstn(I_Rstn),
	.O_LED(O_LED)
	);


endmodule

功仿结果:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第3张图片

 

2.3 建立IO约束

综合、实现之后,打开IO规划平面,通过 UI 界面进行IO引脚约束:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第4张图片

Ctrl + S 保存, 打开 XDC文件,如下:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第5张图片

 其实也可以自己直接在 XDC文件中写 Tcl 脚本进行引脚约束。

2.4 建立时序约束

进入时序约束界面:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第6张图片

 

2.4.1 主时钟

注意:如果外部时钟已经送入 PLL 或者 MMCM ,那么就不需要声明主时钟了。因为 PLL 或者 MMCM 的IP核有与之对应的时钟周期约束。

时钟添加:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第7张图片

 

波形参数设置:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第8张图片

 保存,Ctrl + S:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第9张图片

 此时的 XDC文件:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第10张图片

 此时的布局布线信息都已经过时,因为我们加入了新的约束条件,布局布线的方式会因此改变,因此为了查看我们约束的效果,我们需要重新布局布线,直接 RUN IMPLEMENTATION

即可

布局布线再次完成以后,打开实现后的设计,看到以下界面:

总体时序结果:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第11张图片

 

查看具体的时序报告:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第12张图片

 如下:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第13张图片

 如要查看时序报告,点击上图的 Report Timing:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第14张图片

 报告界面:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第15张图片

 标识时序路径在实际布线上的结果:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第16张图片

 

该路径的详细时序报告:

此处的时序报告,可以结合之前学的 STA 详细看看。

时序分析及约束实操(VIVADO IDE)——建立时间检查_第17张图片

时序分析及约束实操(VIVADO IDE)——建立时间检查_第18张图片

 在布线中高亮标记的方法:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第19张图片

 

打开 Device 就能看到路径了:

时序分析及约束实操(VIVADO IDE)——建立时间检查_第20张图片

 

参考说明

【1】尤老师学习视频。

你可能感兴趣的:(VIVADO,IDE,时序约束及分析,实操,静态时序分析,STA,时序分析,VIVADO,IDE,时序约束实操)