FPGA设计之时序约束---常用指令与流程

约束流程

	说到FPGA时序约束的流程,不同的公司可能有些不一样。反正条条大路通罗马,找到一种适合自己的就行了。从系统上来看,同步时序约束可以分为系统同步与源同步两大类。简单点来说,系统同步是指FPGA与外部器件共用外部时钟;源同步(SDR,DDR)即时钟与数据一起从上游器件发送过来的情况。在设计当中,我们遇到的绝大部分都是针对源同步的时序约束问题。所以下文讲述的主要是针对源同步的时序约束。
根据网络上收集的资料以及结合自己的使用习惯,我比较趋向于下面的约束流程方式:时序约束一共包含以下几个步骤:时钟约束、IO约束以及时序例外。这几个步骤应该可以解决我们设计当中绝大多数情况下的时序约束问题。
	1.首先约束时钟。输入时钟,输出时钟。从种类 来看不外乎以下几种:单端输入时钟、差分输入时钟、GT或恢复时钟(例如LVDS信号恢复出来的时钟)、PLL产生的时钟以及自己产生的门控时钟。
	2.IO约束。只有等待内部时钟完全通过后,再配置input delay和output delays,告知FPGA外部端口的数据时序关系。
	3.时序例外。在约束完时钟以及IO后,还是有时序违例的时候,注意检查一下是否有时序例外的情况,例如多周期时钟路径、异步时钟、常量、以及互斥时钟路径等等。

常用指令

下面我们就根据约束的流程来介绍一下每个步骤中的常用指令。

时钟约束

常用指令:Create_clock、Create_generated_clock、derive pll_clocks、create_virtual_clock。

对时钟的约束,首先要明确,我们要约束的时钟有哪些,然后针对不同的时钟进行约束。下面针对不同类型的时钟,对其约束的指令作简要分析。

单端输入时钟:

 

图1   单端输入时钟约束

这里用到了create_clock,一开始不熟悉语法的同学可以通过Timequest 的GUI界面或者Templete里面的模板里找到该指令。

差分输入时钟:

差分输入时钟,只需约束P端输入时钟即可,方法同上。

PLL产生的时钟:

针对PLL产生的时钟一般有两种方式。一种是通过derive pll_clocks即可,PLL会根据所设定的参数,自行约束输出时钟。这样做的好处就是,指令少,当PLL煽出的时钟比较多的时候,很有优势,不利的地方在于,PLL生产的时钟名字命名不可把控,区分度不明显,不利于后续的引用。所以我比较趋向于后面一种方式,是通过Create_clock、Create_generated_clock这两条指令完成。

 

图2   PLL生成的时钟约束

 

首先用create_clock指令对输入的时钟clk_in进行约束,然后通过create_generated_clock指令对PLL的输出时钟进行约束,这里PLL的输出时钟只是做了90°的相位偏移,频率不变

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值