EDN首页   博客首页 用户登陆  |  注册
aaa
发表于 2009/8/26 19:19:45

3

关于投票

recovery时序优化一例

recovery时序优化一例

    TimeQuest中的recovery/removal检查是对工程中的各种异步控制信号(包括异步复位信号、异步使能信号等)的时序进行分析。recovery时间是指在有效时钟沿到来之前异步控制信号必须保持稳定的一段时间,和数据的建立时间概念是相似的;removal时间是指在有效时钟沿到来之后异步控制信号必须保持不变的一段时间,和数据的保持时间概念是相似的。它们的时序余量计算公式也和建立时间、保持时间相似。

如图1所示,查看TimeQuest中的recovery检查报告,它对该实例工程的3个异步清除信号(sysrst_nr2sdwrad_clrvga_validr)进行检查。sysrst_nr2是该工程的系统复位信号,而sdwrad_clrvga_validr是由内部逻辑产生的,它们既作为内部逻辑的同步清除信号(不进行recovery/removal检查),也分别作为内部两个FIFO的异步复位信号(这部分路径将进行recovery/removal检查)。

点击看大图

1

    由于数据setup time/hold time检查和控制信号的recovery/removal检查都是对信号与时钟沿关系的时序分析,而且它们的分析计算公式都是类似的,所以一般信号的路径进行setup time/hold time检查,而异步控制信号的路径将进行recovery/removal检查。TimeQuest不会同时对信号既进行setup time/hold time检查,又进行recovery/removal检查,只是二者取一。

    在该工程中,sdwrad_clr的产生是由5.4s定时器cnt5s控制。当状态机sdinit_nstate处于SD_DELAY状态时,cnt5s开始计数,值为28'hffffff0sdwrad_clr将产生一个时钟周期宽度的高脉冲,这个高脉冲将作为FIFO的异步清除信号。下述代码即sdwrad_clr信号的产生逻辑。

reg[27:0] cnt5s;    //5.4s定时计数器

 

    //5.4s计数

always @(posedge clk or negedge rst_n)

    if(!rst_n) cnt5s <= 28'd0;

    else if(sdinit_nstate == SD_DELAY) cnt5s <= cnt5s+1'b1;

    else cnt5s <= 28'd0;

 

//SDRAM写控制相关信号清零复位信号,高有效

