草庐IT

【《硬件架构的艺术》读书笔记】02 时钟和复位(1)

magnolia666 2023-03-28 原文

2.1 概述

这章主要内容是ASIC设计时的一些建议,这些建议独立于EDA和工艺,主要针对模块设计和存储器接口。

2.2 同步设计

同步设计特点:单个主时钟和单个主置位/复位信号驱动设计中所有时序器件。

同步设计:ASIC设计时域控制最安全的方法。

2.2.1 避免使用使用行波计数器。

行波计数器:将触发器输出作为其他触发器的时钟输入端,由于数据相对时钟会有延迟,所以不推荐这种使用方式。

2.2.2 门控时钟

门控单元会导致时钟偏移,并会引入尖峰脉冲单元作用于触发器。

可能仿真正常,综合出问题。

 

2.2.3 双边沿或混合边沿时钟

 

缺点:为使用同步复位和使用插入扫描链这样的测试方法带来麻烦,增加了确认关键信号路径的难度。

不过有时候为了追求性能还是会使用双边沿,如DDR。

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

第二级输出同时受时钟边沿和复位信号影响,违反了同步设计原理。

2.3 推荐的设计技术

要理解综合工具如何对不同的HDL编码风格和结果进行解释(硬件思维),其会影响设计门数和时序性能。

2.3.1 避免在设计中出现组合环路

所有反馈回路都应包含寄存器,组合环路违背了同步设计原理。

组合环路是不可综合的。

 

解决方法:引入一个触发器或者寄存器。

许多设计工具中,组合环路都会导致无休止的循环计算,所以EDA可能以不同的方式把组合环路打断,导致于原始设计意图不一致。

2.3.2 避免数字设计中的延迟链

延迟链:两个或多个单扇入单扇出的连续节点产生延迟。

使用场景:异步设计中,解决其他组合逻辑导致的竞争条件。

缺点:增加设计对操作环境的敏感性,降低设计的可靠度,增加移植到不同器件结构上的难度。

避免使用延时链,需要在设计中使用同步技术取代异步技术。

2.3.3 避免使用异步脉冲产生器

两种脉冲产生的方法(纯异步):

1、同一个信号接两输入与门或者或门,其中一个取反或者加延迟链,脉宽取决于两个信号相对延迟。(相当于人为增加毛刺宽度)

2、寄存器输出延迟后驱动同一个寄存器的异步复位端。

异步产生的脉冲宽度常常为综合和布局布线软件带来困难,实际脉宽只有在布局布线之后,布线和传播延迟已知时才能确定。所以在创建HDL时很难得到可靠的延迟值,且PVT环境,工艺脉宽都会变。且STA不能验证脉宽,验证工作会变得困难。

PVT环境:压力、体积、温度(Pressure-Volume-Temperature)。

这里多谐振荡器翻译成多振子有点怪怪的。

由于涉及对脉冲数量的控制,所以多脉冲结构会比脉冲产生器引起更多问题。多脉冲也增加了设计的频率。

推荐使用的同步脉冲产生器:

 

 这个结构脉宽总是于时钟周期宽度相等,可以用时序分析验证,易于移植,独立于工艺。

always@(posedge clk)
begin
    q2<=q1;
    q1<=d;
end
assign Pulse=q1&~q2;

不过感觉这里还是有点问题,经过触发器后触发信号延后了一个周期,脉冲应该也延后一个周期才对。

类似的,可以在触发输入末端产生脉冲的脉冲产生器。

 

 2.3.4 避免使用锁存器

这是一个老生常谈的问题了,在其他的书里已经看到了很多次。

 

图中电路X和Y同时拉高,形成了一个类似组合环路的结构,会使电路振荡。原因:Latch的触发信号高电平时,输出对于输入来说是“透明的”。

 STA分析器通常会做出与锁存器透明有关的错误假设:要么发现伪路径,要么丢失真正的关键路径。寄存器本身时序也是模糊的。这样的代码很难移植或者复用。

锁存器常常使电路不可测。

FPGA是寄存器密集型电路,所以使用latch会占用更多资源。

不完整的if或者case会导致意料外的的latch的生成(因为组合电路要保持之前的值就得用latch)。

对于某些不支持Latch的FPGA,就会综合出组合环路代替Latch。

 图中电路有锁存数据的能力,但是可能违背建立时间和保持时间的要求,而且很难发现。

Latch也并不是完全没用,事实上可以用Latch挪用周且或者借用时间来满足关键路径的要求。

