硬件架构的艺术第一、二章

  • 亚稳态
    • 亚稳态的概念
    • 亚稳态窗口
    • MTBF
    • 以下情况可能会发生亚稳态:
    • 减小亚稳态发生的概率的方法:
    • 亚稳态测试电路
    • 同步器的类型:
      • 模式A:
      • 模式B:
    • 综上:减小亚稳态发生概率
  • 时钟与复位
    • 同步设计
      • 避免使用行波计数器(即输出是下一级寄存器的时钟信号)
      • 门控时钟
        • 功耗组成
        • 不含锁存器的门控时钟电路
        • 基于锁存器的门控时钟电路
        • 门控信号
      • 双边沿或混合边沿时钟
      • 用触发器驱动另一个触发器的异步复位端
    • 推荐的设计技术
      • 避免在设计中使用组合环路
      • 避免数字设计中的延时链
      • 避免使用异步脉冲产生器
      • 避免使用锁存器
      • 避免使用双边沿时钟
    • 时钟方案
      • 内部产生的时钟
      • 分频时钟
      • 行波计数器
      • 多路时钟
    • 复位信号设计策略
      • 同步复位
      • 异步复位
      • 移除异步复位的问题
      • 过滤复位毛刺
      • 控制时钟偏移
        • 短路径问题

亚稳态

亚稳态的概念

亚稳态:由于违背了触发器的建立和保持时间而产生的,在时钟上升沿这段时间窗口内,数据输入信号必须保持稳定。如果数据在这段时间发生了变化,则输出为“亚稳态”,输出会产生毛刺,或者需要较长时间才能回到稳定状态。
建立时间:即时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器。
保持时间:即指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打入触发器。
本来经过一定的延时值tco之后就会输出正确的稳定的电平值;由于产生了亚稳态,亚稳态持续了tMET时长后,恢复到稳定的电平状态(稳定,但不一定是正确的!),这段持续的时间叫做亚稳态的恢复时间,一般情况下这段时间不会超过一个或者两个时钟周期(取决于触发器的性能)。如果亚稳态持续时间过长(超过一个或者两个时钟周期),就有可能被下一级的触发器捕获,导致下一级触发器也处于亚稳态,这就是亚稳态的传播现象。
值得注意的是,进入亚稳态后,亚稳态持续时间是不确定的。

亚稳态窗口

亚稳态窗口具有特定的时间长度,在这段时间内输入信号和时钟都应该保持不变(亚稳态窗口的概念我没有找到)。建立时间和保持时间共同决定亚稳态窗口的宽度,(在这段时间内输入信号和时钟都应该保持不变,如果发生变化,则输出可能变为亚稳态);窗口越大,进入亚稳态的概率越高。较新的逻辑器件有更小亚稳态窗口。

MTBF

当系统的故障率恒定时,MTBF(Mean/Average Time Between Failures,平均无故障时间),故障率的倒数。

其中:
W-亚稳态窗口宽度,以及触发器的亚稳态时间常数于电气特性有关,会根据工艺技术而改变
τ-触发器的亚稳态时间常数
tr-允许超出器件正常传输延迟时间的解析时间。
fc-时钟频率
fd-异步信号边沿频率
τ的计算公式是:
根据公式1.1和1.2可以计算出两级同步器的MTBF:

以下情况可能会发生亚稳态:

(1)输入信号是异步信号
(2)时钟偏移/摆动高于容限值
(3)信号在不同频率或者相同频率但相位和偏移不同的时钟域下跨时钟域工作
(4)组合延迟使触发器的数据输入在亚稳态窗口发生变化

减小亚稳态发生的概率的方法:

  1. 最简单的方法:确保时钟周期足够长避免亚稳态,即确保fc比较小,能够使得故障率降低。
  2. 使用多级同步器:允许输出出现的亚稳态可以长达一个周期,在这个周期内,亚稳态特性减弱。在第二个时钟沿到来时,第二级同步器采样,之后才把该信号传递到内部逻辑中去。第二级输出是稳定且已被同步了的。如果在第二级采样时保持时间不够,第一级的输出仍然处于很强的亚稳态,将会导致第二级同步器也进入亚稳态,但这种故障出现的概率比较小。正如MTBF(1.3)公式所示,加入二级同步器能够增加MTBF的值,即降低故障率。

  1. 使用时钟倍频的多级同步器。由于多级同步器的一个局限就是系统需要花费较长的时间去响应异步输入(即亚稳态不需要一个时钟周期,即可稳定),但使用倍频时钟降低MTBF能让系统在一个系统时钟周期内响应一个异步输入。