wire sdwrad_clr = (cnt5s == 28'hffffff0);  

 

    下面来看看时序分析报告中异步清除信号sdwrad_clrrecovery检查。如图2所示。由于时序分析的起点和终点都是以寄存器为基础的,所以作为wiresdwrad_clr不会出现在recovery检查的“From Node”中,取而代之的是直接控制sdwrad_clr输出的计数器cnt5s的全部28位寄存器。很显然,这里需要进行recovery检查的路径会比我们的预想多得多。这里最坏recovery检查slack=11.453ns(远远满足我们的要求了)。

点击看大图

2

    如图3和图4所示,分别是从Chip Planner中查看到cnt5s[27:0]在器件中的布局(右侧深蓝色部分)以及扇出路径。

点击看大图

3

点击看大图

4

    单从功能和时序上,上述代码已经满足了要求,只是最后的布局布线上让人有些不满意。显然,它可以进一步的优化,办法很简单,只要把异步复位信号sdwrad_clr的输出用一个寄存器锁存一拍后再输出即可。下面是优化后的代码。

reg[27:0] cnt5s;    //5.4s定时计数器

 

    //5.4s计数

always @(posedge clk or negedge rst_n)

    if(!rst_n) cnt5s <= 28'd0;

    else if(sdinit_nstate == SD_DELAY) cnt5s <= cnt5s+1'b1;

    else cnt5s <= 28'd0;

 

reg sdwrad_clr;     //SDRAM写控制相关信号清零复位信号,高有效

always @(posedge clk or negedge rst_n)

    if(!rst_n) sdwrad_clr <= 1'b0;

    else if(cnt5s == 28'hffffff0) sdwrad_clr <= 1'b1;

    else sdwrad_clr <= 1'b0;

 

    如图5所示,优化后的recovery检查的路径大大减少,只有原来的1/28。现在的“From Node”是寄存器sdwrad_clr。最坏的recovery检查slack=14.077ns,相比之前有了大幅度的提高。

点击看大图

5

    下面来看看代码优化后布局布线的变化,如图6和图7所示,分别为代码优化后从Chip Planner中查看到的cnt5s[27:0]在器件中的布局(右侧深蓝色部分)以及扇出路径。很明显,计数器cnt5s[27:0]的布局布线较之前有了很大的改观。

点击看大图

6

点击看大图

7

    从这个实例中,我们可以很深刻的体会到使用一些简单的代码优化技巧后给系统时序性能的改善带来的变化。尤其是FPGA内部产生的控制信号(不论是要作为后续电路的同步还是异步控制的信号),该信号在输出前应尽可能的减少组合逻辑数量,如果有可能,可以像我们的实例中那样先用寄存器锁存一拍再输出,尽量让控制信号“干干净净”的驱动后级电路。

 

 

系统分类: CPLD/FPGA  |  用户分类: Altera_TimeQuest  |  标签: recovery 时序 优化  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(764) | 回复(6)

发表于 2009/8/11 21:52:54

1

关于投票

时钟相关概念

 

二、时钟相关概念

       时钟这个并不陌生的词汇,特权同学也不大做文章,就先举个最典型的时钟模型献给大家。如图4.2所示,理想的时钟模型是一个占空比为50%且周期固定的方波。 为一个时钟周期, 为高脉冲宽度, 为低脉冲宽度, = + 。占空比定义为高脉冲宽度与周期之比,即 /

点击看大图

4.2 理想时钟波形

       所谓建立时间( ),是指在时钟上升沿到来之前数据必须保持稳定的时间;所谓保持时间( ),是指在时钟上升沿到来以后数据必须保持稳定的时间。一个数据需要在时钟的上升沿被锁存,那么这个数据就必须在这个时钟上升沿的建立时间和保持时间内保持稳定。

点击看大图

4.3 建立和保持时间

       上面列举的是一个理想的时钟波形,而实际的时钟信号的分析却要比这复杂的多。时钟本身也具有一些不确定性,如时钟抖动(jitter)和时钟偏斜(skew)等。

时钟的边沿变化不可能总是理想的瞬变,它会有一个从高到低或者从低到高的变化过程,实际的情况抽象出来就如图4.4所示,时钟信号边沿变化的不确定时间我们称之为时钟偏斜(Clock skew)。再回到之前定义的建立时间和保持时间,严格的说,建立时间就应该是 + ,而保持时间也就应该是 + 了。

点击看大图

4.4 时钟抖动模型

       时序分析的起点是源寄存器(reg1),终点是目的寄存器(reg2)。时钟和其它信号的传输一样会有延时的。图4.5中,时钟信号从时钟源传输到源寄存器的延时定义为 ,传输到目的寄存器的延时定义为 。时钟网络延时就定义为 之差,即  = - ,这个概念在后面详细分析数据信号的传输中会涉及。

点击看大图

4.5 时钟偏斜的寄存器传输模型

       4.6是时钟偏斜模型的波形表示,在FPGA设计中,设计者不仅需要熟悉逻辑电路的寄存器模型,而且也需要看懂相应的波形图。

 点击看大图

4.6 时钟偏斜的波形图

系统分类: CPLD/FPGA  |  用户分类: Altera_TimeQuest  |  标签: 时钟 建立时间 保持时间 偏斜 抖动  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(684) | 回复(0)

发表于 2009/8/10 21:22:07

1

关于投票

静态时序分析的概念

静态时序分析的概念

何谓静态时序分析(Static Timing Analysis,简称STA)?

首先,我们应该对FPGA内部的工作方式有一些认识。FPGA的内部结构其实就好比一块PCB板,FPGA的逻辑阵列就好比PCB板上的一些分立元器件。PCB通过导线将具有相关电气特性的信号相连接,FPGA也需要通过内部连线将相关的逻辑节点导通。PCB板上的信号通过任何一个元器件都会产生一定的延时,FPGA的信号通过逻辑门传输也会产生延时。PCB的信号走线有延时,FPGA的信号走线也有延时。这就带来了一系列问题,一个信号从FPGA的一端输入,经过一定的逻辑处理后从FPGA的另一端输出,这期间会产生多大的延时呢?有多个总线信号从FPGA的一端输入,这条总线的各个信号经过逻辑处理后从FPGA的另一端输出,这条总线的各个信号的延时一致吗?我们之所以关心这些问题,是因为过长的延时或者一条总线多个信号传输时间的不一致,不仅会影响FPGA本身的性能,而且也会给FPGA之外的电路或者系统带来诸多问题。

言归正传吧,之所以引进静态时序分析的理论也正是基于上述的一些思考。它可以简单的定义为:设计者提出一些特定的时序要求(或者说是添加特定的时序约束),套用特定的时序模型,针对特定的电路进行分析。分析的最终结果当然是要求系统时序满足设计者提出的要求。

       下面举一个最简单的例子来说明时序分析的基本概念。假设信号需要从输入到输出在FPGA内部经过一些逻辑延时和路径延时。我们的系统要求这个信号在FPGA内部的延时不能超过15ns,而开发工具在执行过程中找到了如图4.1所示的一些可能的布局布线方式。那么,怎样的布局布线能够达到我们的要求呢?仔细分析一番,发现所有路径的延时可能为14ns14ns16ns17ns18ns,有两条路径能够满足要求,那么最后的布局布线就会选择满足要求的两条路径之一。

点击看大图

4.1 静态时序分析模型

       静态时序分析的前提就是设计者先提出要求,然后时序分析工具才会根据特定的时序模型进行分析,即有约束才会有分析。若设计者不添加时序约束,那么时序分析就无从谈起。特权同学常常碰见一些初学者在遇到问题时不问青红皂白就认为是时序问题,实际上只有在添加了时序约束后,系统的时序问题才有可能暴露出来。

 

系统分类: CPLD/FPGA  |  用户分类: Altera_TimeQuest  |  标签: 静态时序分析 STA FPAG  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(677) | 回复(1)

发表于 2009/4/28 18:43:01

1

关于投票

基于TimeQuest的reg2reg之Th分析

基于TimeQuestreg2regTh分析

 

       本想测试一下Optimize hold timing相关选项对时序收敛的影响,无意中让我解决了一个之前没有太深入思考而又隐隐有些不解的困惑。

       因为时序分析不仅仅是Tsu需要达到要求,而且Th也要达到要求。因为在实际设计中往往是Tsu影响着Fmax,所以大家可能在时序分析时更倾向于盯着Tsu看。但是如果Th没有达到时序收敛对于一个设计来说时同样致命的。那么,Quartus II及其Time QuestTh又是如何进行分析和优化呢?

       先说TimeQuest如何进行Th分析吧,对于IOhold time分析,TimeQuest是根据我们添加的input min delay或者output min delay进行分析的。

 

因为我们同时也会添加input max delay以及output max delay参数,那么就是说我们限定了与FPGA接口的信号的最快最慢的时序延时,从而TimeQuest根据这些条件进行建立保持时间分析。

对于IO的时序分析,无非时pin2reg或者reg2pin的时序分析,但是还有一个reg2reg的时序分析时不需要我们添加别的时序约束的(除了时钟约束)。那么TimeQuest如何进行reg2reg的分析呢?以往特权同学也忽略了这一点,以为TimeQuest只产生一种时序路径,并利用这个唯一的时序路径延时参数进行reg2reg的建立保持时间分析。所以有时候也在疑惑这一种路径延时参数到底表示的是最快的还是最慢的延时参数呢?因为时序分析中大多时遇到Fmax达不到要求,相应的Tsu也就是关注的重点,那么姑且认为这唯一的路径参数代表的就是最快的路径参数吧。然后便想当然的以为在QII的哪些地方进行设置后可以让TQ分析这个最慢的路径,找来找去好像Optimize hold timingOptimize fast-corner timing最像。但是资料翻来找去,发现这两个选项似乎是优化路径以达到Th要求。看来这个天真的想法并没有事实依据。

       其实TQ对于大多数的reg2reg路径是会有两条时序路径分析的,一条最快的用于Th分析,一条最慢的用于Tsu分析。特权同学在report timing选项里单选中一条路径进行分析时,就会产生该路径的两条不同的路径参数的slack分析。例如下面选择了计数器sapdiv_cnt[0]sapdiv_cnt[0]路径,那么在Tsu分析报告里出现了两条路径,它们的slack差别也很大,正所谓最快和最慢的路径。

 

点击看大图 

 

点击看大图

 

       Th的分析报告也同样的给出了两条路径。

 

点击看大图

 

点击看大图

 

从上面4个路径的分析来看,ThTsu各自分析的两条路径其实是相同的两条路径。

如果时序分析里Th无法到达要求,那么大家可以考虑开启选项Optimize hold timingOptimize fast-corner timing进行优化,本文就不详细讨论。

 

 

系统分类: CPLD/FPGA  |  用户分类: Altera_TimeQuest  |  标签: hold time TimeQuest reg2reg Th  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(704) | 回复(0)

发表于 2009/3/28 22:20:02

2

关于投票

源同步接口的时序模型

 源同步接口的时序模型

 

         自从对时序分析理论有深入学习以后,回头看看过去的一些设计中,其实还是存在不少问题的。重新拿起之前在VXP306板子上做的三星的K4S641632 SDRAM做的一些测试(这块板子的电源芯片烧了,一直没买到芯片换,只能闲置着了),后来移植到了自己做的EPM570板子上了,因为之前刚做好的时候测试,一直发现个“奇怪”的问题,也就是数据收发会间隔的在高位出现“0”,似乎有一定的规律,时间忙那块板子停下快半年没动了。现在忽然想拿它做测试好好分析一些SDRAM的时序。所以就有了下文。

         这个EPM570MAX II中资源较少的,但是做SDRAM的封装还是可以凑和的。不够因为我在里面做了一个数据写模块,串口发模块,资源占用也超了80%,这是不利因素之一。二是MAX II系列CPLD不支持Fast input/output register,也没有内部的PLL,所以在特权同学的《SRAM时序约束分析》中使用的EPM240是不足以胜任这样的“快速”存储器操作的(但是是用的50M的速率,后来根据系统状态妥协了改成25M),这个EPM570也有同样的劣势。但是实践上以后可以换器件(或者在Quartus II换器件分析),理论一定要先行。

 

         此外,特权同学找来了之前细读过的altera官方提供的应用笔记AN433,《Constraining and Analyzing Source-Synchronous Interfaces》,和这个应用笔记相对应的在altera官方网站的培训教程里你可以找到英文的视频版本。特权同学都认真的学习过,感兴趣的朋友可以看一下,呵呵,讲的远比我详细透彻。特权同学只是希望拿个SDRAM模型做个具体问题具体分析的范例。

 

源同步接口时序模型

         所谓源同步接口的概念是指与FPGA接口的外部器件的数据源和时钟源一样都是来自FPGA内部。一般异步RAMSRAM)的读写由WE#,OE#控制,和数据地址有一定的时序要求,但是个人感觉建模上好像不是和源同步接口很吻合,因为我们实际设计中很难把WE#,OE#信号当时钟控制。而典型的源同步接口当属SDRAM,很经典的数据和时钟接口控制。

点击看大图 

         上面就是一个源同步接口的模型,一般我们假定FPGATransmitter。这个ClockFPGA内部的走线或延时是可以根据设计需要进行调整的,最方便快捷而且高效稳定的调整当属PLL。而数据和时钟的关系一般是中心对齐方式,如下:

点击看大图 

点击看大图

 

         上图是单时钟沿采样模型(SDR SDRAM),下图是时钟双沿采样模型(DDR SDRAM)。也就是说,对于接收方而言,它一般是在Clock的上升沿或者下降沿采样data总线。如果有些器件的时序是边沿对齐(即数据和时钟同时变化),那么这个器件一定是在内部做了一些时钟的偏移工作,最终采样时刻的clock\data关系一定是中心对齐的模型。

         关于源同步接口的时序约束一般有三种:

1.       时钟clock约束;

2.       IOinput / output delay约束;

3.       时序例外。

(这里先假设你对SDRAM的接口和操作有一定的了解。具体可以参考我们分析的SDRAM芯片K4S641632datasheet。)

时钟约束在我们的SDRAM模型中针对的是SDRAM的输入时钟sdr_clkIO口的约束主要包括地址总线sdr_ab、数据总线sdr_db以及块地址信号sdr_bank,还有一些控制接口如sdr_cs_n,sdr_we_n,sdr_ras_n,sdr_cas_n;而时序例外我想对于SDRAM时钟有效信号sdr_cke除了上电等待的200us是低电平,其它时候都拉高了,所以可以设置为false路径。其实对于我的设计中sdr_cs_n也和sdr_cke一样,只有上电时等待的200us内为高(无效),此后一直出于片选状态,所以也可以设置为false路径。当然了设置为false路径我也必须充分考虑这个路径在跳变的那一个状态如果时序违规(即超出一个时钟周期),那么会不会对系统的性能造成影响。如果会,那么它就不应该是flase路径,但是特权同学分析了下,发现不存在这样的问题。设置flase路径注意是让实现工具在布局布线时不考虑这个路径,那么在同等条件下,就可以把一些走线资源让给关键路径,帮助达到时序收敛。说白了,时序例外无非就是在允许的条件下放松时序要求,从而整体上提高时序性能。

         关于源同步接口的分析方法,altera介绍了以系统为中心的方法和以FPGA为中心的方法。以系统为中心的分析,注意是针对FPGA与外部器件接口,外部器件的时序以及PCB板的走线延时等参数都明确的情况,例如我们的SDRAM接口设计宜采用此方法分析。而以FPGA为中心的分析方法是在假设外部与FPGA接口的器件的任何参数你不明确的情况下,来你来做时序约束分析,这个方法适合于让你来设计诸如SDRAM器件本身。

         下面分析的方法是以系统为中心。

         中央对齐方式的建立时间时序分析模型如下,实线为同沿传输分析,虚线为异沿传输分析。

点击看大图 

         中央对齐方式的保持时间时序分析模型如下,实线为同沿传输分析,虚线为异沿传输分析。

点击看大图 

         一般而言,如果你的设计中只采用同沿传输方式,那么你必须对异沿传输方式做一个false的例外约束;而相反的,如果你的设计中只采用异沿传输方式,那么你必须对同沿传输方式做一个false的例外约束。对于我的设计中,需要对异沿传输方式做一个false例外。

        

 

源同步输出

         时钟的产生方式有很多,上面也介绍过,比较稳定可控的是PLL时钟,或者内部逻辑比如状态机等产生的时钟,再或者直接使用系统输入时钟(正向或者反向)。该设计中由于器件所限,只能采取将输入时钟方向的方式产生SDRAM的时钟。基本的路径模型如下:

点击看大图        

         时钟的约束,包括creat clock/creat generated clock等,具体参考特权同学以前的博文。而我们的sdr_clk时钟是FPGA系统主时钟的反向,所以可以做如下约束:

         不知道为什么,如果用gengerated clock命令产生的以clk为源时钟的生成时钟TimeQuest总是给出警告,认为该语句无效,可能是因为这个sdr_sdramclk只是一个逻辑取反的关系,无法作为衍生时钟的关系。所以特权同学只能使用creat clock命令生成一个rise time="10",fall time="20"20ns的时钟。

create_clock -name {sys_clk} -period 20.000 -waveform { 0.000 10.000 } [get_ports {clk}]

create_clock -name {sdr_clk} -period 20.000 -waveform { 10.000 20.000 } [get_ports {sdram_clk}]

 

时序分析中涉及的一些output delay的计算公式:

Output max delay = max trace delay for data + tsu of external device – min trace delay for clock

Output min delay = min trace delay for data –th of external device – max trace delay for clock

         这些公式的具体分析这里不提了,可以参考官方的相关文档或者特权同学关于timequest的博文。Output max delay主要用于setup时间分析,而output min delay主要用于hold时间分析。

         由于output clock(作为SDRAM时钟)是data clkFPGA输入时钟)的反向,那么这个output clk除了有一定的逻辑延时外,加上reg2pin的延时,那么最后在输出端口相当于下面的模型了。因为SDRAM的数据锁存等操作还是使用的sdr_clk的上升沿,所以对于output delay的时序分析中launch edgelatch edge应该如下的红实线所示了。

