verilog面试宝典[2]-建立时间与保持时间、触发器、亚稳态 ★

by yang

最近准备数字IC岗时复习整理的知识点,参考了比较火的fpga面试题,和一些相关知识。主要是写着自己看着方便的,有很多不严谨的地方,有些地方有参考链接,那些博客写的都很好。

Part.2

建立时间与保持时间、触发器、亚稳态 ★
1:锁存器(latch)、触发器(flip-flop)、 寄存器(Register)的区别?
2:建立时间与保持时间的概念? ★
3:为什么触发器要满足建立时间和保持时间?
4:经典例题 ★
5:如何计算周期 T 与设计频率(最大频率)Fmax?
6:建立时间,保持时间不满足怎么处理?
7:什么是亚稳态?
8:有关两级触发器进行异步时钟域同步
9:如何防止亚稳态?
例:异步信号同步提取边沿:2级或4级寄存器,消除亚稳态
例:异步复位与同步复位:★


1:锁存器(latch)、触发器(flip-flop)、 寄存器(Register)的区别?

首先要知道什么是触发器FF

  • 锁存器电平触发。用于不同时钟之间的信号同步。OUT ≈ EN ? IN : no changelatch只要输入信号电平变化,输出就会按照一定逻辑变化(D锁存器输出对输入是透明的)。latch属于异步电路设计,往往会导致时序分析困难,容易引入竞争,不适当的应用latch会大量浪费芯片资源。

  • 触发器边沿触发。简称FF,双稳态触发器。可以理解为是两个不同电平敏感的锁存器串连而成。前一个锁存器决定了触发器的建立时间,后一个锁存器则决定了保持时间。

    latch.png

  • 寄存器通常是指能够用来存储一组二进制代码的同步时序逻辑电路,Flip-flop是register的基本构成单位(一个触发器存一位数据)。register 在同一时钟边沿触发下动作,符合同步电路的设计思想。图为4位寄存器电路结构。

    寄存器.png

    应避免使用锁存器,尽量使用触发器的原因:
    1、latch容易产生毛刺,对输入电平敏感,受布线延迟影响大
    2、在FPGA的资源中没有标准latch,但有FF,所以需要用一个逻辑门和ff来组成锁存器,这样就浪费了资源。
    3、latch会让时序十分复杂。没有时钟端

如何避免偶然生成锁存器?如果有的输入没有对应明确的输出,系统会综合出latch。比如没有写else,没有写default。还可以用fullcase语句等等。

always@( a or b)        //【锁存器】
    begin
        if(a==1)        //缺少else语句
        y = b;
      end
----
always@( posedge clk )  //【触发器】
    begin
        if(a==1)
        y = b;
    end
避免锁存.png

PS:不支持always的边沿触发和条件触发同时用,就是说不能一个是always @(a, negedge b)

2:建立时间与保持时间的概念? ★

电路设计的难点在时序设计,时序设计的实质就是满足每一个触发器的建立/保持时间的要求。(是相对时钟的概念)

  • 建立时间(setup time):触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的时间。如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;
  • 保持时间(hold time):触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的时间。如果保持时间不够,数据同样不能被打入触发器。


    保持时间.png
3:为什么触发器要满足建立时间和保持时间?

从物理层面来讲,需要建立时间是因为触发器的D端像一个锁存器在接受数据,前级门的状态需要一段稳定时间;需要保持时间是因为在时钟沿到来之后,触发器要通过反馈来锁存状态,从后级门传到前级门需要时间。

从后果层面讲,如果不满足建立和保持时间,触发器将进入亚稳态,而且0-1中间电压会使亚稳态向后级电路传播。

4:经典例题 ★

经典例题1:时钟周期为T,触发器D1的时钟沿到来.至触发器输出Q变化的时间Tco(CLK-Q)最大为T1max,最小为T1min,逻辑组合电路的延迟时间最大为T2max,最小为T2min,问:触发器D2的建立时间和保持时间应满足什么条件?

华为题.png
T3 setup < T - T1max - T2max
T3 hold  < T1min + T2min

D2的建立时间应该满足: Tco + T2+ T3 setup < T;
D2的保持时间——在时钟沿到来后,D2 in保持旧数据不变的时间,所以时钟到来后(T1+T2)时,D2 in发生变化,T1+T2 应该必须大于D2hold。

经典例题2:已知reg的setup,hold时间,求中间组合逻辑的delay范围?

   Delay < period - setup – hold
5:如何计算周期 T 与设计频率(最大频率)Fmax?

周期约束是一个基本时序和综合约束,它附加在时钟网线上,时序分析工具根据PERIOD约束检查时钟域内所有同步元件的时序是否满足要求。


