altera小实验——TimeQuest Timing Analyzer初步使用

简介: altera小实验——TimeQuest Timing Analyzer初步使用

时序分析是FPGA开发过程中极为重要的一环。在一些简单的工程中时序约束可能会被忽略,但是时序约束仍然是保证系统正常工作的关键因素之一。quartus ii的时序约束可以通过TimeQuest Timing Analyzer来完成。

参考《FPGA现代数字系统设计及应用》

1.TimeQuest基本流程

TimeQuest时序约束是作用在门级网表上的,因此在进行时序约束前应该首先编译一边工程,之后进行时序约束并再次编译进行时序分析,直至无时序错误为止,之后烧写工程下板子。

2.实验代码

所用板子为altera DE2板子,FPGA为Cyclone II:EP2C35F672C6,quartus版本为13.0

实例化的pll,输入时钟为50M的CLOCK_50,输出为25M和10M的clk_25m与clk_10m时钟。

module work (  
  CLOCK_50,         // On Board 50 MHz  
  KEY,              // Pushbutton[3:0]  
  SW,               // Toggle Switch[17:0]  
  LEDR
);
input         CLOCK_50;   // On Board 50 MHz  
input  [3:0]  KEY;        // Pushbutton[3:0]  
input  [17:0] SW;         // Toggle Switch[17:0]  
output [17:0] LEDR;       // LED Red[17:0]  
wire ret, clk, clk_25m, clk_10m;
pll (
  .inclk0(CLOCK_50)
  ,.c0   (clk_25m)
  ,.c1   (clk_10m)
);
assign clk = CLOCK_50;
assign rst = !KEY[3];
reg [3:0]counter1, counter2, counter3;
always @(posedge clk or posedge rst) begin
  if (rst) begin
    // reset
    counter1 <= 0;
  end
  else begin
    counter1 <= counter1 + 1;
  end
end
always @(posedge clk_25m or posedge rst) begin
  if (rst) begin
    // reset
    counter2 <= 0;
  end
  else begin
    counter2 <= counter2 + 1;
  end
end
always @(posedge clk_10m or posedge rst) begin
  if (rst) begin
    // reset
    counter3 <= 0;
  end
  else begin
    counter3 <= counter3 + 1;
  end
end
assign LEDR[0] = (counter1==4'b1111) ? 1:0;
assign LEDR[1] = (counter2==4'b1111) ? 1:0;
assign LEDR[2] = (counter3==4'b1111) ? 1:0;
endmodule

3.实验流程

1).预编译

建立工程,键入代码,分配管脚,编译工程得到门级网表。

此时编译后,时序约束报表处为红色代表时序有错,不过一般对于这种小程序来说,一样是可以运行的。

此时会报警告:

Critical Warning (332012): Synopsys Design Constraints File file not found: 'work.sdc'. A Synopsys Design Constraints File is required by the TimeQuest Timing Analyzer to get proper timing constraints. Without it, the Compiler will not properly optimize the design.

acb2e0ebb028b36318664bbde27b8747_SouthEast.png

2).调出TimeQuest工具

Tools->TimeQuest Timing Analyzer打开时序约束工具。

d07e1053b33b790e236f1939867561f5_SouthEast.png

3).创建时序分析网表

点击Netlist->Create Timing Netlist来创建一个新的约束网表,由于输入的门级网表是综合后适配的因此选择post-fit。

当然所有这些任务都可以通过tcl脚本语言来实现,如图中的tcl command。

speed grade应该是跟器件有关。

fc825c3f57278c7d580e4f42c9459ec5_SouthEast.png

4).创建时钟

Constraints->Create Clock,在对话框中填写系统时钟信息。

Clock name可以自己命名,之后将其与实际的时钟端口对应就可以。

period是周期,要与实际周期一致,板子上的时钟引脚是50M,因此键入20ns。

waveform edges是上升沿与下降沿。

Targets为对应的时钟管脚,这里对应了CLOCK_50。

之后点击run即可。

4e3c9afaa29fe0d9781aca65cfab75c5_SouthEast.png

5).设置非理想时钟。

我们所使用的时钟都是非理想的,一般要给时钟流出余量。

latency是寄存器时钟信号与时钟源信号之间的相位差;uncertainty是寄存器与寄存器之间的时钟信号相位差,在此对uncertainty进行设置。

constraints->Set Clock Uncertainty,设置时钟源的setup uncertainty为1ns。

0812a335227ddd932ea501448912cd8b_SouthEast.png

6).设置输入延时

模块的输入延时与输出延时都是可以估算的,一般是自行给一个估计的数值,以便工具计算内部逻辑延时约束。

在此,按照书上所建议,对输入端口的时钟预留40%的外部延时时间即8ns。

Constraints->Set Input Delay

d70ace0496553603a6d32f28611aa2c9_SouthEast.png

7).设置输出延时

Constraints->Set Output Delay

2951bcfb6c7150f85f6ccd38627e7a2d_SouthEast.png

8).设置pll时钟约束

Constraints->Derive PLL Clocks

可直接生成pll时序约束。

d9218fddd15d2bbeb01b40e2dc0f70ef_SouthEast.png

9).查看时钟设置。

