核心频率的约束.docx
- 文档编号:13155163
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:16
- 大小:644.96KB
核心频率的约束.docx
《核心频率的约束.docx》由会员分享,可在线阅读,更多相关《核心频率的约束.docx(16页珍藏版)》请在冰点文库上搜索。
核心频率的约束
添加约束的原则为先添加全局约束,再补充局部约束,而且局部约束比全局约束宽松,其目的是在可能的地方尽量放松约束,提高布线成功概率,减少ISE布局布线时间。
典型的全局约束分成周期约束和偏移约束,本节主要讲述的就是这两种约束。
周期约束主要是对某一个时钟域的时钟进行约束,有两种方式:
1、NET"trn_clk_s"PERIOD=8ns;
2、NET"trn_clk_s"TNM_NET="USERCLK";
TIMESPEC"TS_USERCLK"=PERIOD"USERCLK"125MHzHIGH50%;
第二种方法可以用来衍生约束派生时钟。
NET"clk_1"TNM_NET="clk_syn";
TIMESPEC"TS_clk_syn"=PERIOD"clk_syn"5ns;
NET"clk_2"TNM_NET="clk_syn_n";
TIMESPEC"TS_clk_syn_n"=PERIOD"clk_syn_n"clk_synPHASE+2.5ns;
NET"clk_2"TNM_NET="clk_syn_m";
TIMESPEC"TS_clk_syn_m"=PERIOD"clk_syn_m"clk_syn/2;
偏移约束也是一种基本时序约束,规定了外部时钟和数据输入和输出引脚之间的相对时序关系,只能用于端口信号,不能用于内部信号。
当考虑到PCB的布局布线对入口时序有影响的时候,需要采用此种约束。
主要分成OFFSET_IN_AFTER、OFFSET_IN_BEFORE、OFFSET_OUT_AFTER和OFFSET_OUT_BEFORE。
1、NET"DATA_IN"OFFSET=IN10.0BEFORE"CLK_50MHz";
表明在时钟信号上升沿到达前的10ns内,数据必须到达输入管脚,实际上约束的是保持时间,说明Thu=Tp-Tc1>=Tp-10;
2、NET"DATA_IN"OFFSET=IN10.0AFTER"CLK_50MHz";
表明在时钟信号上升沿到达后的10ns内,数据必须到达输入管脚,实际上约束的是建立时间,说明Tsu=Tp-Tc2>=Tp-10;
3、NET"DATA_OUT"OFFSET=IN10.0BEFORE"CLK_50MHz";
表明在时钟信号上升沿到达前的10ns内,输出信号必须离开数据管脚,基本上是下一级逻辑建立时间的上限。
4、NET"DATA_OUT"OFFSET=OUT10.0AFTER"CLK_50MHz";
表明在时钟信号上升沿到达后的10ns内,输出信号必须保持在输出管脚上,是芯片内部输出延时的上限。
资料:
1、XilinxFPGA设计约束的分类
摘要:
本文主要通过一个实例具体介绍ISE中通过编辑UCF文件来对FPGA设计进行约束,主要涉及到的约束包括时钟约束、群组约束、逻辑管脚约束以及物理属性约束。
Xilinx定义了如下几种约束类型:
•“AttributesandConstraints”
•“CPLDFitter”
•“GroupingConstraints”
•“LogicalConstraints”
•“PhysicalConstraints”
•“MappingDirectives”
•“PlacementConstraints”
•“RoutingDirectives”
•“SynthesisConstraints”
•“TimingConstraints”
•“ConfigurationConstraints”
通过编译UCF(userconstraintsfile)文件可以完成上述的功能。
还是用实例来讲UCF的语法是如何的。
图1RTLSchematic
图1是顶层文件RTL图,左侧一列输入,右侧为输出,这些端口需要分配相应的FPGA管脚。
表1.UCFexample
对上面的UCF文件进行一些注释:
该UCF文件主要是完成了管脚的约束、时钟的约束,以及组的约束。
第一、二行:
主要定义了时钟以及对应的物理管脚。
第一行,端口pin_sysclk_i分配到FPGA管脚AD12,并放到了pin_sysclk_igroup中。
那如何得知是AD12的管脚呢,请看图2,FPGA管脚AD12是一个66MHz的外部时钟。
FPGA的开发板肯定有电路原理图供你分配外部管脚。
图2,电路原理图
第二行:
时钟说明:
周期15ns,占空比50%。
关键词TIMESPEC(TimingSpecifications),即时钟说明。
一般的语法是:
TIMESPEC"TSidentifier"=PERIOD"timegroup_name"value[units];
其中TSidentifier用来指定TS(时钟说明)的唯一的名称。
第七行:
pin_plx_lholda_o连接至物理管脚D17,并配置该管脚电平变化的速率。
关键词:
SLEW,用来定义电平变化的速率的,一般语法是:
NET"top_level_port_name"SLEW="value";
其中value={FAST|SLOW|QUIETIO},QUIETIO仅用在Spartan-3A。
第十行:
定义pin_plx_ads_n_i输入跟时钟的关系。
OFFSETIN和OFFSETOUT的约束。
OFFSETIN定义了数据输入的时间和接收数据时钟沿(captureEdge)的关系。
一般的语法是:
OFFSET=INvalueVALIDvalueBEFOREclock
OFFSET=OUTvalueVALIDvalueAFTERclock
图3时序图(OFFSETIN)
例子:
NET"SysCLk"TNM_NET="SysClk";
TIMESPEC"TS_SysClk"=PERIOD"SysClk"5nsHIGH50%;
OFFSET=IN5nsVALID5nsBEFORE"SysClk";
上面的定义了基于SysClk的全局OFFSETIN的属性。
时序可看图3.
图4时序图(OFFSETOUT)
例子:
NET"ClkIn"TNM_NET="ClkIn";
OFFSET=OUT5nsAFTER"ClkIn";
上面设置主要是定了了时钟跟数据的时间关系,时序图4。
可以看到这时一种全局定义,Data1和Data2输出时间都受到OFFSET=OUT5nsAFTER"ClkIn"的约束。
如果需要单独定义输出端口的OFFSETOUT的,需要制定相应的NET,可参考表1中的第57行。
第18至49行:
pin_plx_lad_io<*>被归到了名称为LAD的TMN(Timingname),这个可以说是GROUP的约束。
这样往往给约束带来方便,不用一个一个的NET或者INST进行约束。
第50至51行:
对TIMEGRP是LAD进行OFFSETIN和OUT的定义。
在时序约束中,在这里还未提及FROMTO的约束。
FROMTO的约束主要是用来两个同步模块之间的时间关系的约束。
在这里不做深入的讨论。
至此,基本上把一般的UCF文件的作用进行了注释。
注:
一般的时间的约束需要通过静态的时序分析,然后再设定相应PERIOD,OFFSETIN以及OFFEETOUT等的时间参数。
当然在例子中还没有涉及到区域的约束。
下面会试图说一下。
ISE进行综合后会将设计代码生成相应的逻辑网表,然后经过translate过程,转换到Xilinx特定的底层结构和硬件原语,MAP过程就是将映射到具体型号的器件上,最后就是就是布线和布局的操作了。
区域的约束相当于将布局过程中指定特定型号的器件的位置,这完全可以通过FloorPlanner的GUI界面进行设置,用图形界面设置完后,配置信息会放到UCF中,这里只介绍UCF的使用。
例如:
INST"Done"LOC="SLICE_X32Y163";#Done映射为一个寄存器,映射到SLICE_X32Y163的位置上。
(32,163)相当于一个坐标,可以用FloorPlanner进行查看。
INST"BRAM4/BU2/U0/blk_mem_generator/valid.cstr/ramloop[0].ram.r/v4_init.ram/TRUE_DP.SINGLE_PRIM.TDP"LOC="RAMB16_X2Y22";#RAM16的一个映射。
又例如,X,Y,Z是对应的是寄存器。
现在想把它们放在一个指定的区域中,我可以这样写,
INST“X”AREA_GROUP=reg;
INST“X”AREA_GROUP=reg;
INST“X”AREA_GROUP=reg;
AREA_GROUPregRANGE=SLICE_X1Y1:
SLICE_X1Y6;
注:
如何查看INST中的名称呢?
在ISE中Timingconstraintseditor中可以查看。
注:
NET,LOC,TNM_NET,TIMESPEC,PERIOD,OFFSET,IN,OUT,SLEW,HIGH等都是关键字,UCF文件是大小敏感的,端口名称必须和源代码中的名字一致,且端口名字不能和关键字一样。
但是关键字NET是不区分大小写的。
2、约束、时序分析的概念
很多人询问关于约束、时序分析的问题,比如:
如何设置setup,hold时间?
如何使用全局时钟和第二全局时钟(长线资源)?
如何进行分组约束?
如何约束某部分组合逻辑?
如何通过约束保证异步时钟域之间的数据交换可靠?
如何使用I/O逻辑单元内部的寄存器资源?
如何进行物理区域约束,完成物理综合和物理实现?
为了解决大家的疑难,我们将逐一讨论这些问题。
(注:
以下主要设计时序约束)
A时序约束的概念和基本策略
时序约束主要包括周期约束(FFS到FFS,即触发器到触发器)和偏移约束(IPAD到FFS、FFS到OPAD)以及静态路径约束(IPAD到OPAD)等3种。
通过附加约束条件可以使综合布线工具调整映射和布局布线过程,使设计达到时序要求。
例如用OFFSET_IN_BEFORE约束可以告诉综合布线工具输入信号在时钟之前什么时候准备好,综合布线工具就可以根据这个约束调整与IPAD相连的LogicCircuitry的综合实现过程,使结果满足FFS的建立时间要求。
附加时序约束的一般策略是先附加全局约束,然后对快速和慢速例外路径附加专门约束。
附加全局约束时,首先定义设计的所有时钟,对各时钟域内的同步元件进行分组,对分组附加周期约束,然后对FPGA/CPLD输入输出PAD附加偏移约束、对全组合逻辑的PADTOPAD路径附加约束。
附加专门约束时,首先约束分组之间的路径,然后约束快、慢速例外路径和多周期路径,以及其他特殊路径。
B附加约束的基本作用
1.提高设计的工作频率
对很多数字电路设计来说,提高工作频率非常重要,因为高工作频率意味着高处理能力。
通过附加约束可以控制逻辑的综合、映射、布局和布线,以减小逻辑和布线延时,从而提高工作频率。
2.获得正确的时序分析报告
几乎所有的FPGA设计平台都包含静态时序分析工具,利用这类工具可以获得映射或布局布线后的时序分析报告,从而对设计的性能做出评估。
静态时序分析工具以约束作为判断时序是否满足设计要求的标准,因此要求设计者正确输入约束,以便静态时序分析工具输出正确的时序分析报告。
3.指定FPGA/CPLD引脚位置与电气标准
FPGA/CPLD的可编程特性使电路板设计加工和FPGA/CPLD设计可以同时进行,而不必等FPGA/CPLD引脚位置完全确定,从而节省了系统开发时间。
这样,电路板加工完成后,设计者要根据电路板的走线对FPGA/CPLD加上引脚位置约束,使FPGA/CPLD与电路板正确连接。
另外通过约束还可以指定IO引脚所支持的接口标准和其他电气特性。
为了满足日新月异的通信发展,Xilinx新型FPGA/CPLD可以通过IO引脚约束设置支持诸如AGP、BLVDS、CTT、GTL、GTLP、HSTL、LDT、LVCMOS、LVDCI、LVDS、LVPECL、LVDSEXT、LVTTL、PCI、PCIX、SSTL、ULVDS等丰富的IO接口标准。
另外通过区域约束还能在FPGA上规划各个模块的实现区域,通过物理布局布线约束,完成模块化设计等。
C周期(PERIOD)的含义
周期的含义是时序中最简单也是最重要的含义,其它很多时序概念会因为软件商不同略有差异,而周期的概念确是最通用的,周期的概念是FPGA/ASIC时序定义的基础概念。
后面要讲到的其它时序约束都是建立在周期约束的基础上的,很多其它时序公式,可以用周期公式推导。
周期约束是一个基本时序和综合约束,它附加在时钟网线上,时序分析工具根据PERIOD约束检查时钟域内所有同步元件的时序是否满足要求。
PERIOD约束会自动处理寄存器时钟端的反相问题,如果相邻同步元件时钟相位相反,那么它们之间的延迟将被默认限制为PERIOD约束值的一半。
如下图所示,
图1周期的定义
时钟的最小周期为:
TCLK=TCKO+TLOGIC+TNET+TSETUP-TCLK_SKEW
TCLK_SKEW=TCD2-TCD1
其中TCKO为时钟输出时间,TLOGIC为同步元件之间的组合逻辑延迟,TNET为网线延迟,TSETUP为同步元件的建立时间,TCLK_SKEW为时钟信号TCD2和TCD1延迟的差别。
D数据和时钟之间的约束
为了确保芯片数据采样可靠和下级芯片之间正确地交换数据,需要约束外部时钟和数据输入输出引脚之间的时序关系(或者内部时钟和外部输入/输出数据之间的关系,这仅仅是从采用了不同的参照系罢了)。
约束的内容为告诉综合器、布线器输入数据到达的时刻,或者输出数据稳定的时刻,从而保证与下一级电路的时序关系。
这种时序约束在Xilinx中用SetuptoClock(edge),Clock(edge)tohold等表示。
在Altera里常用tsu(InputSetupTimes)、th(InputHoldTimes)、tco(ClocktoOutDelays)来表示。
很多其它时序工具直接用setup和hold表示。
其实他们所要描述的是同一个问题,仅仅是时间节点的定义上略有不同。
下面依次介绍。
E关于输入到达时间
Xilinx的"输入到达时间的计算"时序描述如下图所示:
图2输入到达时间示意图
定义的含义是输入数据在有效时钟沿之后的TARRIVAL时刻到达。
则,
TARRIVAL=TCKO+TOUTPUT+TLOGIC 公式1
根据上面介绍的周期(Period)公式,我们可以得到:
Tcko+Toutput+Tlogic+Tinput+Tsetup-Tclk_skew=Tclk; 公式2
将公式1代入公式2:
Tarrival+Tinput+Tsetup-Tclk_skew=Tclk,而Tclk_skew满足时序关系后为负,所以
TARRIVAL+TINPUT+TSETUP 这就是Tarrival应该满足的时序关系。 其中TINPUT为输入端的组合逻辑、网线和PAD的延迟之和,TSETUP为输入同步元件的建立时间。 F数据延时和数据到达时间的关系 图3数据延时和数据到达时间示意图 TDELAY为要求的芯片内部输入延迟,其最大值TDELAY_MAX与输入数据到达时间TARRIVAL的关系如上图所示。 也就是说: TDELAY_MAX+TARRIVAL=TPERIOD 公式4 所以: TDELAY G要求输出的稳定时间 从下一级输入端的延迟可以计算出当前设计输出的数据必须在何时稳定下来,根据这个数据对设计输出端的逻辑布线进行约束,以满足下一级的建立时间要求,保证下一级采样的数据是稳定的。 计算要求的输出稳定时间如下图所示: 图4要求的输出稳定时间示意图 公式的推导如下: 定义: TSTABLE=TLOGIC+TINPUT+TSETUP 从前面帖子介绍的周期(Period)公式,可以得到(其中TCLK_SKEW=TCLK1-TCLK2): TCLK=TCKO+TOUTPUT+TLOGIC+TINPUT+TSETUP+TCLK_SKEW 将TSTABLE的定义代入到周期公式,可以得到: TCLK=TCKO+TOUTPUT+TSTABLE+TCLK_SKEW 所以: TCKO+TOUTPUT+TSTABLE 这个公式就是TSTABLE必须要满足的基本时序关系,即本级的输出应该保持怎么样的稳定状态,才能保证下级芯片的采样稳定。 有时我们也称这个约束关系是输出数据的保持时间的时序约束关系。 只要满足上述关系,当前芯片输出端的数据比时钟上升沿提早TSTABLE时间稳定下来,下一级就可以正确地采样数据。 其中TOUTPUT为设计中连接同步元件输出端的组合逻辑、网线和PAD的延迟之和,TCKO为同步元件时钟输出时间。 H实施时序约束的方法和命令 实施上述约束的基本方法是,根据已知时序信息,推算需要约束的时间值,实施约束。 具体地说是这样的,首先对于一般设计,首先掌握的是TCLK,这个对于设计者来说是个已知量。 前面介绍公式和图中的TCKO和TSETUP(注: 有的工具软件对TCKO和TSETUP的定义与前面图形不同,还包含了到达同步器件的一段logic的时延)是器件内部固有的一个时间量,一般我们选取典型值,对于FPGA,这个量值比较小,一般不大于1~2ns。 比较难以确定的是TINPUT和TOUTPUT两个时间量。 约束输入时间偏移,需要知道TINPUT,TINPUT为输入端的组合逻辑、网线和PAD的延迟之和,PAD的延时也根据器件型号也有典型值可选,但是到达输入端的组合逻辑电路和网线的延时就比较难以确定了,只能通过静态时序分析工具分析,或者通过底层布局布线工具量取,有很大的经验和试探的成分在里面。 约束输出时间偏移,需要知道TOUTPUT,TOUTPUT为设计中连接同步元件输出端的组合逻辑、网线和PAD的延迟之和,仍然是到达输出端的组合逻辑电路和网线的延时就比较难以确定,需要通过静态时序分析工具分析,或者通过底层布局布线工具量取,有很大的经验和试探的成分在里面。 约束的具体命令根据约束工具不同而异,首先说使用Xilinx器件的情况下,实施上述约束的命令和方法。 Xilinx把上述约束统称为: OFFSET约束(偏移约束),一共有4个相关约束属性: OFFSET_IN_BEFORE、OFFSET_IN_AFTER、OFFSET_OUT_BEFORE和OFFSET_OUT_AFTER。 其中前两个属性叫做输入偏移(OFFSET_IN)约束,基本功能相似,仅仅是约束取的参考对象不同而已。 后两个属性叫做输出偏移(OFFSET_OUT)约束,基本功能相似,也是约束取的参考对象不同而已。 为了便于理解,举例说明。 输入偏移约束: 时钟周期为20ns,前级寄存器的TCKO选择1ns,前级输出逻辑延时TOUTPUT为3ns,中间逻辑TLOGIC的延时为10ns,那么TARRIVAL=14ns,于是可以在数据输入引脚附加NETDATA_INOFFET=IN14nsAFTERCLK约束,也可以使用OFFSET_IN_BEFORE对芯片内部的输入逻辑进行约束,其语法如下: NETDATA_INOFFET=INTDELAYBEFORECLK 其中TDELAY为要求的芯片内部输入延迟,其最大值与输入数据到达时间TARRIVAL的关系: TDELAY_MAX+TARRIVAL=TPERIOD,所以TDELAY 输出偏移约束: 设时钟周期为20ns,后级输入逻辑延时TINPUT为4ns、建立时间TSETUP为1ns,中间逻辑TLOGIC的延时为10ns,那么TSTABLE=15ns,于是可以在数据输入引脚附加NETDATA_OUTOFFET=OUT15nsBEFORECLK约束,也可以直接对芯片内部的输出逻辑直接进行约束,NETDATA_OUTOFFET=OUTTOUTPUT_DELAYAFTERCLK,其中TOUTPUT_DELAY为要求的芯片内部输出延迟,其最大值与要求的输出数据稳定时间TSTABLE的关系为: TOUTPUT_DELAY_MAX+TSTABLE=TPERIOD。 TOUT_DELAY IAltera对应的时序概念 下面主要介绍Altera对应的这些时序概念和约束方法。 前面首先介绍的第一个时序概念是周期(Period),这个概念是FPGA/ASIC通用的一个概念,各方的定义相当统一,至多是描述方式不同罢了,所有的FPGA设计都首先要进行周期约束,这样做的好处除了在综合与布局布线时给出规定目标外,还能让时序分析工具考察整个设计的Fmax等。 Altera的周期定义如下图所示,公式描述如下: 图5Altera的Period示意图 ClockPeriod=Clk-to-out+DataDelay+SetupTime-ClkSkew 即,Tclk=Tco+B+Tsu-(E-C)Fmax=1/Tclk 对比一下前面的介绍,只要理解了B包含了两级寄存器之间的所有logic和net的延时就会发现与前面公式完全一致。 JAltera的其他基本时序概念 ClockSetupTime(tsu)要想正确采样数据,就必须使数据和使能信号在有效时钟沿到达前就准备好,所谓时钟建立时间就是指时钟到达前,数据和使能已经准备好的最小时间间隔。 如下图所示: 图6tsu示意图 (注: 这里定义Setup时间是站在同步时序整个路径上的,需要区别的是另一个概念Microtsu。 Microtsu指的是一个触发器内部的建立时间,它是触发器的固有属性,一般典型值小于1~2ns。 在Xilinx等的时序概念中,称Altera的Microtsu为setup时间,用Tsetup表示,请大家区分一下。 回到Altera的时序概念,Altera的tsu定义如下: tsu=DataDelay–ClockDelay+Microtsu) ClockHoldTime(tH)时钟保持时间是只能保证有效时钟沿正确采用的数据和使能信号的最小稳定时间。 其定义如下图所示: 图7tH示意图 定义的公式为: tH=ClockDelay–DataDelay+MicrotH 注: 其
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 核心 频率 约束