Quartus生成网表及延时文件的方法

一、Quartus18.1打包封装网表文件(.qxp)详细教程

1.1 .qxp文件打包封装步骤

1) 在QuartusII的Project Navigator中选中欲创建qxp的module文件,右击,选择“Design Partition > Set as Design Partition”。

综合整个工程,想出PAR后的qxp就需要编译整个工程。

点击菜单“Process”,选择“Start > Start Partition Merge”,以创建完整的module网表。

点击菜单“Project”,选择“Export Design Partition”。

在弹出窗口中选择想要的层次和网表选项,即可导出.qxp文件。

1.2 示例

下面以DS18B20工程为例,展示网表文件封装的详细过程。

接下来将温度采集控制模块ctrl.v封装为网表文件。

1、在QuartusII的Project Navigator中选中欲创建qxp的module文件,右击,选择“Design Partition > Set as Design Partition”

选择“Design Partition > Set as Design Partition”之后,该module文件右上角会有一个品字形图标,如下:

2、全编译整个工程

3、点击菜单“Processing”,选择“Start > Start Partition Merge”,以创建完整的module网表。

4、点击菜单“Project”,选择“Export Design Partition”。

5、在弹出窗口中选择想要的层次和网表选项,即可导出.qxp文件。

首先下拉选择要导出的模块,然后修改导出的文件名,点击OK完成导出,如下:

6、导出成功后,在工程目录下就会生成指定模块的一个.qxp文件,即网表文件

此时,将原本添加到此工程中的ctrl.v温度采集控制模块删除,再将刚才封装好的.qxp网表文件添加进工程,实现网表文件导入。

还有另外一种导入.qxp文件的方式,如下:

点击菜单“Project”,选择“Import Design Partition”。

在弹出的窗口中选择要导入的Partition。

上述操作完成后以下会显示该网表文件的详细信息:

点击OK完成网表文件导入此工程,最后全编译Quartus工程,即可实现按键消抖模块的功能,此时本工程中以及删除掉了按键消抖功能的全部代码,只有按键消抖模块的网表文件。

以上就是网表文件封装的完整示例。

二、Quartus18.0生成时序约束文件方法

参考文件:[FPGA时序约束(二)利用Quartus18对Altera进行时序约束](https://blog.csdn.net/zerokingwang/article/details/129381091)

1.为什么要进行时序约束?

1.1 在程序编译之后,会出现时序约束标红。

如果不自己编写时序约束文件,就会出现系统进行默认分配,这里如果没有自己编写sdc时序分析文件,quartus会自动分析潜在的时钟,如下图,在clock中查看

1.2 不进行时序约束的后果

1)用欠约束和过约束来描述:

欠约束:约束设定的时序条件太低了,导致不满足我们要求工作的要求。

过约束:约束的比实际要求高,但是FPGA是一个系统的设计,不是局部最优,所以局部过优那么其他地方就会有比较差的地方。(并不绝对,有时也需要适当的过约束)

2)最坏情况时钟分析

Slack:建立或保持时间余量。
From Node:起点,源寄存器。
To Node: 终点,目标寄存器。
Launch Clock: 源寄存器发射数据的时钟
Latch Clock: 目的寄存器接收数据的时钟
Relationship:Launch Clock edge和 Latch Clock edge 的时间差。
(如果两个时钟非同一个信号,而是有一定相位关系的同源时钟,则 Relationship不再是时钟的周期值

2.如何自己设置sdc时序约束文件?

2.1 方法一

1)利用TimeQuest TimingAnalyzer来添加时序约束 。

2)点击菜单栏Netlist Create Timing Netlist,弹出的菜单中使用默认设置,点击 OK便可。接着进行时钟约束,点击菜单栏 Constraints?Create Clock。 Clock name 是我们随便给约束的信号起的名字,没有特别限制; Period 为时钟周期,我们的时钟晶振是 50MHz的,即 20ns;Targets 选择实际被约束的时钟引脚,点击改行最后面的按钮可以选择相应的引脚信号; SDC command 无须设置,自动根据前面的设置生成,Waveform edges 也无须设置,我们采用默认设置,即 0ns 时钟上升, 20ns 下降。点击 Run 完成约束设置 .

3)再生成SDC约束报告(SDC Assignments Report),SDC约束报告了在指定设计中包含的所有时序约束,在菜单栏Report->Diagnostic->Report SDC;然后生成时钟总结报告( Clocks Summary Report),总结设计中所有的时钟,在菜单栏Report->Diagnostic-> Report Clocks。

4)生成时钟传输报告 (Clock Transfers Report),使用Report Clock Transfers命令生成一个报告来验证所有的时钟到时钟传输都是有效的。这种报告包含设计中所有的时钟到时钟传输。在菜单栏Report->Diagnostic->Report Clock Transfers。

