精华内容
下载资源
问答
  • This document describes Altera TimeQuest timing constraints and analysis for synchronous and asynchronous interfaces, Including a sample project.
  • **伪路径是指该路径存在,但该路径的电路功能不会发生或者无须时序约束。 创建伪路径的好处:可以减少工具运行优化时间,增强实现结果,避免在不需要进行时序约束的地方花费较多时间。 设置伪路径一般用在:①跨时钟...

    **什么是设置伪路径?**伪路径是指该路径存在,但该路径的电路功能不会发生或者无须时序约束。
    创建伪路径的好处:可以减少工具运行优化时间,增强实现结果,避免在不需要进行时序约束的地方花费较多时间。
    设置伪路径一般用在:①跨时钟域,②一但上电就被写入数据的寄存器,③异步复位或测试逻辑,④异步双端口RAM。总结:伪路径主要就是用在异步时钟的处理上。

    **注意的是:**伪路径的设置是单向的,如果两时钟之间存在相互的数据传输,则需要再反向设置一次伪路径。
    举例如何设置伪路径:
    在这里插入图片描述
    在异步时钟的位置右击选择设置伪路径即可。
    而关于异步复位的为路径设置直接代码,set_false_path -from [get_ports rst_pin]即可。

    设置异步时钟:当两个异步时钟之间有数据交互时需要设置异步时钟,
    例如:set_clock_groups -asynchronous -group [get_clocks clk_samp] -group [get_clocks clk2]

    展开全文
  • FPGA时序约束培训资料

    2018-11-22 16:09:12
    时序约束培训 包括 系统设计,静态时序分析,异步处理,时序约束,时序优化等
  • 时序约束实战篇

    2020-08-24 17:01:29
    文章目录行万里路--时序约束实战篇1. 梳理时钟树2. 约束主时钟3. 约束衍生时钟4. 延迟约束5. 伪路径约束6. 多周期路径约束 本文摘抄自: 个人网站:http://www.technomania.cn/ 微信公众号:Quant_times、Reading_...


    本文摘抄自:
    个人网站:http://www.technomania.cn/
    微信公众号:Quant_times、Reading_Times

    行万里路–时序约束实战篇

    我们以Vivado自带的wave_gen工程为例,该工程的各个模块的功能较为明确,如下图所示。为了引入异步时钟域,我们在此程序上增加了另一个时钟–clk2,该时钟产生脉冲信号pulse,samp_gen中在pulse为高时才产生信号。
    在这里插入图片描述

    1. 梳理时钟树

    我们首先要做的就是梳理时钟树,就是工程中用到了哪些时钟,各个时钟之间的关系又是什么样的,如果自己都没有把时钟关系理清楚,不指望综合工具会把所有问题暴露出来。
    在我们这个工程中,有两个主时钟,四个衍生时钟,如下图所示。
    在这里插入图片描述
    确定了主时钟和衍生时钟后,再看各个时钟是否有交互,即clka产生的数据是否在clkb的时钟域中被使用。
    在这个工程比较简单,只有两组时钟之间有交互,即:
    a. clk_rx与clk_tx
    b. clk_samp与clk2
    其中,clk_rx和clk_tx都是从同一个MMCM输出的,两个频率虽然不同,但他们却是同步的时钟,因此他们都是从同一个时钟分频得到,因此它们之间需要用set_false_path来约束;而clk_samp和clk2是两个异步时钟,需要用asychronous来约束。
    在这里插入图片描述
    注:图中只有clk_rx到clk_tx的箭头,不应该有从clk_tx到clk_rx的箭头。
    完成以上两步,就可以进行具体的时钟约束操作了。

    2. 约束主时钟

    在这一讲开讲之前,我们先把wave_gen工程中的wave_gen_timing.xdc中的内容删掉,即先看下载没有任何时序约束的情况下会综合处什么结果?
    对工程综合并Implementation后,Open Implementation Design,会看到下图所示内容。
    在这里插入图片描述
    可以看到,时序并未收敛。由于在改工程中,用了一个MMCM,并在里面设置了输入信号频率,因此这个时钟软件会自动加上约束,则不存在之前讲的“如果我们不加时序约束,软件是无法得知我们的时钟周期是多少,PAR后的结果是不会提示时序警告的”。
    接下来,我们在Tcl命令行中输入report_clock_networks -name mainclock,显示如下:
    在这里插入图片描述
    输入下列语句,创建时钟

    create_clock -name clk2 -period 25 [get_ports clk_in2]
    

    3. 约束衍生时钟

    系统中有4个衍生时钟,但其中有两个是MMCM输出的,不需要我们手动约束,因此我们只需要对clk_samp和spi_clk进行约束即可。约束如下:

    create_generated_clock -name clk_samp -source [get_pins clk_gen_i0/clk_core_i0/clk_tx] -divide_by 32 [get_pins clk_gen_i0/BUFHCE_clk_samp_i0/o]
    create_generated_clock -name spi_clk -source [get_pins dac_spi_i0/out_ddr_flop_spi_clk_i0/ODDR_inst/C] -divide_by 1 -invert [get_pins spi_clk_pin]
    

    我们再运行report_clocks,显示如下:
    在这里插入图片描述
    我们再理论篇“create_generated_clock”一节中讲到,我们可以重新设置Vivado自动生成衍生时钟的名字,这样可以更方便我们后续的使用。按照前文所讲,只需设置name和source参数即可,其中这个source可以直接从report_clocks中得到,因此我们的约束如下:

    create_generated_clock -name clk_tx -source [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKIN1] [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKOUT1]
    create_generated_clock -name clk_rx -source [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKIN1] [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKOUT0]
    

    大家可以对比一下repot_clocks的内容和约束指令,很容易就能看出他们之间的关系。
    把上述的约束指令在Tcl中运行后,我们再运行一遍repot_clocks,显示如下:
    在这里插入图片描述
    在时序的分析中,我们看到,clk_samp和clk2这两个异步时钟之间存在数据交互,因此要进行约束,如下:
    在这里插入图片描述

    4. 延迟约束

    对于延迟约束,比较麻烦一些,因为有时还要计算PCN上的走线延迟导致的时间差。而且不加延迟约束,Vivado也只是在Timing Report中提示warning,并不会导致时序错误。
    在这里插入图片描述
    比如在很多的ADC设计中,输出的时钟边沿刚好是数据的中心位置,而如果我们不加时序约束,则Vivado会默认时钟和数据是对齐的。
    在这里插入图片描述
    对于输入管脚,首先判断捕获时钟是主时钟还是衍生时钟,如果是主时钟,直接用set_input_delay即可,如果是衍生时钟,要先创建虚拟时钟,然后再设置delay。对于输出管脚,判断有没有输出随路时钟,若有,则直接使用set_output_delay,若没有,则需要创建虚拟时钟。
    在本工程中,输入输出数据管脚的捕获时钟如下图所示:
    在这里插入图片描述
    根据上表,我们创建的延迟约束如下,其中的具体数字在实际工程中药根据上下游器件的时序关系(在各个器件手册上可以找到)和PCB走线延迟决定。未避免有些约束有歧义,我们把前面所有的约束也加进来。
    在这里插入图片描述

    5. 伪路径约束

    在不加伪路径的时序约束是,Timing Report会提示很多的erro,其中就有跨时钟域的error.
    在这里插入图片描述
    我们可以直接在上面右键,然后设置来哥哥时钟的伪路径。
    在这里插入图片描述
    这样会在xdc中自动生成约束。
    我们可以手动天界这两个时钟的伪路径如下:
    在这里插入图片描述
    伪路径的设置是单向的,如果两个时钟直接存在相互的数据的传输,则还需要添加从clk_tx到clk_rx的路径,这个工程中只有从rx到tx的数据传输,因此这一条就可以了。
    异步复位也需要添加伪路径,rst_pin的复位输入在本工程中就是当做异步复位使用,因此还需要添加一句:
    在这里插入图片描述
    对于clk_samp和clk2,它们之间存在数据交换,但我们在前面已经约束过asynchronous了,这里就可以不用重复约束了。
    这里需要提示一点,添加上面这些约束后,综合时会提示xdc文件的warning。
    在这里插入图片描述
    但这可能是Vivado综合过程中,读取到该约束文件时,内部电路并未完全建好,就出现了没有发现clk_gen_i0/clk_core_io/inst/mmcm_adv_inst/CLKIN1等端口的情况,有如下几点证明:

    1. 这个路径在代码中确实存在
    2. 若把该sdc文件,设置为仅在Implementation中使用,则不会提示该warning
    3. 在Implementation完成后,无论是Timing Report还是通过tcl的report_clocks指令,都可以看到这几个时钟已经被正确约束。下图所示即为设置完上面的约束后的Timing Report。
      4.

    6. 多周期路径约束

    多周期路径,我们一般按照以下几个步骤来约束:
    1.带有使能的数据
    首先来看带有使能的数据,在本工程中的Timing Report中,也提示了同一个时钟域之间的几个路径建立时间不满足要求
    在这里插入图片描述
    其实这几个路径都是带有使能的路径,使能的周期为2倍的时钟周期,本来就应该在2个时钟周期内去判断时序收敛。因此,我们添加时序约束:

    set_multicycle_path 2 -setup -from [get_cells {cmd_parse_i0/send_resp_data_reg[*]} -include_replicated_objects] -to [get_cells {resp_gen_i0/to_bcd_i0/bcd_out_reg[*]}]
    set_multicycle_path 1 -hold -from [get_cells {cmd_parse_i0/send_resp_data_reg[*]} -include_replicated_objects] -to [get_cells {resp_gen_i0/to_bcd_i0/bcd_out_reg[*]}]
    

    也可以这样写

    set_multicycle_path -from [get_cells {cmd_parse_i0/send_resp_data_reg[*]} -include_replicated_objects] -to [get_cells {resp_gen_i0/to_bcd_i0/bcd_out_reg[*]}] 2
    set_multicycle_path -hold -from [get_cells {cmd_parse_i0/send_resp_data_reg[*]} -include_replicated_objects] -to [get_cells {resp_gen_i0/to_bcd_i0/bcd_out_reg[*]}] 1
    

    我们也可以直接右键通过GUI的方式进行约束,效果是一样的。
    在工程的uart_tx_ctl.v和uart_rx_ctl.v文件中,也存在带有使能的数据,但这些路径在未加多路径约束时并未报出时序错误或者警告。
    在接收端,捕获时钟频率是200MHz,串口速率是115200,采用16倍的Oversampling,因此使能信号周期是时钟周期的200e6/115200/16=108.5倍。
    在接收端,捕获时钟频率是200MHz,串口速率是115200,采用16倍的Oversampling,因此使能信号周期是时钟周期的166.667e6/115200/16=90.4倍。
    因此,时序约束如下:

    #串口接收端
    set_multicycle_path -from [get_cells uart_rx_i0/uart_rx_ctl_i0/* -filter IS_SEQUENTIAL] -to [get_cells uart_rx_i0/uart_rx_ctl_i0/* -filter IS_SEQUENTIAL] 108
    set_multicycle_path -hold -from [get_cells uart_rx_i0/uart_rx_ctl_i0/* -filter IS_SEQUENTIAL] -to [get_cells uart_rx_i0/uart_rx_ctl_i0/* -filter IS_SEQUENTIAL] 107
    #串口发送端
    set_multicycle_path -from [get_cells uart_tx_i0/uart_tx_ctl_i0/* -filter IS_SEQUENTIAL] -to [get_cells uart_tx_i0/uart_tx_ctl_i0/* -filter IS_SEQUENTIAL] 90
    set_multicycle_path -hold -from [get_cells uart_tx_i0/uart_tx_ctl_i0/* -filter IS_SEQUENTIAL] -to [get_cells uart_tx_i0/uart_tx_ctl_i0/* -filter IS_SEQUENTIAL] 89
    
    1. 两个有数据交互的时钟之间存在相位差 在本工程中,没有这种应用场景,incident不需要添加此类约束
    2. 存在快时钟到慢时钟的路径 在本工程中,没有这种应用场景,incident不需要添加此类约束
    3. 存在慢时钟到快时钟的路径 在本工程中,没有这种应用场景,incident不需要添加此类约束

    至此,重新Synthesis和Implementation后,可以看到,已经没有时序错误
    在这里插入图片描述
    到这里,教科书版的时序约束教程就基本结束了。但在我们平时的工程中,跟上面这种约束还是有差异的:

    1. 首先是虚拟时钟,这个约束在平时的工程中基本不会用到,像需要设计虚拟时钟的场景,我们也都是通过设计来保证时序收敛,设置虚拟时钟的意义不大。
    2. 第二就是output delay,在FPGA的最后一级寄存器到输出的路径上,往往都使用了IOB,也就是IO block,因此最后一级寄存器的位置是固定的,从buffer到pad的走线延时是确定的。在这种情况下,是否满足时序要求完全取决于设计,做约束只是验证一下看看时序是否收敛。所以也基本不做。但是input delay是需要的,因为这是上一级器件输出的时序关系。
    3. 第三个就是多周期路径,我们讲了那么多多周期路径的应用场景,但实际我们是根据Timing Report来进行约束的,即便那几种场景都存在,但如果Timing Report中没有提示任何时序warning,我们往往也不胡去添加约束。
    4. 第四个就是在设置了多周期后,如果还是提示Intra-Clocks Paths的setup time不过,那就要看下程序,是否写的不规范。比如
      在这里插入图片描述
      这么写的话,如果时钟频率稍微高一些,比如250MHz,就很容易导致从regB到regD的setup time不满足要求。因为begin end里面的代码都是按顺序执行的,要在4ns内完成这些复制与判断逻辑,挑战还是挺大的。因此,我们可以这样改写:
      在这里插入图片描述
      把寄存器的赋值分开,功能还是一样的,只是分到了几个always中,这样就不会导致问题了。
    展开全文
  • 时序约束分析的概念

    2020-10-18 16:56:48
    很多人询问关于约束时序分析的问题,比如:如何设置setup,hold时间?如何使用全局时钟和第二全局时钟(长线资源)?如何进行分组约束?如何约束某部分组合逻辑?如何通过约束保证异步
  • vivado时序约束

    2020-12-06 00:57:27
    同一个MMCM输出的是同步时钟,都是从同一个时钟分频得到的,需要用set_false_path来约束 异步时钟需要用asynchronous来约束

     

     

     

     

     

    同一个MMCM输出的是同步时钟,都是从同一个时钟分频得到的,需要用set_false_path来约束

    异步时钟需要用asynchronous来约束

     

    展开全文
  • 1.何为同步时钟,何为异步时钟 当两个时钟间的相位是固定关系...因此可以将主时钟和与之对应的衍生时钟约束成同一个时钟组。 无法判定两个时钟间相位时,则可以称这两个时钟为异步时钟(asynchronous clocks)。两...

    1.何为同步时钟,何为异步时钟

            当两个时钟间的相位是固定关系的,则可以称这两个时钟为同步时钟(synchronous clock)。一般同源,如由同一个MMCM or PLL产生的两个时钟可以称为同步时钟。因此可以将主时钟和与之对应的衍生时钟约束成同一个时钟组。

            无法判定两个时钟间相位时,则可以称这两个时钟为异步时钟(asynchronous clocks)。两个来自不同晶振的时钟,一定是异步时钟。通常情况下设计中不同的主时钟肯定是异步时钟,因此可以将这两个主时钟及其衍生时钟约束成不同的时钟组

    2.如何划分clk grop

            两个有分频关系的同源时钟 可以认为是同步时钟域,也可以认为是异步时钟域 认为是异步时钟域之后放在不同的clk group,clk domian之间需要异步处理,但不需要分析静态时序;

            如果作为同步时钟域,可以做异步处理也可以不做异步处理,做异步处理之后相应的时序路径设为falsePath可以不去分析sta。不做异步需要下SDC并由后端保证时序(调相位,设multicycle等)。之所以能作为同步时钟域是因为无论整数分频还是分数分频,同源时钟的相位都是固定的在时序处理时就可以固定调相位。

            异步时钟只能划分到不同的group,异步时钟域之间的信号不做sta分析

     

    3.参考链接

    这样的问题怎么加约束啊

    【 Vivado 】时钟组(Clock Groups)

    展开全文
  • Min Delay约束直接影响的是保持关系,因为延时最小对应的保持关系最差的情况;用于覆盖默认的hold(removal)约束。 Max Delay约束直接影响的是建立关系,因为延时最大对应的建立关系最差的情况。用于覆盖默认的setup...
  • 时序约束(Vivado)

    千次阅读 2018-12-25 17:32:46
    时序约束一、时钟周期约束1、确定主时钟1)、主时钟之间有明确的相位关系2)、异步时钟3)、差分时钟约束4)、同源多时钟5)、高速收发时钟6)、虚拟时钟二、两种时序例外1、多周期路径2、虚假路径 本文参考: 《综合与...
  • 时序约束之 set_clock_groups

    千次阅读 2020-08-13 14:52:13
    对于异步时钟,通常会使用set_clock_groups、set_false_path做时序约束,使得不对跨异步时钟做时序分析。这样做可以缩短综合编译时间,且将宝贵的片内资源用在其他必要的时序约束上。 set_clock_groups 将不会对...
  • 很多人询问关于约束、时序分析的问题,比如:如何设置setup,hold时间?如何使用全局时钟和第二全局时钟(长线资源)?如何进行分组约束?如何约束某部分组合逻辑?...A 时序约束的概念和基本策略...
  • FPGA时序约束笔记3

    2020-12-08 12:06:27
    基于明德扬FPGA时序约束教程 过程: 例1: 其中上游器件: 下游器件: 约束思路: 对于input delay,最大延时就是2.4ns,最小就是1.3ns 对于output delay,由于线路延时使得setup更恶劣,使得hold更容易满足...
  • FPGA时序约束一点总结

    2018-05-30 09:53:00
    时序约束的一点总结。 打拍。掌握好时序。 手动分配位置,这个不是一定有效。 打破层级或者物理综合,或者自动加流水等综合优化参数调整。 根据实际情况使用异步时钟策略。 换速度更快的...
  • vivado下的时序约束

    2021-03-21 16:49:59
    时钟分组3.1 分组策略3.1 异步约束3.2 互斥时钟 1.基础时钟 通常是晶振时钟(get_ports),也可以是高速收发器时钟(get_pins) 2. 派生时钟约束 对于自动生成的时钟(如MMCM/PLL生成的时钟)我们不需要做...
  • 时钟复位与时序约束

    2018-01-15 09:50:08
    讲解同步时钟复位以及异步复位的技术,图示给出约束中需要注意满足的一些时间关系。
  • 一:时序约束 1:分类  时钟的约束(寄存器-寄存器之间的路径约束),输入延时的约束,输出延时的约束 2:时序约束对电路的要求  综合工具现在不能很好地支持异步电路,甚至不支持异步电路;  single clock...
  • 时序约束 STA

    千次阅读 2016-01-12 19:46:34
    (1) clock ...一个时钟,输出到另一个芯片中,转一圈后,以同样的频率返回到自己的芯片,因为无法确定时钟在另一个芯片里面的latency,所以输出的时钟与输入的时钟算异步 一个时钟进到2个PLL,就
  • 时序约束对于FPGA来说太重要啦。 时序优化手段主要是几种:改代码,位置约束,优化策略。 问题-方法 某次运算的组合逻辑多: 改代码! 拆分为最简单的逻辑门。(优化组合逻辑) if-else组合逻辑多导致的延时长: 将...
  • FPGA设计中的时序约束

    2011-09-25 17:15:09
    很多人询问关于约束、时序分析的问题,比如:如何设置setup,hold时间?如何使用全局时钟和第二全局时钟(长线资源)?如何进行分组约束?如何约束某部分组合...(注:以下主要设计时序约束)A 时序约束的概念和基本
  • FPGA 时序约束(altera timequest)

    千次阅读 2014-08-04 15:32:54
    1 好的时序约束可以指导布局布线工具进行权衡,获得最优的器件性能,使设计代码最大可能的反映设计者的设计意图。 2 TimeQuest 是Altera 在6.0 版的软件中加入的具备ASIC 设计风格的静态时序分析(STA)工具。采用...
  • Quartus中的时序约束

    万次阅读 多人点赞 2015-03-27 16:50:11
    时序分析基础  时序分析类型 三种路径类型  1.时钟路径  2.数据路径  3.异步路径(这里的异步路径指寄存器的异步控制信号,如复位和置位信号路径)
  • 7 FPGA时序约束实战篇之梳理时钟树

    千次阅读 2020-01-29 12:40:40
    行万里路–时序约束实战篇   我们以Vivado自带的wave_gen工程为例,该工程的各个模块功能较为明确,如下图所示。为了引入异步时钟域,我们在此程序上由增加了另一个时钟–clkin2,该时钟产生脉冲信号pulse,samp_...
  • 一般不需要工具时序分析的路径指的是异步的路径,异步路径就是指的不同时钟域的路径。 在QuartusII的一个培训文档里面解释了什么时候要用到FALSE PATH: 从逻辑上考虑,与电路正常工作不相关的那些路径,比如测试...
  • 时序约束,STA

    万次阅读 2012-08-31 15:55:53
    (1) clock ...一个时钟,输出到另一个芯片中,转一圈后,以同样的频率返回到自己的芯片,因为无法确定时钟在另一个芯片里面的latency,所以输出的时钟与输入的时钟算异步 一个时钟进到2个PLL,就算那
  • 异步设计约束;多时钟周期约束 一:对timing时序的补充 1:占空比不为50%  **单沿触发,占空比对综合无影响;双沿触发,占空比对综合有影响。 (1)通过-wave_form改变占空比;例如 create_clock -period 2 -wave...

空空如也

空空如也

1 2 3 4 5
收藏数 96
精华内容 38
关键字:

异步时序约束