值得注意的是,这几种方法都不能保证阻止亚稳态传播,仅仅减小了亚稳态发生的概率。

亚稳态测试电路

使用上升沿D触发器,输入一个异步信号;再下降沿D触发器(增加亚稳态的概率),将D触发器的输出Q端分别输入D触发器和经过一个非门输入D触发器,之后输出两个D触发器同或,如果输出为1,则说明发生了亚稳态。

同步器的类型:

模式A:

当异步输入信号比时钟周期大得多最有效,不能用于异步输入信号的宽度小于时钟周期的情况)模式A 如果输入与输出不同,则CLR=1;

两级采样的同步器 与一级同步相比,两级同步能够更可靠地避免亚稳态的出现,而三级以上同步器的效果并不能提高多少。
如果clk1<clk2, 时钟域2中采用同步器模式A,否则则采用同步器模式B

模式B:

第一级触发器的输入D与VCC连,输入时钟是异步输入信号。

综上:减小亚稳态发生概率

(1)采用多级同步器
(2)采用响应更快的触发器(减小亚稳态窗口)
(3)减小采样速率
(4)避免使用dV/dt 低的输入信号**

时钟与复位

同步设计

避免使用行波计数器(即输出是下一级寄存器的时钟信号)

由于使用了更多的触发器,延迟会累积增加。常常使用行波计数器对时钟进行幂为2的分频(在功耗较高的系统中能大量降低由逻辑或SOC引起的峰值功耗)

门控时钟

时钟线上的门控单元会导致时钟偏移并对毛刺敏感,并引入尖峰脉冲作用作用于触发器。含有门控时钟的设计在仿真时可能正常工作,但是在综合时就会出现问题

门控时钟是减少功耗的有力手段。在时钟被门控关闭后,该时钟网络和其中的寄存器都将停止翻转。而使用同步时钟使能,时钟树一直保持翻转而且每个触发器的内部电路保持活跃(触发器的输出没有改变),无法降低功耗。

功耗组成

在传统的同步设计风格中,系统时钟连接到每个寄存器的时钟端。动态功耗主要由三个部分组成:
(1)在每个时钟沿变化的组合逻辑所产生的功耗(由于触发器驱动这些组合逻辑)
(2)由触发器产生的功耗
(3)时钟树产生的功耗(几乎消耗了芯片功耗的一半)

不含锁存器的门控时钟电路

不含锁存器的门控时钟电路(使用一个简单的与门 或 或门实现,取决于触发器使用哪个边沿)为避免过早截断时钟脉冲或误产生多个时钟脉冲,应使使能信号从时钟的上升沿起到时钟的下降沿止一直保持不变。

基于锁存器的门控时钟电路

基于锁存器的门控时钟电路加入一个电平敏感锁存器,无需依靠门控自身满足上述条件,使能信号只需在时钟上升沿附近保持稳定。但必须特别注意时钟的占空比以及产生使能信号逻辑的延迟,因为使能信号必须在半时钟周期时产生。
加入控制信号,该信号可以再锁存器前先与使能信号进行一次或操作。

门控信号

解码器输入端会导致大量门翻转,可以用使能或选择信号阻止切换行为的传播。

双边沿或混合边沿时钟

两个触发器由两个相位相反的时钟信号控制。这会为使用同步复位和使用插入扫描链困难,同时也会增加确定关键信号的路径的难度。

相比于双倍同步时钟的优点
(1)性能的提高
(2)功耗的降低 (优先使用双倍同步时钟)

用触发器驱动另一个触发器的异步复位端

推荐的设计技术

避免在设计中使用组合环路

