同步电路的setup time和hold time

在不考虑时钟的偏移和抖动问题的情况下,先来说一下单周期同步电路的时序问题。通常来说一个同步的时序电路首先要保证单个同步元器件的数据能够稳定的被采集,以不至于太快的传入到下一级同步元件中,这个说的就是hold time。接下来为了保证数据可以在不同的数据流之间进行转换,也就是说由A发出的数据能够正确的被B所采集,以此类推,保证了数据在所有的同步元件中正常传输,为了达到这个目的,就要求发出的数据满足采集数据同步元件的setup time。

依照上面的论述,要使得同步电路正常的工作,首先要保证数据能够被同步元件_稳定的采集_,然后才是在各个同步元件之间流动。那么如何才能保证数据能够被稳定的采集和正确的同步元件中流动呢?这就要求同步元件之间的数据满足hold time和setup time的时序要求。

hold time通俗来讲就是当数据被采集之后需要在稳定保持一段时间。如下图所示,从B寄存器D端传入的数据要能被正确的采集,就要求D端数据至少要稳定hold time这么多的时长。也就是说B寄存器D端的数据改变时间要不少于hold time这么多的时长,这就要求B寄存器D端之间的延迟时间不少于hold time。B寄存器D端之间的延迟时间包括A寄存器CK到Q和逻辑延迟时间,即:
t_CK->Q_ + t_plogic_ > t_holdtime_
也就是说数据最快传入到同步元件中也需要hold time这么多的时长。

而衡量是否满足hold time时序要求,就通过(t_CK->Q_ + t_plogic_)与 (t_holdtime_)之间的差值来衡量。即:
t_slack_ = (t_CK->Q_ + t_plogic_)- (t_holdtime_)
如果t_slack_ >= 0说明满足了hold time的时序要求。通过上面的表达式也可以知道hold time与设计的时钟周期无关。

setup time通俗来讲就是在采集延到来之前数据就已经准备好。从A寄存器D端传入的数据需要经过A寄存器CK到Q和逻辑延迟才能到达B寄存器D端,把这些时间开销叫做数据到达时间。通常如果数据到达时间比规定的setup time早些,那么就说在采集延到来之前数据就已经准备好了。换句话说数据到达时间和setup time总时间在一个时钟周期内,也说明了满足setup time要求,即:
t_CK->Q_ + t_plogic_ + t_setup_ < T
也就是说数据从一个同步元件最慢也必须要一个周期内传入到下一个同步元件中。

而衡量setup time是否满足时序关系,就是通过数据到达时间与规定的setup time谁先早到为标准,即:
t_slack_ = (T - t_setup_) - t_arrival time_
t_slack_ = T - (t_CK->Q_ + t_plogic_ + t_setup_)
若t_slack_ >= 0说明满足了setup time时序要求。通过上面的表达式知道setup time满足与否和设计周期有关系,当不满足setup time要求是要么通过降频,要么通过减少组合逻辑复杂度来满足时序要求。

时间: 2024-10-05 23:54:39

同步电路的setup time和hold time的相关文章

什么是同步逻辑和异步逻辑,同步电路和异步电路的区别是什么(转)

1.什么是同步逻辑和异步逻辑,同步电路和异步电路的区别是什么?     同步逻辑是时钟之间有固定的因果关系.异步逻辑是各时钟之间没有固定的因果关系.     电路设计可分类为同步电路和异步电路设计.同步电路利用时钟脉冲使其子系统同步运作,而异步电路不使用时钟脉冲做同步,其子系统是使用特殊的“开始”和 “完成”信号使之同步.由于异步电路具有下列优点--无时钟歪斜问题.低电源消耗.平均效能而非最差效能.模块性.可组合和可复用性--因此近年来对异步 电路研究增加快速,论文发表数以倍增,而Intel P

建立时间和保持时间(setup time 和 hold time)

建立时间和保持时间贯穿了整个时序分析过程.只要涉及到同步时序电路,那么必然有上升沿.下降沿采样,那么无法避免setup-time 和 hold-time这两个概念. 系列目录 时序收敛:基本概念 建立时间和保持时间(setup time 和 hold time) OFFSET IN OFFSET OUT 1. 什么是setup-time 和 hold-time 不论是在输入,输出或是寄存器-寄存器之间,只要设计到时钟上升沿/下降沿的采样,就会提到setup time 和 hold time.这两