点击看大图 

         由于使用sdr_clklatch edge无法得到想要clock network latency,所以使用chip planner查看了从sys_clksdr_clkpin2pin的延时。

点击看大图 

         SDC中添加了该时钟网络延时:

set_clock_latency -source   2.425 [get_clocks {sdr_clk}]

        

那么接下来的时序收敛与否就在于查看时序分析报告,如果这些SDRAM相关的setup slackhold slack都是正值,那么说明你的SDRAM控制所需要的建立保持时间是满足要求的。但是一般最理想的状态是setup slackhold slack保持平衡,这样的对于有效的数据采样窗口是很有利的。尤其对于高速接口更是如此,至于低速接口也许这个slack的要求低一些。为了保持两个slack的平衡,我们一般会调整SDRAM的时钟sdr_clk以到达我们的需要。

 

 

源同步输入

         Altera的介绍里说明的是这样一个源同步输入的模型,似乎时钟是由外部信号驱动的,但是我们的SDRAM模型中不是这样,在FPGA内部锁存数据时使用的还是FPGA内部的主时钟clk,但是其分析的过程其实和之前特权同学的SRAM里的差不多,具体就不讨论了。

点击看大图 

 

 

 

 

 

 

 

 

系统分类: CPLD/FPGA  |  用户分类: Altera_TimeQuest  |  标签: FPGA SDRAM 源同步接口 时序模型  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(999) | 回复(0)