5)伪路径约束

略,如果需要约束可参考上述链接。

6)设置完时序约束文件,当时要更新他啦。接下来,我们要依次点击主界面右下方 task 栏里的Update Timing Netlist和 Write SDC File选项,弹出的 Write SDC File窗口如图所示,我们更改 SDC file name 为 “工程名.”sdc,接着点击OK。

7)回到工程,把SDC文件添加到工程里面,重新编译,至此SDC文件添加完成问题解决。

2.2 方法二

1)进入时序分析工具


2)其余步骤同方法一

2.3 时序约束语法补充

sdc总共有13种约束命令。以下命令都可以在菜单的constraint里面找到,可以直接设置好参数让软件自动生成,当然也可以自己生成添加。 **• Creat clock** 约束外部进入FPGA的时钟,其他IC产生的给FPGA的类时钟信号 **• Creat generated clock** 约束pLL(derive_pll_clocks) 约束FPGA输出到外部的时钟 时钟多路复用器(clock muxes) 涟漪时钟(ripple clocks),FPGA内部寄存器输出的时钟

phase:是偏移多少度

offset:是偏移多少ns

例子:create_generated_clock -name 起名字 -source [get_ports {原时钟}] [get_ports {生成的时钟}]
• set_clock_latency
对输入到FPGA的时钟及类时钟(其他芯片产生的时钟给FPGA)

可以自己选择延迟类型,其中,late指最大时钟延迟,early指最小时钟延迟

• Set_clock_uncertainty
对时钟出现的抖动进行约束,是一个时钟到另一个时钟的约束,用 derive_clock_uncertainty约束命令不需要确定uncertainy的时间。


• Set_clock_groups
把相关的时钟分成一个组,与其它不相关的时钟区分开。 timequest只对这组内的时钟域进行分析,组间的时钟路径将不会分析。
• set_input_delay
对外部IC输入到FPGA管脚的约束,这个约束命令中的延迟信息需要告诉timequest。


外部IC到FPGA输入管脚Din[3:0]的最大延时是4ns,最小延时是2ns,外部IC时钟是ext1_clk。add delay选项用于说明有另外的外部寄存器连接到端口,通常用于对双倍速率接口的约束。
• set_output_delay
FPGA输出到IC的延迟,与输入延迟相似
• set false path
不要分析某个路径或某组路径
• set_multicycle_path
两个寄存器间的数据传输在一个周期内没法完成时,我们可以通过该约束命令来改变他的建立关系值和保持关系值让其满足时序要求。
• set muximum delay和set minimum delay
最大建立延时和最小建立延时

2.4 时序约束中的无约束路径