触发器触发-同步电路和异步电路异处

前几天写verilog的时候遇到这个问题,以前没有注意到这个问题,真是不应该! 举例: 贴一段很简单的代码 module async(clk,rst_n,out); input clk,rst_n; output[7:0] out; reg[7:0] out; //async always @(posedge clk or negedge rst_n) begin if(!rst_n) out <= 8'h00; else out <= out + 1'b1; end //sync //alw

setup time和hold time的周期问题

为什么计算setup time的slack时需要考虑加周期,hold time时不需要? 总结一: 因为计算setup time时,由于存在数据传输data delay,Launch edge与Capture edge并不对应时钟信号source clock的同一个时钟沿,因此需要考虑加周期.单时钟周期检查的时候工具默认capture edge-launch edge=1个周期. Hold time时由于二者对应的是同一个时钟沿,所以不考虑周期. 如图所示:REG1.CLK的第一个时钟上升沿对应

【转】setup time和hold time的周期问题(slack)

为什么计算setup time的slack时需要考虑加周期,hold time时不需要? 总结一: 因为计算setup time时,由于存在数据传输data delay,Launch edge与Capture edge并不对应时钟信号source clock的同一个时钟沿,因此需要考虑加周期.单时钟周期检查的时候工具默认capture edge-launch edge=1个周期. Hold time时由于二者对应的是同一个时钟沿,所以不考虑周期. 如图所示:REG1.CLK的第一个时钟上升沿对应

为什么TLF中setup和hold可以为负值

总结: 简单来说,因为flip-flop 端口到 gate 有一段delay,如果clock 那段delay明显要大,setup就可能是负值了:如果flip-flop端口gata那段delay明显太大,hold就可能取负值了.在我看来,二者的作用都是用来微调数据和时钟经过filp-flop传输时的同异步问题,避免数据和时钟发生大的出入从而无法正常经过过Flip-flop传输信号. 如下所示Edge-Triggered(rise)D Flip-flop ,在针对单个Flip-flop而言,建立时间

FPGA异步时钟设计中的同步策略

1 引言    基于FPGA的数字系统设计中大都推荐采用同步时序的设计,也就是单时钟系统.但是实际的工程中,纯粹单时钟系统设计的情况很少,特别是设计模块与外围芯片的通信中,跨时钟域的情况经常不可避免.如果对跨时钟域带来的亚稳态.采样丢失.潜在逻辑错误等等一系列问题处理不当,将导致系统无法运行.本文总结出了几种同步策略来解决跨时钟域问题. 2 异步设计中的亚稳态    触发器是FPGA设计中最常用的基本器件.触发器工作过程中存在数据的建立(setup)和保持(hold)时间.对于使用上升沿触发的触

频率与Hold Time,gitter与Hold Time

一.Setup time和hold time对频率的影响   setup time和hold up time是由器件cell决定的,一般小于1~2ns,并不随着电路设计的改变而改变. 时钟频率计算方法如下:在不考虑时钟延时抖动等条件下,理想的说:一个信号从触发器的D端到Q端的延时假设是Tcell,从Q端出来之后会经过组合逻辑电路combinational logic或者network的延时称作Tdata,经过Tdata信号将到达下一个触发器D端,而且必须要满足触发器的建立时间Tsetup. 需满

C语言中同步和异步的理解

现在我在main.c这个文件中,调用360浏览器. 分析过程:在my.exe里面继续打开另外一个程序,所以就涉及到:my.exe的继续执行是否要等把另外的那个程序执行完才执行呢?如果要等,就是同步:如果不用等,就是异步.这就是同步和异步的问题. 现在是要等的情况: 结果就是要等到浏览器完全打开完才会去打印nihao . 如果这样看,就会更加的清晰: 结果是: 一个一个的打开,最后才是打印nihao 如果要异步方式: 结果是: 三个浏览器几乎同时打开,同时"nihao"还会先打印出来.