发表于 2009/3/21 22:14:59

2

关于投票

Cyclone器件全局时钟尽在掌控

Cyclone器件全局时钟尽在掌控

 

         首先感谢wind330兄的《掌控全局时钟网络资源》一文对于我的帮助。本文结合cyclone器件(因为特权最近正在使用这个系列的器件)对FPGA的时钟资源进行一些探讨,或者说是特权同学的一点认识和大家分享一下,有不对的欢迎指正。

         翻开cyclone-handbookClock Management一章,其主要还是要介绍cyclone器件的PLL资源相关的内容。但是对于我们了解FPGA的全局时钟网络还是很有参考价值的。

         Cyclone系列的器件基本都有2PLLEP1C3例外只有一个PLL

点击看大图 

         上面这个图最说明问题,CLK0/CLK1作为PLL1的输入,CLK2/CLK3作为PLL2EP1C3没有)的输入。当然了,如果你尝试用上面所规定的时钟管脚以外的管脚作为PLL的输入,那么只会换来Quartus II的报错信息。

         而从上图我们可以看到PLL的输出最多可以有三个,c0,c1,e0c0c1一般作为内部时钟使用,而e0是只能作为外部输出时钟使用的,就是说这个PLL输出时钟必须直接连接到器件外部的pin上,如果你尝试在FPGA内部逻辑使用e0作为时钟,那么你同样只能换来Quartus II的报错信息。

         另外有一点必须提一下,先看下面的图。