组合环路是数字设计中导致不稳定和不可靠的最常见因素。在同步设计中,所有反馈回路都应包含寄存器。组合环路简历了不含寄存器的直接反馈回路,这违背了同步设计原理。
1、组合逻辑违反了同步设计原则,很容易产生振荡,毛刺和时序违规。
2、组合逻辑实现的逻辑功能完全依赖于环路上的逻辑门延迟和布线延迟,当延迟发生改变,原来的逻辑功能也同样会发生变化,而且改变后的功能很难预测。
3、组合逻辑会设计软件进入无尽的计算中,为了完成计算,一些EDA工具会将环路割断,而不同的EDA软件对环路割断处理的过程是不尽相同的,这种过程不但使电路的实现偏离了最初的设计意图,而且使电路的实现呈现不确定性。
解决这个问题的方法:在组合环路中引入一个触发器或寄存器

另一个是将寄存器的输出端通过组合逻辑反馈到同一个寄存器的异步端(异步复位)

避免数字设计中的延时链

在用两个或者多个带有扇入和单扇出的连续节点产生延时是,就会形成延时链。通常将反相器链接在一起以增加延时,延时链通常出现在异步设计中,有时候解决其他组合逻辑导致的竞争条件
1、增加设计对操作环境的敏感性,降低设计的可靠度
2、增加设计移植到不同器件上的难度
解决方法:在设计中用同步技术取代异步技术

避免使用异步脉冲产生器

设计通常要求基于某些事件产生脉冲。设计人员有时会使用延时链产生单个脉冲或一系列脉冲。这些技术是纯异步的,应该可能避免使用。

  1. 将同一个触发信号接到两个输入与门的输入端,但是对其中一个输入端的信号取反或加入延迟链。
assign b=a&!a;
  1. 寄存器输出经过延迟链后驱动同一个寄存器的异步复位端
always@(posedge clk or negedge rst_n)
beginif(!rst_n)q<=0;elseq<=1;
endassign rst_n=~q;

解决方案:使用同步方案产生脉冲
下面的同步触发器可以检测输入

避免使用锁存器

如果一个变量未能在always语句的所有可能执行条件下赋值,就会形成锁存器。
1、上一级的毛刺会传递至下一级
2、锁存器时序模糊

避免使用双边沿时钟

使用双边沿时钟能达到双倍的吞吐率,但会有一系列的问题。

使用双边沿遇到的问题
1、不对称的时钟占空比会导致违背建立和保持时间
2、很难确定关键信号的路径
3、插入扫描链要求所有寄存器使用同样的时钟边沿(或者插入多路复用器保证在测试模式下使用单一时钟)

时钟方案

内部产生的时钟

设计者应该尽可能避免在内部产生时钟,因为如果操作不当,它会导致设计功能和时序问题。由于组合逻辑搭建的时钟会产生毛刺,使功能出现问题,比如时钟毛刺会导致计数器误增的情况。而且窄毛刺会违背寄存器的最小脉冲宽度要求。产生内部时钟的组合逻辑也会增加时钟线上的延时,如果时钟偏移大于数据延迟,则违背寄存器的时序要求。

always@(*)begin#50 clk1=~clk1;end

解决方案:在组合逻辑的输出端增加一个寄存器,用寄存器的输出作为后面的时钟信号,以防止组合逻辑所产生的毛刺

always@(posedge clk)
begin
#50 clk2<=clk1;
end

分频时钟

在设计中要保证大多数时钟来自PLL。使用PLL避免异步时钟分频逻辑引起的许多问题,在对主时钟进行分频时,应该使用同步计数器或者状态机。寄存器直接产生分频时钟信号,不要对计数器或状态机的输出进行解码,然后产生时钟信号,会导致毛刺和尖峰脉冲。

行波计数器

使用行波计数器对时钟进行幂为2的分频,行为使用的门数更少。
在功耗较高的系统中很适合使用这种计数器,因为这样能大量降低由逻辑或SoC所引起的峰值功耗。

多路时钟

时钟多路器用于同一个逻辑功能具有不同的时钟。
满足以下标准,多路时钟是可以接受的(否则必须采用同步设计):
(1)初始化后,多路时钟逻辑不再改变
(2)在测试时,设计会选择普通时钟
(3)时钟切换时,寄存器始终处于复位状态
(4)时钟切换时,产生的短暂错误没有负面影响

复位信号设计策略

