1、时序问题的简介(个人理解)
关键路径延时的倒数就是系统的最大频率,因为要想保证系统准确的运行,需要前一个寄存器的内容通过组合逻辑的最大延时路径在一个时钟周期之内达到下一个寄存器。关键路径的最大组合延时不变,则系统只能降频工作,使得一个时钟周期能让前一个寄存器内容,传到下一个寄存器中。否则就不能保证逻辑门的正常翻转。
时序约束的基本介绍:1、https://www.jianshu.com/p/2869e7eee4fc
2、https://zhuanlan.zhihu.com/p/140727892
2、建立时间,保持时间,输出响应时间
建立时间(Tsu:set up time)
是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被稳定的打入触发器,Tsu就是指这个最小的稳定时间。
保持时间(Th:hold time)
是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被稳定的打入触发器,Th就是指这个最小的保持时间。
输出响应时间(Tco)
触发器输出的响应时间,也就是触发器的输出在clk时钟上升沿到来之后多长的时间内发生变化,也即触发器的输出延时。
3、时序优化的基本思路
最大时钟频率计算(最小时钟周期):$T_{min}=T_{co}+T_{data}+T_{us}$
其中$T_{min}$为电路最小时钟周期,就是最大的时钟频率
其中$T_{co}$为寄存器延时,通常情况下,寄存器延时大于保持时间,因而在计算时钟频率时采用最坏情况(即采用$T_{co}$计算)
其中$T_{data}$为组合逻辑延时
其中$T_{us}$为建立时间
因为建立时间、保持时间、寄存器延时为固定参数,不变。因而想提升系统时钟频率需要改变组合逻辑延时
4、TimeQuest 初步使用
1、建立基本的quartus工程
2、进行全编译
3、点击时序分析工具
4、点击 建立时序网表
5、点击创建时钟(要想看时钟能不能跑到200M,就要将时钟指定为200M)
这一步就是先创建一个某频率的时钟,然后将自己编写电路中的时钟指定为这个时钟,之后再进行分析
其中 1:创建时钟的名字,可以任意选取
其中 2:所创建时钟的时钟周期
其中3,4:一个时钟周期的上升沿开始时间和下降沿时间,可以调节时钟的占空比(可以不填写,则默认占空比为50%)
其中 5:为这个时钟指定的自己编写电路中的时钟(点开5后面的三个点有如下)
6、指定时钟
点击list,找到clk 点击向右移动,将clk添加到右侧,然后就是ok ,run就可以
7、查看报告,如图点击即可
report窗口中没有红色,说明当前设计的电路可以跑到我们指定的时钟频率
若report窗口中有红色,则说明当前设计电路跑不到指定的时钟频率,可以通过查看,不满足的延时路径,如下点击
可以根据延时路径对设计进行优化。
5、时序约束步骤
其中系统同步:上游器件只传递给下游数据,时钟是共用同一个时钟
其中源同步:上游器件同时传递给下游时钟和数据
其中SDR:指的是指时钟只在上升沿进行采样(这里表现的是边沿对齐)
其中DDR:上升沿和下降沿都会进行采样(这里表现的是边沿对齐)
其中中心对齐:指的是时钟上升沿在数据中间
其中边沿对齐:指的是时钟上升沿在数据边沿
时序约束配置的基本方式:按照顺序图查询相应情况,按要求进行约束。1、配置时钟 2、时钟配置通过后,配置input delays 和output delays 3、在接近结束时配置时序例外
6、时序约束步骤(具体)
时钟
一、输入时钟
1.输入管脚CLK :create_clock -name SysClk -period 10 waveform {0 5} [get_ports Clk]
创建时钟 名为 SysClk 时钟周期 10ns 波形高电平为0到5 对应物理引脚为Clk
2.差分时钟
3.GT或恢复的时钟
二、PLL等衍生时钟
三、自己分频的时钟