FPGA时序分析与约束(10)——生成时钟

 一、概述

        最复杂的设计往往需要多个时钟来完成相应的功能。当设计中存在多个时钟的时候,它们需要相互协作或各司其职。异步时钟是不能共享确定相位关系的时钟信号,当多个时钟域交互时,设计中只有异步时钟很难满足建立和保持要求。我们将在后面的内容中介绍这部分问题,同步时钟则会共享固定相位关系。往往同步时钟产生自同一个时钟源。

        如今的Soc在同一个芯片内包含多种异构设备。同一个芯片内可能包含高速的处理器和低速的存储器。这些工作在不同频率下的器件通常由不同的时钟触发。每个部分的运行是基于各自时钟的,这些会带来异步性的设计问题。这可能导致几个时钟都源于同一个主时钟,这些时钟称为生成时钟(衍生时钟、派生时钟)。

        在FPGA设计中,生成时钟(Generated Clock)有两种类型:第一种是由FPGA的专用时钟管理模块(PLL/MMCM)产生的时钟(这种时钟可以由时序引擎自动推断出来);第二种是由用户通过LUT或寄存器产生的时钟(这种时钟必须由用户手动约束)。

二、如何进行生成时钟约束

2.1 约束方式

        生成时钟的定义取决于主时钟的特性,生成时钟约束必须指定时钟源,这个时钟源可以是一个已经约束好的主时钟或者另一个生成时钟。生成时钟并不直接定义频率、占空比等参数,而是定义与其时钟源的相对关系,如分配系数、倍频系数、相移差值、占空比差值等。

        生成时钟的约束定义能够帮助时序工具进行准确的时序分析。生成时钟约束时必须指定某个源时钟或某个已知的时钟传输扇出节点,由此时序工具才能准确地计算生成时钟相对于源时钟的插入时延。

2.2 生成时钟约束语法create_generated_clock

        SDC中约束生成时钟create_generated_clock。该指令的BNF是:

create_generated_clock [source_objects]
                       -source clock_source_pin
                       [-master_clock master_clock_name]
                       [-name generated_clock_name]
                       [-edges edge_list]
                       [-divide_by factor]
                       [-multiply_by factor]
                       [-invert]
                       [-edge_shift shift_list]
                       [-duty_cycle percent]
                       [-combinational]
                       [-add]
                       [-comment comment_string]

2.2.1 定义生成时钟的源

        设定生成时钟的源引脚可利用-source选项,这个选项可以指明生成时钟是由哪个主时钟的源引脚派生的。

        这里我们理解一下源对象和生成时钟源之间的区别,源对象指的是生成时钟(或者时钟)设定在哪个位置,而生成时钟源指的是具体是哪个获得生成时钟的参考信号。

        一个源对象可以具有多个时钟。如果主时钟源引脚有多个时钟扇出,则生成时钟必须表明是由哪个主时钟派生来的。其功能可以通过-master_clock实现,这个选项采用了SDC时钟名称,该时钟已经被定义为驱动主时钟源引脚。只要定义了生成时钟,则开发工具将基于源的波形特性派生时钟特性。(如波形、周期等)

        对于通过特定源生成的时钟,重要的一点是源必须能够通过某种方式保持与生成时钟的相关性。一种常见的错误是将生成时钟指定于一个并未扇出生成时钟的特定源。实际上这意味生成时钟的波形被设定在一个源引脚处的波形函数上,它与生成时钟无关。开发工具不能捕获这种情况,从而导致在静态时序分析期间将错误的时钟波形用于生成时钟。

2.2.2 时钟命名

        像主时钟一样,生成时钟也需要通过名称来标识。可通过-name选项设定一个名称。若没有定义-name时,开发工具会自动指派一个名称。于生成时钟建立依赖关系后,任何SDC指令都将引用该名称。

2.2.3 设定生成时钟的特性

        设定生成时钟的特性可以利用以下3个选项中的1个:

        1、-edges ——作为一个对应源时钟边沿的整数数列,它表明了是从哪个生成时钟而产生的时钟边沿。时钟沿是指生成时钟交替的上升沿和下降沿。时钟沿的个数必须为奇数个整数,并且应当至少由3个整数表示一个完整生成时钟的周期。时钟沿计数由“1”开始,这个“1”表示源时钟的第一个上升沿。我们以下图为例:

create_clock -period 10 -name CLK [get_ports CLK]

create_generated_clock -name LSB -source [get_ports CLK]
-edges {1 3 5}{get_pins FF1/Q}

//用FF1/Q约束FF2/Q
create_generated_clock -name MSB -source [get_ports FF1/Q]
-edges {1 3 5}{get_pins FF2/Q}

//用CLK约束FF2/Q
create_generated_clock -name MSB -source [get_ports CLK]
-edges {1 5 9}{get_pins FF2/Q}

3b1232f0a972473e90ede451353afd19.jpeg

        2、-divide_by——这表示生成时钟通过某个因子而分频,周期则通过这个因子而加倍。

        3、-multiply_by——这表示产生时钟通过某个因子而倍频,周期则要除以这个因子。应当注意的是,尽管时钟通过周期特性来定义,但要记住multiply_by和divide_by则是通过频率特性来设定的(即周期的倒数)。

        总的来说,任何使用 -divide_by 或 -multiply_by 来表示的生成时钟也可以使用-edges来表示。反之则未必正确。

        使用 -divide_by 或 -multiply_by 生成时钟有时需要进行取反,可以使用-invert选项来设定这个功能。   

        当定义的时钟需要倍频的时候占空比可以用-duty_cycle来设定,该选项指可以配合 -multiply_by来使用,并以表示倍频时钟为1时脉冲宽度的百分比。

2.2.4 时钟沿位移

        生成时钟的时钟沿可能受到时间的影响而发生位移。-edge_shift 选项选取一组浮点数来表示在时间单元内每一个时钟沿的位移。该选项必须具有与时钟沿数量相同的参数来表示每个生成时钟沿的位移。我们举个例子进行说明:

create_generated_clock -name PLUSE -source [get_ports clk]
-edges {1 1 3} -edge_shift{0 2 0}{get_pins AN1/Z}

        这段指令表示,在生成时钟上:

  • 在第一个源时钟沿产生上升沿
  • 在第一个源时钟沿达到后2ns后产生下降沿
  • 在第三个源时钟沿产生下一个上升沿

三、总结

        与主时钟相同,对生成时钟正确建模也很重要。否则可能导致时序收敛的迭代增加。由SDC约束定义的生成时钟,若其特性电路与实际功能不匹配,这很难通过调试发现。许多情况下,设计虽然与时序相符,但硬件却呈现出完全不一致的状态。
        当定义生成时钟时,时钟的特性基于源时钟的特性而构成。通常可以直接通过create_clock在对象上定义相同的特性,而不利用生成时钟。从时序分析的角度来看,只要特性一致,时钟由create_generated_clock还是由create_clock设定并不重要。然而,若时钟是另一个时钟派生的,则无论何时都建议使用create_generated_clock,而非create_clock。这样做更易于维护和改进,因为修改源时钟的特性将直接影响生成时钟的特性。

        同样,利用正确的约束可更好地模拟设计意图,当修改或改进约束时会减少产生错误的概率——包括移植技术和设计。
        此外,当设计中多个时钟交互工作时,仅正确地定义时钟并不能满足要求,同样需要准确地定义各个时钟之间的关系。

 

  • 29
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 24
    评论