2.3.5 避免使用双边沿时钟

优点:给定时钟速率下达到两倍的吞吐量。

缺点:违反了同步电路的原理并将造成一系列的问题。

问题:

 

 等效同步电路:

 

 

 

 

 上述等价是在时钟占空比为50%时成立的,如果时钟非对称占空比可能导致违背建立和保持时间,扫描路径也不能容易地通过触发器。

使用条件:对性能/速度要求很高、且无法承受使用等效同步电路在DFT和验证方面带来的额外开支。

优点:

1、提升性能。

2、过高的时钟频率会给许多接口带来问题。

3、降低功耗。

除非等效同步电路无法完成所期望的性能时,设计人员才应该使用双边沿时钟。

这里补充一个芯片功耗公式:

 

 第一项为动态功耗,与负载电容、供电电压的平方和工作频率成正比。

第二项为静态功耗主要是漏电带来的功耗。

有关【《硬件架构的艺术》读书笔记】02 时钟和复位(1)的更多相关文章

  1. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

  2. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  3. 牛客网专项练习30天Pytnon篇第02天 - 2

    1.在Python3中,下列关于数学运算结果正确的是:(B)a=10b=3print(a//b)print(a%b)print(a/b)A.3,3,3.3333...B.3,1,3.3333...C.3.3333...,3.3333...,3D.3.3333...,1,3.3333...解析:    在Python中,//表示地板除(向下取整),%表示取余,/表示除(Python2向下取整返回3)2.如下程序Python2会打印多少个数:(D)k=1000whilek>1:    print(k)k=k/2A.1000 B.10C.11D.9解析:    按照题意每次循环K/2,直到K值小于等

  4. ruby - 是否有将图像文件转换为 ASCII 艺术的命令行程序或库? - 2

    有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/

  5. ruby - Ruby 和 Ruby on Rails 中的三层架构 - 2

    我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby​​1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails

  6. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板 - 2

    写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c

  7. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  8. ruby-on-rails - 具有六边形架构和 DCI 模式的框架和数据库适配器 - 2

    我尝试用Ruby设计一个基于Web的应用程序。我开发了一个简单的核心应用程序,在没有框架和数据库的情况下在六边形架构中实现DCI范例。核心六边形中有小六边形和网络,数据库,日志等适配器。每个六边形都在没有数据库和框架的情况下自行运行。在这种方法中,我如何提供与数据库模型和实体类的关系作为独立于数据库的关系。我想在将来将框架从Rails更改为Sinatra或数据库。事实上,我如何在这个核心Hexagon中实现完全隔离的rails和mongodb的数据库适配器或框架适配器。有什么想法吗? 最佳答案 ROM呢?(Ruby对象映射器)。还有

  9. FPGA 之 时钟,时钟域, 以及复位系统的设计 - 2

    FPGA时钟和时钟域时钟树所谓时钟树为FPGA内部资源,分:全局时钟树,区域时钟树,IO时钟树原则上优先使用全局时钟树,在GT接口上使用IO时钟树,一般工具也会对GT时钟加以限制;时钟树使用方式正确的物理连接FPGA会由物理管脚专门用于全局时钟设置,通过查询数据手册可以在PCB设计阶段进行确认,当外部时钟接入此管脚时,工具会自动占有全局时钟树资源,当接入普通信号时不会分配时钟树资源;恰当的代码描述原语的使用,即BUFG的使用,可以将PLL的输出等内部时钟进行全局时钟资源的分配;IO时钟资源需要参考相应接口手册,以ultrascale的GTH为例,其JESD204的时钟方案针对不同的子类会由不同

  10. 计算机网络笔记:TCP三次握手和四次挥手过程 - 2

    TCP是面向连接的协议,连接的建立和释放是每一次面向连接的通信中必不可少的过程。TCP连接的管理就是使连接的建立和释放都能正常地进行。三次握手TCP连接的建立—三次握手建立TCP连接①若主机A中运行了一个客户进程,当它需要主机B的服务时,就发起TCP连接请求,并在所发送的分段中用SYN=1表示连接请求,并产生一个随机发送序号x,如果连接成功,A将以x作为其发送序号的初始值:seq=x。主机B收到A的连接请求报文,就完成了第一次握手。客户端发送SYN=1表示连接请求客户端发送一个随机发送序号x,如果连接成功,A将以x作为其发送序号的初始值:seq=x②主机B如果同意建立连接,则向主机A发送确认报

随机推荐