目录
8.3 实例——用Synopsys的工具Design Compiler进行逻辑综合
8.4.2 实例——用Synopsys的工具Prime Time进行时序分析
8.5 统计静态时序分析(SSTA,Statistical Static Timing Analysis)
第七章 同步电路设计及其与异步信号交互的问题
在一个功能复杂的SoC系统中,难免会有异步信号与同步电路交互的问题,特别是在有多个核和多个外设组成的SoC中,通常采用全局异步局部同步(GALS)的设计。
7.1 同步电路设计
7.1.1 定义
即电路中的所有受时钟控制的单元,如触发器(Flip-Flop)或寄存器(Register),全部由一个统一的全局时钟控制。
7.1.2 同步电路的时序收敛问题
-
- 建立时间要求;
- 保持时间要求;
7.1.3 同步电路设计的优点与缺陷
优点 | 缺陷 |
|
|
7.2 全异步电路设计
与同步电路最大的不同在于它的电路中数据传输可以在任何时候发生。
7.2.1 异步电路设计的基本原理
- 自定时原理
是一种局部解决时序的方法。
- 握手协议
常用的握手协议有两种,两相位握手协议(在ack和req的任何一对跳变沿组合出均可实现一次数据通信)和四相位握手协议(只有在Req和Ack固定的电平组合下才能实现数据传输)。前者效率较高但会造成电路死锁,后者较稳定,是多数电路的选择。
7.2.2 异步电路设计的优点与缺点
模块化特性突出 | 模块互连后的功能不会受各个模块内部延时的影响,更不需要重新修改模块设计,从而模块化特性突出; |
对信号的延迟不敏感 | 使用握手信号进行通信,电路的延迟只会影响工作速度,不会影响电路行为; |
没有时钟偏斜问题 | 用大量本地时序控制信号取代整体时钟,避免了时钟设计问题; |
有潜在的高性能特性 | 同步电路需要考虑最坏路径延迟,而一步电路的性能由电路的平均延迟决定,理论上比同步电路可以达到更高的速度; |
好的电磁兼容性 | 没有类似同步电路在特定时刻上的瞬时大电流; |
具有低功耗的特性 | 由数据驱动,尽在处理数据是才有功耗,而且异步电路在零功耗无数据状态和最大吞吐状态之间快速切换,不需要任何辅助; |
7.3 异步信号与同步电路交互的问题及其解决方法
7.3.1 亚稳态现象
- 亚稳态现象
违反了触发器建立时间和保持时间且使触发器锁存到一个无效电平的状态称为亚稳态现象。
- 亚稳态问题的解决及其RTL实现
利用两级同步器解决,此时的解决并不是完全消除亚稳态现象,而是大大减少亚稳态发生的概率。
7.3.2 异步控制信号的同步及其RTL实现(单bit)
- 慢到快时钟域的异步控制信号
注意慢时钟域的有效信号长度可能是快时钟域的几倍周期长度,一次信号被重复采样的问题,解决方式如下:
- 快到慢时钟域的异步控制信号
此时要注意的是快时钟域的有效信号长度不够,慢时钟域采样丢失,常见的解决方法是利用握手机制看,还可以将有效信号长度进行扩展后再传输给慢时钟域。
-
- 利用abdat2(从慢时钟反馈回来的控制信号)再去控制原始控制信号adat的延长时间,这样输出的adat1就是经过保持后的控制信号,但是不适用于有连续信号到来的情形,此时第二个控制信号会被忽略,该种方法的电路图与RTL代码如下:握手传输https://blog.csdn.net/l471094842/article/details/103195732
-
- 时钟停止法:当发现控制信号有效时,又组合逻辑发出停止快时钟的stall_n信号(低电平有效),由此来使快时钟域的触发器输出的控制信号保持不变,在收到从目的时钟域返回的反馈信号后,stall_n会拉高从而快速恢复快时钟,此种方法有效解决了第一种方法的缺点。时钟停止法https://zhuanlan.zhihu.com/p/647157938
-
- 脉冲同步器(快到慢)主要分为三个模块:同样适用于慢到快的信号传输。
-
- 第一部分为脉冲-电平转换电路;在快时钟域,接收到低电平的情况下,Q端输出保持信号,接收到高电平(即脉冲信号到来),状态翻转为高电平;再次接收到脉冲信号,状态翻转为低电平;(遇到脉冲为0时输出保持不变,一旦遇到1才开始翻转)
-
- 第二部分,打两拍进行信号同步;通过第一部分的操作,相当于对快时钟域的窄脉冲信号进行了展宽,这样慢时钟域的时钟便可以采集到该信号。
- 第三部分,电平脉冲转换;该部分本质上来说是一个双边沿检测电路,通过一个异或便可以解决,将此刻信号和前一时刻的信号相异或便可以转化为脉冲信号。
-
- 窄脉冲捕捉电路:(快到慢)
-
- 这是一个比较特殊的跨时钟域电路了,有时候,我们需要捕捉异步短脉冲控制信号,这个控制信号完全由前面的逻辑电路生成,与后面的电路信号无关,我们可以使用下面的窄脉冲捕捉电路来捕捉快时钟域产生的异步窄脉冲控制信号。
-
- 这是利用了脉冲信号的上升沿进行输出脉冲信号,然后通过后面反馈回来的信号进行清零,从而为下一次脉冲控制信号做好准备。需要注意的是,窄脉冲控制信号的产生频率不能太快,也就是需要等到清零信号无效(三个触发器的延时)后才能发出下一个脉冲控制信号,不然后面的慢时钟域采样电路无法识别两次控制信号,而只当成一次控制信号处理。
7.3.3 异步时钟域的数据同步及其RTL实现(多bit)
7.4 SoC设计中的时钟规划策略
首先,尽可能使用同步设计
- 对于同步电路,逻辑综合和时钟树综合等EDA工具能够发挥更大的作用,可以用静态时序分析工具来分析单时钟同步设计的时序收敛问题;
- 可测性设计(DFT)的插入得到最大的简化;
其次,注意同步设计的缺陷
- 噪声问题,所有时序逻辑单元都在同一边沿发生改变,会对数字系统造成很大的辐射噪声;
- 时钟树上的功耗很大;
如果采用不同的时钟需要注意
- 后端设计的复杂化;
- 可测性设计更复杂,因为此时系统中有许多条独立的扫描链;
- 越多的时钟域,发生亚稳态的可能性就越大;
最后,设计规划中还需注意
- 尽可能将不同时钟域的数量减少到越小越好;
- 尽可能将异步交互电路归入同一或多个独立的模块;
- 尽可能避免电平触发器(Latch),因为静态时序分析会变得复杂,不能得到EDA工具很好的支持;
- 尽可能减少时钟树的延迟,因为这个延时可能会造成系统功能失效和多余的功耗;
- 任何异步时钟域交互的环节都要尽可能避免亚稳态现象;
第八章 综合策略与静态时序分析方法
8.1 逻辑综合
利用工具将RTL代码转化为门级网表的过程称为逻辑综合。
8.1.1 流程介绍
- 用硬件描述语言进行设计
- 指定工艺库
- 读入设计
- 定义环境约束条件(包括工艺参数,即温度、制造工艺、电压,I/O端口属性等)
- 设定设计的约束条件(定义时钟、设定设计规则约束、输入/输出延时、面积约束)
- 优化设计(主要目的是在满足时序要求的前提下尽量减少芯片面积)
- 分析及解决问题
- 保存数据
8.1.2 SoC设计中常用的综合策略
- 自顶向下的综合策略(Top-down)
顶层设计与其子模块同时编译,仅需要施加顶层约束。
- 自底向上的综合策略(Bottom-up)
是指先单独的对各个子模块进行约束和综合,完成后,赋予他们不再优化属性,将他们整合到上一层模块中进行综合,重复这一过程,直至综合最顶层的模块。
Top-down | Bottom-up | |
优点 |
|
|
缺点 |
|
|
8.2 物理综合的概念
物理综合要求的约束条件通常有芯片尺寸、引脚位置、线上负载信息、版图规划信息等,使用以下两种操作模式。
- RTL到门级模式
物理综合的输入信息是RTL级的设计电路、版图规划信息及含有版图信息的物理综合的库文件,经过综合后,输出带有布局数据的门级网表及布局信息。
- 门级到布局后门级模式
与上一个最明显的区别就是物理综合的输入信息是门级网表而不是RTL级的设计电路。门级网表是由传统方法通过逻辑综合方法运用先负载模型得出的。通过物理综和可以优化网表并得到门级电路的布局信息。
8.3 实例——用Synopsys的工具Design Compiler进行逻辑综合
8.3.1 指定库文件
8.3.2 读入设计
8.3.3 定义工作环境
8.3.4 设置约束条件
8.3.5 设定综合优化策略
8.3.6 设定脚本举例
8.4 静态时序分析
8.4.1 基本概念
传统的电路设计分析方法采用动态仿真的方法来验证设计的正确性,而动态仿真的方法验证上百万个甚至更多门级电路集成在一个芯片上的情况时,则需要花很长的时间,且只能测试到部分逻辑而其他的逻辑被忽略。为了解决这个问题,静态时序分析(STA)应运而生,它不仅要快很多,而且能够验证所有的门级电路设计的时序关系。内容主要包括:
- 从原始输入端到设计电路中所有触发器;
- 从触发器到触发器;
- 从触发器到设计电路的原始输出端口;
- 从设计电路的原始输入端口到原始输出端口;
还有静态时序分析中用到的基本概念有:时序路径的定义、触发器的建立时间、保持时间和恢复时间、时间裕量、时钟偏斜。
8.4.2 实例——用Synopsys的工具Prime Time进行时序分析
- 静态时序分析STA的流程图
- 流程说明
- 阶段1:读取设计电路数据
- 阶段2:创建设计电路的约束条件
- 阶段3:指定环境分析条件
- 阶段4:进行静态时序分析,产生分析结果
-
-
- report_timing:显示时序路径信息;
- report_constraint:显示设计电路的先关约束信息;
- set_case_analysis:用此命令在进行静态时序分析的时候可将一个固定的逻辑值赋给某个端口;
- set_multicycle_path:定义多周期路径的时序信息;
- set_disable_timing:帮助PT选择正确的时序路径的命令;
-
-
- 阶段5:检查分析结果
- 如何检查时序冲突和修正冲突
-
- 消除建立时间的冲突方法如下:
-
-
- 加强约束条件重新综合设计电路或对产生冲突的时序路径进行进一步的优化;
- 通过做ECO(Engineering Change Order)来消除冲突;
- 如果以上方法都不能产生效果,那可能只好通过修改RTL代码来实现;
-
-
- 消除保持时间的冲突方法如下:
-
-
- 绝大多数的布局布线工具都有自动消除保持时间冲突的功能,可以通过这些工具来实现;
- 如果工具不能实现,可以在产生冲突的时序路径上通过ECO添加缓冲器逻辑,使得数据到达的时间符合保持时间的检查,以此消除冲突;
-
- synopsys_pt.setup 文件实例
- main script 实例
8.5 统计静态时序分析(SSTA,Statistical Static Timing Analysis)
8.5.1 传统时序分析的局限
制程变异的来源有很多,主要包括每批晶圆的差异、晶圆与晶圆间的差异、裸片间的差异以及裸片上的差异等,但是静态时序分析对此无能为力。当线宽进一步减小,晶片上的工艺偏差对电路的影响不能再被忽略时,基于概率分布来考虑的统计静态时序分析方法出现,对晶片上工艺偏差进行更好的建模。
8.5.2 统计静态时序分析的概念
统计静态时序分析将上述同一个芯片上的各种不确定情况以统计的方式建模,分析电路的延迟。
8.5.3 统计静态时序分析的步骤
首先要有统计静态时序分析的标准单元库。
通过统计静态时序分析,找出合适的时序窗,在此窗中,良率可以达到最高。
总之,统计静态时序分析通过对制程变异进行恰当的建模,更好地解决了延迟的不确定性问题,避免了过度的余量,提高了设计的性能及制造的良率。
第九章 SoC的验证
9.1 功能验证概述
9.1.1 功能验证的概念
设计验证是证明实现与设计目标一致的一个过程,是在设计的各层次进行的。IC设计中的验证可以分为功能验证、时序验证、形式验证和物理验证,本章所讲述的功能验证是在系统级和RTL级进行的,是以验证方法为基础,而不是以验证工具为基础。
功能验证一般是指设计者通过各种方法比较设计完成的电路模块和设计文档实际规定的功能是否一致。通过功能验证可以找出功能模块中存在的逻辑缺陷,保证逻辑设计的正确性。因此,功能验证的目标是尽量确保设计能够实现设计要求中所描述的功能。功能验证的方法学主要有软硬件协同仿真、基于断言的验证、随机验证、基于覆盖率的验证和基于硬件加速的原型等。
9.1.2 SoC功能验证的挑战
- 系统复杂度提高增加验证难度
- 设计层次提高增加了验证工作量
9.1.3 SoC功能验证的发展趋势
9.2 功能验证方法与验证规划
SoC功能验证可以分为不同的验证层:
-
- 模块内:内部设计的错误可以通过直接仿真捕获到,验证内容主要是模块功能,如算法、数据传输等;
- 模块间:每个模块可能是不同人设计的,设计错误是比较难找到的;
- 芯片层:把所有模的独立验证集成,在芯片顶层(Top-Level)执行;
- 系统应用层:需要尽可能模仿真实的应用程序和应用环境;
9.3 系统级功能验证
9.3.1 系统级的功能验证
需要在各阶段保证模块的功能正确,同时对应系统的要求,需要对整体性能及相互间的协议进行验证。
- 行为级功能验证:与RTL级相比,高层次的建模,如事物级建模可以加快仿真速度,更快、更好地验证系统级功能设计的正确性。
- 性能验证:主要是在设计确定之前,对整个芯片设计的架构及各模块之间的接口进行验证和评估。
- 协议验证:在确定模块特定功能正确的轻快下,还必须要根据系统总线协议对该模块的接口部分进行验证,它必须具备以下要素:
- 系统级的验证平台:边界条件、设计的不连续处、出错的条件和极限情况;
- 系统级的验证平台标准
- 硬件模拟器