### 回答1: FPGA时序分析约束是针对现场可编程门阵列(FPGA)设计的重要概念。这些概念涉及到设计者需要了解和控制信号在FPGA器件中传播的时间和时序关系。而"吴厚航PDF"可能是与该主题相关的一本参考书籍。 FPGA时序分析指的是对设计中的信号和时钟进行分析,以确保在FPGA中的电路功能正确工作。在FPGA设计中,信号需要遵循特定的时钟信号来进行同步。时序分析可以帮助设计者确定信号在时钟周期内是否能够到达正确的位置,以及是否存在时序冲突或延迟问题。 约束是指设计者在FPGA设计中对信号传输时间和延迟进行设置的规定和要求。约束通常根据设计的需求和时钟信号的特性来确定。约束可以包括时钟频率、信号延迟、时序路径等。 FPGA时序分析约束的目标是保证电路在特定的工作频率下能够正确工作,避免由于时序问题而导致的不稳定性和错误。通过合理的时序分析和设置约束,设计者可以优化FPGA电路的性能和可靠性。 《FPGA时序分析约束》吴厚航PDF可能是一本专门讲解FPGA时序分析约束的参考资料。在这本书中,可能会详细解释FPGA时序分析的基本原理、技术和工具,以及如何针对具体的应用场景设置约束。 总之,FPGA时序分析约束FPGA设计中的关键概念,它们可以帮助设计者确保电路的稳定性和正确性。《FPGA时序分析约束》吴厚航PDF可能是一本与该主题相关的参考资料,提供了更深入的理论和实践知识。 ### 回答2: FPGA时序分析约束是针对FPGA设计的一项重要工作。FPGA是可编程逻辑门阵列的缩写,是一种硬件实现的芯片。在FPGA设计中,时序是指设计中各个逻辑块之间的信号传输的时间关系。时序分析是对这些时间关系进行评估和优化的过程。 FPGA时序分析的主要目标是确保设计在FPGA芯片上能够正常工作,并满足预期的时序要求。为了实现这一目标,我们需要进行时序约束的设置。时序约束是一种指导工具,向综合工具和布局布线工具提供设计时序要求的信息。 时序约束的设置需要考虑以下几个方面。首先是时钟约束,包括时钟的频率、时钟的起始边沿和时钟的延迟等。时钟FPGA设计中的核心部分,时序约束需要确保时钟信号在设计中的传输和同步是稳定的,以保证正确的计时。 其次是数据通路约束。数据通路约束包括数据信号的延迟和传输路径的限制等。为了避免数据的丢失和错误,时序约束需要确保数据在各个逻辑块之间的传输是准确和可靠的。 此外,时序约束还需要考虑时序缓存和时序精确性等因素。时序缓存是一种关键的设计工具,用于在不同时钟域之间进行数据的传输和同步,以确保数据的准确性和可靠性。时序精确性则是指设计需要满足的精确的时序要求,以保证设计的稳定性和可靠性。 总而言之,FPGA时序分析约束对于FPGA设计来说至关重要。通过合理设置时序约束,我们可以保证设计在FPGA芯片上能够正常工作,并满足预期的时序要求。这对于提高设计的性能和可靠性非常重要。 ### 回答3: FPGA时序分析约束是指在设计FPGA时,对时序特性进行分析和约束的过程。FPGA时序分析主要涉及到时钟信号的传输延迟、时钟频率和数据路径的延迟等方面,而FPGA时序约束则是为了保证设计的正确性和可靠性。 在FPGA时序分析中,我们需要考虑时钟信号的传输延迟。FPGA中的时钟信号需要在各个逻辑元件中进行传输,传输过程中会产生延迟,这会影响到时钟信号的稳定性和准确性。因此,我们需要分析时钟信号的传输路径,确定时钟延迟,避免时钟信号的过早到达或延迟到达的情况。 时钟频率也是FPGA时序分析的重要考虑因素。时钟频率决定了系统的运行速度和性能。在分析时序时,我们需要确保时钟信号的频率与设计要求相匹配,以避免时序不稳定或不可靠的情况。对于高时钟频率的设计,需要更加严格的时序约束和设计考虑,以保证数据的准确传输和处理。 此外,FPGA时序分析还需要考虑数据路径的延迟。FPGA中的数据路径是指数据在逻辑元件之间的传输路径,包括组合逻辑电路和时序逻辑电路等。在分析数据路径时,我们需要确定数据传输的延迟,避免数据信号在逻辑元件之间发生冲突或竞争的情况。 FPGA时序约束是为了保证FPGA设计的正确性和可靠性。通过设置时序约束,我们可以限制时钟信号的延迟范围,保证时序稳定;同时,我们也可以约束数据路径的延迟,保证数据的正确传输。时序约束可以通过HDL代码中的约束语句进行设置,也可以通过专门的工具进行约束文件的编辑和设置。 总之,FPGA时序分析约束是保证FPGA设计正确性和可靠性的重要步骤。通过分析时钟信号的传输延迟、时钟频率和数据路径的延迟等因素,并通过设置合理的时序约束,可以确保FPGA设计在工作时满足时序要求,稳定可靠地工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

apple_ttt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值