时钟周期.png

时钟的最小周期为:

TCLK = TCKO + TLOGIC + TNET + TSU-TCLK_SKEW
TCLK_SKEW = TCD2 -TCD1
Fmax = 1/ TCLK;

其中TCKO为触发器输出时间,TLOGIC为同步元件之间的组合逻辑延迟,TNET为布线延迟,TSU为同步元件的建立时间,TCLK_SKEW为时钟信号TCD2和TCD1延迟的差别。

6:建立时间,保持时间不满足怎么处理?

1,降低时钟频率; 2,更换更好器件
Setup time不满足:减少组合逻辑时间,或分开做成流水线
Hold time 不满足:好像没办法

7:什么是亚稳态?

亚稳态是指触发器无法在某个规定的时间段内到达一个可以确认的状态。
进入亚稳态后触发器的输出将不稳定,在0和1之间乱飘,这时需要经过一个恢复时间(决断时间Tmet),其输出才能稳定,但稳定后的值是随机的,与输入无关。而只要有异步设计,亚稳态就是无法避免的。

亚稳态.png

这就是为什么要用两级触发器来同步异步输入信号
使用两级触发器来使异步电路同步化的电路其实叫做“一步同位器”,但只能用来对一位异步信号进行同步。

8:有关两级触发器进行异步时钟域同步

两级触发器可防止亚稳态传播的原理:

一位同步器.png

假设第一级触发器的输入不满足其建立保持时间,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时间后必须稳定下来,而且稳定的数据必须满足第二级触发器的建立时间,如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据满足其建立保持时间。同步器有效的条件:第一级触发器进入亚稳态后的恢复时间 + 第二级触发器的建立时间 < = 时钟周期。
更确切地说,输入脉冲宽度必须大于同步时钟周期与第一级触发器所需的保持时间之和。最保险的脉冲宽度是两倍同步时钟周期。所以,这样的同步电路对于从较慢的时钟域来的异步信号进入较快的时钟域比较有效,对于进入一个较慢的时钟域,可能根本采不到异步信号。
但是一级FF稳定后的out是随机的,到第二级FF后大概率没有亚稳态了,但是得到的数据0/1都有可能,仅适用于对错误不敏感的地方。对于敏感的电路,可以采用双口RAN或FIFO同步。

亚稳态处理

9:如何防止亚稳态?
  1. 降低系统时钟频率,增大T
  2. 用反应更快的FF(Tsu和Th更小)
  3. 改善时钟质量,用边沿变化快速的时钟信号
    消除:
  4. 异步输入采样2次以上再给内部模块使用(最简单可靠的一位同步器)
  5. 用FIFO对跨时钟域数据进行缓冲设计
  6. 复位电路采用异步复位,同步释放处理
例:异步信号同步提取边沿:2级或4级寄存器,消除亚稳态

在进行异步信号跨频提取边沿时候,一般采用多进行一级寄存器消除亚稳态,可能在系统稳定性要求高的情况下,采用更多级寄存器来消除亚稳态,如下例,即为采用4级寄存器消除亚稳态,相应的边沿信号产生的时间就晚了两个时钟周期。提取上升沿。

input      sig_nsyn;
wire       sig_nsyn_p;
reg[3:0]   sig_nsyn_r;      //or [1:0]
always @(posedge clk or negedge rst_n)
begin
    if(!rst_n) sig_nsyn_r <= 2'd0;
    ---------------------------------------------------------//2级寄存器
    else       sig_nsyn_r <= { sig_nsyn_r [0], sig_nsyn };
    ---------------------------------------------------------//4级寄存器
    else       sig_nsyn_r <= { sig_nsyn_r [2:0], sig_nsyn };    
end

assign     sig_nsyn_p = sig_nsyn_r[0] & ~sig_nsyn_r[1];
assign     sig_nsyn_p = sig_nsyn_r[2] & ~sig_nsyn_r[3];         //4级寄存器
例:异步复位与同步复位:★

同步复位: 必须保证复位电平维持时间大于clk间隔时间

always @(posedge clk)
    begin
       if(!rst_n) a <= 1'b0;
       else       a <= b;
    end

异步复位:需要同步释放。采用第二级寄存器输出作为全局复位信号输出。always @ (posedge clk or negedge reset)

wire        sys_rst_n;  
reg [1:0]   rst_r;  

always @(posedge clk or negedge rst_n)  
begin   
    if(!rst_n)  rst_r <= 2'd0;
    else        rst_r <= {rst_r[0], 1'b1};  
end
assign  sys_rst_n = rst_r[1];

参考博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容