前端学习 10 :SOC设计中的验证

目录

引言:

验证内容:

验证方法的分类

[😀2. 静态验证(静态检查)](#😀2. 静态验证(静态检查))

[b--- 语义检查 (linting check);](#b--- 语义检查 (linting check);)

[c--- 跨时钟域检查(CDC)](#c--- 跨时钟域检查(CDC))

d---形式验证

[e---静态时序分析 STA](#e---静态时序分析 STA)

[用synopsys 的PrimeTime 进行时序分析](#用synopsys 的PrimeTime 进行时序分析)

😀1.动态验证(动态仿真)-功能验证

核心组成部分​​

工作流程示例(以CPU设计为例)​​


IP设计流程

1、设计需求

2、方案设计

3、Design doc

4、RTL Coding

5、lint 检查,CDC检查

6、验证计划建议书

7、rsim&debug+记录

8、验证review

9、 constaining design for synthesis & STA

10、Desgin review

11、IP Check list

引言:

IC 设计中的验证可以分为:功能验证、时序验证、形式验证、物理验证。

验证内容:

• 验证原始描述的正确性;

• 验证设计的 " 逻辑功能 "符合设计规范的要求;---功能验证

• 验证设计结果的时序是否符合原始设计规范的性能指标;

• 验证结果是否包含违反物理设计规则的错误。

验证方法的分类

验证方法大体可分为两类:动态验证、静态验证。------这俩都重要

1.动态验证(动态仿真)

动态验证也叫动态仿真简称仿真-<simulation),是指从电路的描述提取模型,然后将外部激励信号或数据施加于此模型,通过观察该模型在外部的激励信号作用下的实时响应来判断该电路系统是否实现了预期的功能。仿真是目前常用事件驱动的方法,也是发展周期驱动的方法。
2. 静态验证(静态检查)

静态验证是指采用分析电路的某些特性是否满足设计要求的方法,来验证电路的正确与否。形式验证是近几年来兴起的一种验证方法,它需要有一个正确的模型作参考,把待验证的电路与正确的模型进行比较,并给出不同版本的电路是否在功能上等效的结论,它利用理论证明的方法来验证设计结果的正确性。

比较动态验证和静态验证,各有优势和不足。

动态仿真主要是模拟电路的功能行为,必须给出适当的激励信号,然而很难选择激励来达到覆盖电路所有功能的目的,同时动态仿真很耗费时间。

静态验证是针对模拟电路所有的工作环境,检查电路是否满足正常的性能指标,此类验证只限于数字逻辑电路,其准确性低于动态仿真,偶尔还会提供错误信息。

先说静态验证

😀2. 静态验证(静态检查)

静态验证不需要输入激励信息,只需输入电路模型和相关参数及命令,验证工具会自动对该电路模型进行分析,并显示出分析的结果。

由于静态验证是由工具自动完成的,不需要人工过多的干预,所以通常对所设计的电路首先进行静态验证,以纠正一些比较明显的错误,然后再动态仿真,确定其具体的行为是否正确。

静态检查可细分出更多种类,我们将这些方法概括为:

• 语法检查(syntax check);

• 语义检查 (linting check);````````soyglass工具

• 跨时钟域检查(CDC, Cross-clock Domain Check);````````soyglass工具

• 形式验证(formal verification)

• 静态时序分析

a--- 语法检查(syntax check)

b--- 语义检查 (linting check);

语义检查是在设计可行性上的深入检查。专用的工具为spyglass. 术语叫:清 lint. 可参考下面链接

芯片学习 8 :IP集成、cluster、lint_quad core signle cluster-CSDN博客

语义检查的范围包括:

• 常见的设计错误;

• 影响覆盖率收敛的问题;

• 可能会产生x值以及受其影响的设计部分。

进一步细化这些检查项,它们会具体检查以下设计方面:

验证收敛性检查

• 无法达到的逻辑部分

• 无法跳转到的状态机状态

• 无法完成的状态机跳转逻辑

硅效用检查

• 寄存器被固定赋值

• 寄存器未初始化

• X值的传播

功能问题检查

• 状态机检

• 总线检查

• case 语句检查

• 数学逻辑检查

这些静态检查最大的便捷性在于,可以在早期发现一些功能实现以外的设计问题,而且也有助于完善设计代码,提高有效覆盖率以及 RTL 与网表的逻辑一致性(例如寄存器未初始化或者固定赋值)。语义检查最显著的两个优势在于:

• 不需要验证环境。设计人员可以在发布设计版本前用语义工具检查修改设计中的问题,这对在仿真之前扫清基本障碍、保证设计质量很有帮助。

• 不需要写断言。这与形式验证有关;语义检查无关乎设计从功能描述到实现的翻译准确度,所以不需要断言参与进来。

c--- 跨时钟域检查(CDC)

跨时钟域检查(CDC)是为了保证所有信号都能得到正确的同步。

soc 设计中的不同功能模块如果被不同的时钟驱动,就会形成不同的时钟域(clock domain)。拥有多时钟域的硬件,其跨时钟域的逻辑通信就需要考虑同步问题。在这里,用来验证这些设计要求的过程称为跨时钟域检查。(动态仿真、静态时序分析(static timing analysis)不能判断出来)

需要同步是因为考虑到不同时钟域的信号采样问题,当时钟域A 的信号进入时钟域B被采样时,每个周期都有相对时钟B不同的延迟,这种随机性可能导致建立时间或保持时间无法满足,进而导致不可预期的功能失败。

d---形式验证

通过EDA工具,分析"移植的电路设计" 的功能,是否与原电路一致。一般不需要对新电路进行仿真,所以可以大量地减少验证时间,提高电路设计效率。

1、主流:等效性检查。比较两个电路逻辑功能的一致性。通常是比较 'RTL 代码 "与 "布局布线后提取的网表" 逻辑功能是否一致。 加入扫描链之前与之后的网表在工作模式下的功能是否一致。

2、属性检查,有验证语言描述设计行为(属性),用断言结合静态工具进行空间穷举。(获得最大的验证覆盖率)

e---静态时序分析 STA

分析时序路径的建立时间、保持时间。

静态时序分析技术通过输入一定的设计约束来静态地检查设计的时序功能,而不需要加入相应的测试向量进行逻辑功能仿真。它是建立在同步数字电路设计基础上的,是一种穷尽的分析方法。

静态时序分析工具 通过时序路径计算延迟的总和,并比较相对于预定义时钟的延迟,它仅关注时序间的相对关系,而不是评估逻辑功能。与动态仿真比,静态时序分析所需的时间很短。

// ( 静态时序分析工具首先要接收用户输入,分析网表,并将单元映射进目标库中,根据网表生成具有所有路径的列表,接下来,由延迟引擎计算单元和互连值,然后,时序验证引擎计算相对于预定义时钟域的间隙与约束冲突,输出报表与多种可视工具,并可根据用户要求将结果分类。
静态时序分析工具可识别的时序故障数要比仿真多得多,包括建立/保持时间、最小和最大跳变延时、时钟脉冲宽度和时钟畸变,门级时钟的瞬时脉冲检测、总线竞争与总线悬浮错误、不受约束的逻辑通道。另外,一些静态时序分析工具还能计算经过导通晶体管、传输门和双向锁存的延迟,并能自动对关键路径、约束性冲突、异步时钟域和某些瓶颈逻辑进行识别与分类。时序分析工具种类很多,如 Synopsys 公司的Primetime 是业界普遍作为 Sign-off的静态时序分析工具。)

STA 的内容:

STA 工具主要对设计电路中划分为4种路径如下,然后分析他们的时序信息,得到建立时间和保持时间的计算结果。

其中涉及比如计算出最慢与最快的开关时间、决定最坏的路径、比较信号到达的时间与要求的时间是否一致等,最后产生分析报告。

4种路径如下:

  • ​Input-to-Reg​ 从原始输入端到设计电路中的所有触发器;
  • Reg-to-Reg​ 从触发器到触发器;
  • ​Reg-to-Output 从触发器到设计电路的原始输出端口;
  • Input -to-Output 从设计电路的原始输入端口到原始输出端口;

关键路径:所有时序路径中最长的一条(延时有关),这条最长的路径将决定系统的最快工作速度。STA 工具可以通过检查建立时间(比较信号最晚到达的时间及要求的最早到达时间,来检测信号到达的是否太晚),此方法也可以找出关键路径。----------应该使用最坏条件下的库文件来分析

保持时间的分析,是对比信号最早可能改变的时间,与要求保持到的最晚的时间进行对比,来检测信号是否到达太早,进而可以检查出设计中潜在的竞争与冒险问题。

静态时序分析的精髓就在于 判定和分析这两个参数的结果。

其中一些关键的时序信息参数:

  • 建立时间和保持时间
  • 时钟偏斜 :时钟到达时间在空间上的差别
  • 最大扇出
  • 最大跳变时间
  • 最大负载电容

建立时间和保持时间:

建立时间(时钟信号有效沿到来之前,数据保证稳定状态时间 time setup)

保持时间(时钟信号有效沿过后,数据保持的一段稳定时间 time hold )

Tcomb 组合逻辑路径的延迟, Q1 为触发器R1的输出。

时序收敛:时钟周期 T >= Tcomb + Tsu

时钟偏斜 :时钟到达时间在空间上的差别 clock skew。从时钟定义点,到不同的触发器时钟引脚的延时差。(理想状态下,相邻触发器的两个时钟沿相差一个时钟周期)

触发器的恢复时间:在时钟信号的时钟沿到达之前,重置信号必须保持有效的最小时间。

用synopsys 的PrimeTime 进行时序分析

Primetime,缩写为PT,是一个独立的STA 工具。prime- 基本的;优质的;典型的; 它不仅能够在设计电路所要求的约束条件下检查时序,还能对设计电路进行全面的静态时序分析。

PT和DC都有约束时序条件的命令,能够产生相似的分析报告,支持同样的文件格式。与DC相比,PT分析得更快,需要的内存更少,而且报告的信息量更多、更准确。

流程:

1、pt_shell 读取设计电路数据(映射后的 .db 文件)

2、创建设计电路的约束条件 ( 命令和DC 一致)

3、指定环境分析条件(命令几乎和DC 一致)

4、进行静态时序分析,产生分析结果

5、检查分析结果

建立时间和保持时间的冲突,有不同的方法可以消除。

消除建立时间冲突的方法如下:

• 加强约束条件重新综合设计电路或对产生冲突的时序路径进行进一步的优化;

• 通过做 ECO(Engineering Change Order)来消除冲突;

• 如果以上方法都不能产生效果,那可能只好通过修改 RTL 代码来实现。

消除保持时间冲突的方法如下:

• 绝大多数的布局布线工具都具有自动消除保持时间冲突的功能,可以通过这些工具来实现;

• 如果工具不能实现,可以在产生冲突的时序路径上通过ECO 添加缓冲器逻辑,使得数据到达的时间符合保持时间的检查,以此消除冲突。

😀1.动态验证(动态仿真)-功能验证

地位:仿真目前依然是功能验证中最主要的方法,其它都是补充。
在RTL 设计阶段,模块集成后,要进行功能仿真验证。工具:VCS

​"仿真验证环境"​ ​指的是​一套用于模拟和测试芯片设计正确性的虚拟实验平台()​​。它通过软件工具模拟芯片在实际硬件中的运行行为,帮助工程师在芯片制造(流片)前发现并修复设计错误。

这里的"环境"不是指物理空间,而是指​​由软件工具、测试代码、自动化脚本、数据管理工具等组成的完整验证体系​ ​,就像为芯片设计搭建的一个"数字孪生++实验室++"。

核心组成部分​
​组件​ ​作用​ ​类比解释​
​仿真工具​ 模拟芯片的电路行为(如Synopsys VCS) 相当于"虚拟芯片实验台"
​测试用例(Testbench)​ 编写测试场景(如"让CPU计算1+1") 相当于"实验操作手册"
​波形查看器​ 显示信号时序(如Verdi、GTKWave) 相当于"显微镜",观察芯片内部信号
​覆盖率分析工具​ 统计测试是否覆盖所有代码分支(如代码覆盖率、功能覆盖率) 相当于"考试评分表"
​自动化脚本​ 批量运行测试、分析结果(如Python/Tcl脚本) 相当于"实验助手"
工作流程示例(以CPU设计为例)​
  1. 搭建环境:安装仿真软件(如VCS),编写测试平台(Testbench)。

  2. 灌入测试:模拟CPU执行指令(如"ADD R1, R2, R3")。

  3. 检查结果:

    • 波形工具看寄存器值是否变化正确

    • 覆盖率工具检查是否测了所有指令(如跳转/中断)

  4. 修复问题:如果发现加法器算错,修改RTL代码重新仿真。

相关推荐
西岸行者6 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意6 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码6 天前
嵌入式学习路线
学习
毛小茛6 天前
计算机系统概论——校验码
学习
babe小鑫6 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms6 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下6 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。6 天前
2026.2.25监控学习
学习
im_AMBER6 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J6 天前
从“Hello World“ 开始 C++
c语言·c++·学习