点击看大图 

         绿色的方波是作为PLL输入的clk,而往下红色的分别是c0,c1,e0,最后面一个是所谓的Lock信号(拉高作为PLL输出有效信号)。也就是当PLL复位完成或者使能(到底要复位还是使能是可以在配置PLL时选择的)后若干个时钟周期后PLL的输出才会有效,那么在Lock拉高以后的PLL才是我们想要的。上面这个图里输入的clk和输出的时钟之间似乎没有相位差,是很理想的一个状态。但是实际上PLL出来的时钟和输入的clk之间总是存在相位差的,仿真后如下面的图。

点击看大图 

         所以,个人感觉在PLL时钟资源充裕的情况下,统一使用PLL输出时钟作为内部逻辑的时钟使用,而不使用PLL的输入作为内部时钟,这样是为了防止内部的各个时钟之间保持一定相位的对齐,同时我也发现PLL的输入时钟驱动内部逻辑的clock network latency相对要比PLL输出的时钟驱动内部逻辑的clock network lacency大得多。

         如果非得用PLL的输入时钟同时作为内部逻辑的时钟,最好是根据它们的相位关系进行一下时钟的对齐。如下面的两个图所示。

点击看大图

点击看大图 

         下面再看看cyclone器件的内部全局时钟网络的分配,8个全局时钟网络,左右各4个。而PLL1的输出c0,c1CLK0/1以及DPCLK0-3(复用的时钟管脚)或者内部的逻辑可以使用左边的4个全局时钟网络;PLL2的输出c0,c1CLK2/3以及DPCLK4-7(复用的时钟管脚)或者内部的逻辑可以使用右边的4个全局时钟网络。PLL输出作为外部时钟的e0是不会(也没有必要)分配到全局时钟网络的。