复位最基本的目的:SOC进入一个能进入稳定操作的确定状态,避免SOC在上电后进入随机状态而死机。
在系统没有明确要求的情况下为SOC每个触发器提供复位信号;但在某些情况下(如流水线),应去掉某些寄存器的复位信号以使设计达到更高性能

同步复位

同步复位的复位信号只有在时钟的有效沿到来时才能影响或者触发器的状态。
由于复位树的高扇出,复位延迟较时钟周期高。

always@(posedge clk)
beginif(!rst_n)out<=1'b0;else if(load)out<=in;
end


使用同步复位会出现一个问题是综合工具无法分辨复位信号和其他信号的区别,可能会产生以下电路结构:
同步复位的缺点:
(1)同步复位可能需要一个脉冲展宽器,以保证复位信号出现在时钟有效沿处,增加了逻辑器件
(2)复位信号可能如上文一样被标记为x,被外部引脚控制
(3)如果使用门控时钟,在复位信号发出时,时钟可能关闭(只能使用异步复位)

同步复位的优点:
(1)确保电路同步
(2)会综合为更小的触发器
(3)同步复位确保复位只发生在有效时钟沿,时钟可以作为过滤毛刺的方法。

异步复位

异步复位触发器在设计时加入一个复位引脚,当触发器复位端触发复位信号,进入复位状态。

always@(posedge clk or negedge rst_n)
beginif(!rst_n)out<=1'b0;else if(load)out<=in;
end

异步复位的缺点:
(1)异步复位不管产生或撤销复位信号,都是一个异步过程。加入异步复位在触发器时钟有效沿附近释放,输出就会进入亚稳态
(2)复位电路源头存在毛刺问题

异步复位的优点:
(1)只要库有带有异步复位的触发器,能保证没有任何复位信号加在数据路径上,对于时序很紧的设计,无法承担加入同步复位带来的额外单元门和额外线路延迟。
(2)异步复位不管有没有时钟都可以进行复位

移除异步复位的问题

移除系统中的异步复位会使芯片进入不稳定的未知状态。

(1)违背复位恢复时间(复位撤销后和时钟再一次置高之间的时间):可能会出现亚稳态问题
(2)复位移除可能会在不同时序元件的不同时钟周期内发生针对移除异步复位,采用异步复位同步释放的方案:

always@(posedge clk or negedge rst_n)
beginif(!rst_n)begin reg1<=0;reg2<=0;endelsebeginreg1<=1;reg2<=reg1;endend

过滤复位毛刺

异步复位对毛刺很迷干,这就意味着任何满足触发器最小复位脉冲宽度的额输入都能引发的输入都能硬气触发器复位。
过滤复位毛刺的方法
(1)复位输入引脚必须是施密特触发器
(2)采用延迟复位信号与复位信号做与门,过滤掉毛刺信号

控制时钟偏移

**时钟偏移:**整个芯片时钟信号到达时间的差异(如果顺序相邻且时钟沿偏移较大的寄存器,就可能会有违背时序的问题)
Tskew=Tci-Tcj

短路径问题

如何改善时钟偏移(使其最小)

  1. 在数据路径上加入延迟
  2. 时钟反转(在发送寄存器接受时钟沿前,时钟会先驱动接受触发器读入发送值)
  3. 交替相位时钟
    (1)交替使用时钟沿:为时钟偏移提供半个时钟周期的余量。
    (2)交替使用时钟相位:相邻触发器组有同一时钟的两个不同相位驱动。
    (3)行波时钟:只有当上一个触发器输出翻转,下一个触发器发挥被时钟驱动,避免了数据传播延迟比时钟偏移还短时。
  4. 平衡线路长度

