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

 


相关文章
|
C++ 索引
Windows10下VS2015下载安装详解【附“安装包丢失或损坏“ 错误解决方法】
Windows10下VS2015下载安装详解【附“安装包丢失或损坏“ 错误解决方法】
12984 0
Windows10下VS2015下载安装详解【附“安装包丢失或损坏“ 错误解决方法】
|
Ubuntu 网络协议 Linux
嵌入式Linux系列第8篇:操作网口
嵌入式Linux系列第8篇:操作网口
|
9月前
|
Shell Linux 测试技术
Linux Shell循环详解(从零开始掌握Shell脚本中的循环结构)
本文介绍Linux Shell脚本中for和while循环的基本语法与应用,帮助新手掌握自动化任务处理技巧,提升脚本编写效率。
|
C#
C# 中串口通信 serialport1.DataReceived 函数无法触发或者出发延时等等问题解决方法
原文:C# 中串口通信 serialport1.DataReceived 函数无法触发或者出发延时等等问题解决方法 以前这个问题困扰我多天最后查资料一大堆,最后最终攻克了,看到非常多人做C#串口都遇到相同的问题,所以写一篇博文,以便学习交流。
4045 0
|
Web App开发 安全 算法
什么是一次性密码(OTP)
一次性密码(OTP)是一种动态生成的临时身份验证代码,仅能使用一次且有效期短,通常为30-60秒。它作为多因素认证的重要组成部分,通过设备或应用生成唯一代码,提升账户安全性,减少密码重用和拦截风险,广泛应用于金融、企业安全、电商等领域。
5602 87
|
机器学习/深度学习 人工智能 算法
Python+YOLO v8 实战:手把手教你打造专属 AI 视觉目标检测模型
本文介绍了如何使用 Python 和 YOLO v8 开发专属的 AI 视觉目标检测模型。首先讲解了 YOLO 的基本概念及其高效精准的特点,接着详细说明了环境搭建步骤,包括安装 Python、PyCharm 和 Ultralytics 库。随后引导读者加载预训练模型进行图片验证,并准备数据集以训练自定义模型。最后,展示了如何验证训练好的模型并提供示例代码。通过本文,你将学会从零开始打造自己的目标检测系统,满足实际场景需求。
16077 1
Python+YOLO v8 实战:手把手教你打造专属 AI 视觉目标检测模型
|
Ubuntu NoSQL Linux
一文讲明Docker的基本使用,常见Docker命令使用 、Docker的安装使用等【详细说明+图解+概念+实践】
这篇文章详细介绍了Docker的基本使用,包括Docker的安装、常用命令、架构概念等,并通过图解和实践帮助读者快速掌握Docker的使用方法。
一文讲明Docker的基本使用,常见Docker命令使用 、Docker的安装使用等【详细说明+图解+概念+实践】
|
Windows
基于MATLAB实现的OFDM仿真调制解调,BPSK、QPSK、4QAM、16QAM、32QAM,加性高斯白噪声信道、TDL瑞利衰落信道
本文通过MATLAB仿真实现了OFDM系统中BPSK、QPSK、4QAM、16QAM和32QAM调制解调过程,并在加性高斯白噪声信道及TDL瑞利衰落信道下计算了不同信噪比条件下的误比特率。
1863 4
基于MATLAB实现的OFDM仿真调制解调,BPSK、QPSK、4QAM、16QAM、32QAM,加性高斯白噪声信道、TDL瑞利衰落信道
|
数据安全/隐私保护
(只需五步)注册谷歌账号详细步骤,解决“此电话号码无法验证”问题
注册google一直不方便,因为如果直接去google官网注册,那么它大概率会显示“此电话号码无法用于进行验证”接下来,按着教程来一步步做,就可以实现跳过此限制,成功用手机号注册google了。很简单的。
46022 1