点击看大图 

         就拿左边的来说,可以使用4个全局时钟网络的信号其实不少,它们之中到底谁使用有限的全局时钟网络呢?说白了,都是可以由你掌控的,当然了,在你不管它们的时钟会有一个缺省的状态。

如果Setting--Fitter Setting--More Setting…里的Aoto Global Clock开启时,Quartus II在实现时会根据内部逻辑的实际情况自动分配全局时钟,就是说谁占用全局时钟网络软件说了算(一般系统的时钟和复位信号会占用全局时钟网络)。当然了,你也可以关闭它,然后自己来分配,这时你可以到Assignment EditGlobal Signals进行分配。然后你可以到编译报告里查看Fitter—>Rescource Section—>Global…里的信息。

 

另外还有一个值得注意的地方,下面两个图示出了可以占用全局时钟网络的信号它们实际可以占用的全局时钟网络资源。比如PLL1的输出c0只能使用GCLK1或者GCLK2c2只能使用GCLK0或者GCLK3

点击看大图

点击看大图 

拿一个实例来看看,我们有一个CLK1输入的时钟信号clk,这个时钟信号clk同时是PLL1的输入,产生两个PLL输出c0c1。系统本身有一个复位信号rst_n。此外,我们内部逻辑产生一个时钟clk_divown,在Aoto Global Clock开启的情况下,我们得到了下面的全局时钟网络的分配结果。