硬件架构的艺术(一)相关推荐

  1. 硬件架构的艺术(四)

    硬件架构的艺术 第七八九章 处理字节顺序 大端小端的特点 处理字节顺序不匹配问题 消抖技术 抖动 开关行为 开关种类 消抖技术 RC消抖 硬件消抖电路 软件消抖电路 在足以让抖动停止后的时间读出开关 ...

  2. 硬件架构的艺术:同步FIFO设计

    目录 1. 概述 2. 同步FIFO设计 2.1 同步FIFO结构 2.2 同步FIFO空满信号产生 2.2.1 时序逻辑产生空满 2.2.1.1 fifo满信号产生 2.2.1.2 fifo空信号产 ...

  3. 【硬件架构的艺术】学习笔记(4)流水线的艺术

    目录 写在前面 4. 流水线的艺术 4.1 介绍 4.2 影响最大时钟频率的因素 4.2.1 时钟偏移 4.2.2 时钟抖动 4.3 流水线 读书笔记汇总 写在前面 这个博客系列是对最近阅读的书籍&l ...

  4. 硬件架构的艺术-行波计数器笔记

    1.同步电路和异步电路 同步电路:顾名思义,就是保证保持同一个时刻.就是在同一个时钟的上升沿或者下降沿去处理数据.(即同时的去处理数据)  异步设计:电路没有统一的时钟,即不是所有的触发器都同时处理数 ...

  5. 2-10、秋招年6月晋升期——《硬件架构的艺术-数字电路的设计方法与技术》

    写在前:虽然这几个月比较忙,但是挤一挤还是有时间更新文章的,说到底还是懒啊hhh,昨晚受到家人激励,嗯,,,,继续更新~ 第4章 时钟分频器 感兴趣的可以浏览一下. 以我目前工作年限,暂时还未涉及到这 ...

  6. 《硬件架构的艺术》读书笔记:Chapter 1 亚稳态的世界

    Chapter 1 亚稳态的世界 一.简介 同步系统中,数据和时钟有固定的因果关系(在同一时钟域(Clock Domains))中,只要数据和时钟满足建立时间和保持时间的要求,不会产生亚稳态(meas ...

  7. 硬件架构的艺术:时钟分频器

    目录 1. 概述 2. 整数分频器 2.1 偶数分频器 2.1.1 设计原理及结构 2.1.2 代码实现 2.2 奇数分频器 2.2.1 方法一(Mohit Arora) 2.2.1.1 设计原理及结 ...

  8. A100 GPU硬件架构

    A100 GPU硬件架构 NVIDIA GA100 GPU由多个GPU处理群集(GPC),纹理处理群集(TPC),流式多处理器(SM)和HBM2内存控制器组成. GA100 GPU的完整实现包括以下单 ...

  9. 一个完备的嵌入式系统硬件架构有哪几部分构成?

                一个完备的嵌入式系统硬件架构有哪几部分构成? 图 1 给出了本文的讨论所基于的硬件平台,实际上,这也是大多数嵌入式系统的硬件平台.它包括两部分: (1) 以通用处理器为中心的协 ...

最新文章

  1. 浏览器保存密码后自动填充问题
  2. 简易boundbox碰撞检测
  3. mongodb(2)
  4. 1452.接水问题(思维)
  5. 数据结构---关键路径
  6. java mapstring_ object 遍历_ListMapString,Object使用Java代码遍历以获取String,Object的值...
  7. codeforces166E - Tetrahedron DP
  8. Oier's little dream
  9. opencv-api matchShapes
  10. (转贴) ArcIMS初级教程(1)
  11. HDU_oj_2046 骨牌铺方格
  12. 也谈谈Javascript中的几个怪异特性(上)
  13. Win10 UWP vs add github
  14. Linux_service cloudera-scm-server start failed
  15. MySQL grant 语法的详细解析
  16. Ubuntu16.04桌面版pxe启动实现自动安装
  17. 概念学习和一般到特殊序
  18. 深信服售前产品经理校招面试总结(一面)
  19. 初学Python——协程
  20. [AS日记]MacOS的Android Studio卡在Building Gradle Project info走不动 的处理方法

热门文章

  1. 通过IDM工具高速下载百度云大文件的方法
  2. 苹果被指控隐瞒iPhone需求下滑 CEO与CFO同时成被告
  3. 召开有效团队会议的7个技巧
  4. RK平台WiFi/BT兼容方案
  5. php做群聊功能,使用socket.io 实现群聊天室
  6. 一个软件产品设计的完整流程
  7. 搜索引擎Lucene(6):查询结果高亮及词频提取
  8. 【DSP】运用FFT抑制一维数据中的高频分量(Python及Java安卓实现)
  9. 关于IP,这里有你想知道的一切!
  10. 华为分析服务| 简单三步,玩转精准运营