![](https://cdn.nlark.com/yuque/0/2024/png/42573124/1721204038184-705b631a-5a29-4c33-87bd-5375d9d95c3e.png) 解决方法:

在TimeQuest TimingAnalyzer时,查看Ignored constraints也很重要,看看有没有被忽略的约束

对于不需要约束的路径可以在时序这里直接设置

2.5 不同工况SDO时序文件

![](https://cdn.nlark.com/yuque/0/2024/png/42573124/1721204478801-386e6760-b9af-44ce-a3ba-a462b5bb7402.png)

三、时序约束的学习

3.1 时序约束基本原理

一、基本概念

1.时序:时钟和数据的对应关系

2.约束:告诉综合工具,我们希望时序达到什么样的标准

3.违例:时序达不到需要的标准

4.收敛:通过调整布局布线方案来达到这个标准

5.静态时序分析:电路未跑起来时,延时等已知,以此分析时序

6.动态时序分析:电路跑起来,如Modelsim软件(理想状态)

二、时序分析基本模型

![](https://cdn.nlark.com/yuque/0/2024/png/42573124/1711522647218-8a93cf9a-fadd-4445-ab06-00fbc5a44c79.png)

模型分为以下四种:(注:PAD指管脚)

  • 寄存器与寄存器之间
  • 输入PAD与寄存器之间
  • 寄存器与输出PAD之间
  • 输入PAD 与输出PAD之间(太极端,不讨论)

知识补充:

1、全局时钟:FPGA时钟到各个寄存器的时间非常接近。

2、自分频时钟:走的是数据线,到各个寄存器的时间差异非常大。

三、时序分析中常见固定参数简介

1.参数说明表

![](https://cdn.nlark.com/yuque/0/2024/png/42573124/1711522647174-6020a9da-07cd-47da-b99c-d575c6ff649e.png)

2.各个参数详细介绍

2.1 建立时间 Tsu
建立时间(Tsu):是指在时钟沿到来之前数据从不稳定到稳定所需的时间,假设建立的时间不满足要求那么数据将不能在这个时钟上升沿被稳定的打入触发器

即,接收时钟上升沿前,发送数据要准备好的时间

2.2 保持时间 Th
保持时间(Th):是指数据稳定后保持的时间。假设保持时间不满足要求那么数据相同也不能被稳定的打入触发器。

即,接收时钟上升沿后,发送数据要保持住的时间

2.3 启动沿 Launch
时序分析起点(launch edge):第一级寄存器数据变化的时钟边沿,也是静态时序分析的起点。
2.4 锁存沿 Latch
时序分析终点(latch edge):数据锁存的时钟边沿,也是静态时序分析的终点。
2.5 数据输出延时 Tco
数据输出延时(Tco):这个时间指的是当时钟有效沿变化后,数据从输入端到输出端的最小时间间隔。
2.6 时钟偏移 Tskew
时钟偏斜(clock skew):是指一个时钟源到达两个不同寄存器时钟端的时间偏移。
2.7 数据传输实际走线延时 Tdata
是指两个触发器之间的数据物理传输延时

2.8 时钟周期 Tcyc
时钟最小周期:系统时钟能执行的最高频率。

1). 当数据需求时间大于数据到达时间时,时钟具有余量;

2). 当数据需求时间小于数据到达时间时,不满足时序要求,寄存器经历亚稳态或者不能正确获得数据。

3). 当数据需求时间等于数据到达时间时。这是最小时钟执行频率。刚好满足时序

最小时钟周期为:Tmin = Tco + Tdata + Tsu - Tskew

3、其余时间参数

3.1 时钟到达时间(Clock Arrival Time)
时钟从latch边沿到达锁存寄存器时钟输入端所消耗的时间为时钟到达时间

时钟到达时间计算公式例如以下:Clock Arrival Time = Lacth edge + Tclk2

3.2 数据需求时间(Data Required Time)
在时钟锁存的建立时间和保持时间之间数据必须稳定,从源时钟起点达到这样的稳定状态须要的时间即为数据需求时间

(建立)数据需求时间计算公式例如以下:Data Required Time = Clock Arrival Time - Tsu

(保持)数据需求时间计算公式例如以下:Data Required Time = Clock Arrival Time + Th

(1) D触发器本身也有建立/保持时间的概念,称之为寄存器建立时间门限和寄存器保持时间门限,这是一个固有属性,是确定的、不变的。当理想状态时,我们讨论建立/保持时间就相当于讨论D触发器的这一固有属性。

(2) FPGA所有时序问题,根本原因都是“建立时间和保持时间”的问题。

(3) 解决建立时间不足的方法是“减少延时”,而解决保持时间不足的方法是“增加延时”。

3.3 建立时间余量(setup slack)和保持时间余量(hold slack)
当数据需求时间大于数据到达时间时,就说时间有余量,Slack是表示设计是否满足时序的一个称谓

3.3.1 建立时间余量
Tsu slack = Data Required Arrival time - Data Arrival Time = Tskew -(Tco + Tdata)- Tsu + Tcyc

3.3.2 保持时间余量
Th slack = Data Finish time - Data Required Finish time = (Tco + Tdata)- Tskew - Th

注:

  • Lunch edge:发射沿,以 clk_pad 为基准,一般看成 0 时刻。实际时间是上一个寄存器所用的时间,因此用 clk1,看数据到达下一个寄存器的 D 端用了多久时间,结束时间又是多久。
  • Latch edge:接收沿,以 clk_pad 为基准,一般看成 0+Tcyc 时刻,要求时间是下一个寄存器计算的时间,所以用 clk2,看它自身需要的到达时间和结束时间是什么时候。
  • 当时间余量为0时,Th和Tsu取最小值:

最小建立时间 Tsu ≤ Tskew - (Tco + Tdata) +Tcyc

**最小保持时间 **Th ≤ (Tco + Tdata)- Tskew

  • 组合逻辑最大延时Tdata = Tcyc - (Tsu + Th)

3.2 时序约束在实际项目中的运用

1)查看各个路径的具体时序分析

![](https://cdn.nlark.com/yuque/0/2024/png/42573124/1721205809942-295391f4-ab13-4181-8263-7e18026f6d52.png)

2)分析数据到达时间和保持时间

![](https://cdn.nlark.com/yuque/0/2024/png/42573124/1721206250160-c25f1b7a-9a1f-4a5c-b40e-80b25389273b.png)

3)根据上述方法,分析得出出现问题的地方,再利用时序约束方法对问题点进行约束。

posted @ 2025-09-09 19:33  dMing`  阅读(123)  评论(0)    收藏  举报