点击看大图 

         PLLc0分配到了GCLK2c1分配到了GCLK3PLL的输入时钟即CLK1的输入clk分配到了GCLK1,它们都分配到了规定的全局时钟网络内了。其次,clk_div_ownrst_n随机分配。

         这个例子中的全局时钟网络对于我们的使用还是绰绰有余的,但是一个大的系统,时钟交错,高扇出的信号层出不穷,那么对于全局时钟信号的掌控就需要格外小心了。

说白了,对于设计者来说,最重要的是要做到一切尽在掌握。

 

 

 

系统分类: CPLD/FPGA  |  用户分类: Altera_TimeQuest  |  标签: PLL 全局时钟 cyclone  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(1166) | 回复(3)

发表于 2009/2/26 20:11:59

2

关于投票

Timing Exceptions

  Timing Exceptions

 

时序例外更改Quartus II TimeQuest Timing Analyzer默认的分析处理。本章节介绍以下的可利用的时序例外:

“False Path”

“Minimum Delay”

“Maximum Delay”

“Multicycle Path”

 

 

False Path

 

False paths是指在时序分析时可以被忽略的路径。

使用set_false_path命令指定设计中的false paths

Example 7–25 展示set_false_path命令选项。

点击看大图 

         当(约束)目标是一个时序节点,false path仅仅应用于两个节点之间。而当(约束)目标是一个时钟,false path将应用于所有该时钟控制的源节点(-from)到目标节点(-to)的路径。

 

 

Minimum Delay

 

       使用set_min_delay命令指定一个特定路径的绝对最小延时值。Example 7–26 展示了set_min_delay命令选项。

点击看大图 

    如果源或者目的节点由时钟控制,时钟路径必须计算在内,以允许有更多或者更少的数据路径延时。如果源或者目的节点有输入或者输出延时,那么这个延时也必须包括到最小延时检测中。

当(约束)目标是一个时序节点,minimum delay