在tasks页面中的diagnostic-Report Clocks中可以查看时钟约束情况。

49c6d42b4b5995a125ca08459397d2c1_SouthEast.png

10).写出SDC文件。

Constraints->Write SDC Files,保存文件。

a4c64aea65642b694b38185fe83a7e1f_SouthEast.png

11).查看SDC文件

在work文件夹下可以查看.sdc文件,其中为对应的tcl时序约束脚本。

d3e0a5089ab8c88ba538e0d6ff3befd7_SouthEast.png

12).添加约束文件

在工程界面右键,Settings->TimeQuest Timing Analyzer,点击添加.sdc文件。

d9d157179927a19a58085e844c2803a3_SouthEast.png

13).编译工程

此时可以看到.sdc文件已经添加,再次编译工程,可以看到时序报告已经不是红色了。

eb462e58eafed0865d058427b8aecfab_SouthEast.png

a2f1d99463acd3df98534e2f6515b810_SouthEast.png

14).查看报告并烧写

fe9f10ce801b41f915f4e89877a5044f_SouthEast.png

 


相关文章
|
3月前
|
算法 数据挖掘
Sentieon | 每周文献-Clinical Trial-第三十三期
Sentieon | 每周文献-Clinical Trial-第三十三期
34 0
|
3月前
Google Earth Engine(GEE)——Segmentation.seedGrid和SNIC (Simple Non-Iterative Clustering)案例和错误缺少特征错误分析
Google Earth Engine(GEE)——Segmentation.seedGrid和SNIC (Simple Non-Iterative Clustering)案例和错误缺少特征错误分析
85 0
|
机器学习/深度学习 算法 决策智能
Lecture 5:无模型控制
Lecture 5:无模型控制
111 1
|
编解码 算法 ice
Google Earth Engine(GEE)——MOD10A1 V6 Snow Cover Daily Global 500m积雪、积雪反照率、部分积雪和质量评估 (QA) 数据
Google Earth Engine(GEE)——MOD10A1 V6 Snow Cover Daily Global 500m积雪、积雪反照率、部分积雪和质量评估 (QA) 数据
289 0
Google Earth Engine(GEE)——MOD10A1 V6 Snow Cover Daily Global 500m积雪、积雪反照率、部分积雪和质量评估 (QA) 数据
|
存储 缓存 算法
[SIGMOD 22 学习]《Adaptive Hybrid Indexes》解读
本文是学习总结,有错误处欢迎交流。
393 0
|
编解码 算法
Google Earth Engine ——MOD14A1.006: Terra Thermal Anomalies & Fire Daily Global 1km该产品区分了每日火灾、无火灾数据集
Google Earth Engine ——MOD14A1.006: Terra Thermal Anomalies & Fire Daily Global 1km该产品区分了每日火灾、无火灾数据集
167 0
Google Earth Engine ——MOD14A1.006: Terra Thermal Anomalies & Fire Daily Global 1km该产品区分了每日火灾、无火灾数据集
|
传感器 编解码 算法
Google Earth Engine ——MOD17A3H.006: Terra Net Primary Production Yearly Global 500m这是该产品的NASA版本年度净初级
Google Earth Engine ——MOD17A3H.006: Terra Net Primary Production Yearly Global 500m这是该产品的NASA版本年度净初级
319 0
Google Earth Engine ——MOD17A3H.006: Terra Net Primary Production Yearly Global 500m这是该产品的NASA版本年度净初级
|
编解码 安全 数据挖掘
Google Earth Engine ——数据全解析专辑(Copernicus Global Land Cover Layers: CGLS-LC100 Collec)2015 年全球土地分类数据集
Google Earth Engine ——数据全解析专辑(Copernicus Global Land Cover Layers: CGLS-LC100 Collec)2015 年全球土地分类数据集
236 0
Google Earth Engine ——数据全解析专辑(Copernicus Global Land Cover Layers: CGLS-LC100 Collec)2015 年全球土地分类数据集
|
算法 ice
Google Earth Engine ——MOD10A1 V6 Snow Cover Daily Global 500m产品包含雪盖、雪反照率、雪盖分量和质量评估(QA)数据和NDSI指数数据集
Google Earth Engine ——MOD10A1 V6 Snow Cover Daily Global 500m产品包含雪盖、雪反照率、雪盖分量和质量评估(QA)数据和NDSI指数数据集
395 0
Google Earth Engine ——MOD10A1 V6 Snow Cover Daily Global 500m产品包含雪盖、雪反照率、雪盖分量和质量评估(QA)数据和NDSI指数数据集
|
算法 ice
Google Earth Engine ——MYD10A1 V6 Snow Cover Daily Global 500m产品包含雪盖、雪反照率、雪盖分率和质量评估(QA)数据归一化差异积雪指数数据集
Google Earth Engine ——MYD10A1 V6 Snow Cover Daily Global 500m产品包含雪盖、雪反照率、雪盖分率和质量评估(QA)数据归一化差异积雪指数数据集
181 0
Google Earth Engine ——MYD10A1 V6 Snow Cover Daily Global 500m产品包含雪盖、雪反照率、雪盖分率和质量评估(QA)数据归一化差异积雪指数数据集