数字IC前端流程概览及学习资料推荐
写在前面:数字芯片从设计到实现是一个工作细分程度很高的过程,一枚芯片的产生需要数个团队的共同努力才能实现既定的功能。了解芯片的设计流程,有助于大家理解自己的工作定位,更出色地完成自己的工作。本篇文章将简单介绍一下数字IC前端的部分工作内容,并在此基础上推荐了一些笔者认为很经典的学习资料,希望能与各位读者共勉。芯片从设计到实现的过程大致可以分为前端逻辑设计 与 后端物理设计工作。其中:
关注公众号【TechDiary】后台回复“IC资料”,可以获得更多本文相关资料。
- 逻辑设计:将声明功能与特性的设计书转化为芯片的门级网表
- 物理设计:将门级网表转化为可以直接交付给代工厂的物理版图,进入流片过程
本文的主要内容是前端逻辑设计的流程,将分为以下几点介绍:
- 功能声明与架构文档的制定
- RTL设计
- 仿真验证
- 逻辑综合
- 静态时序分析
- 形式验证
根据功能声明的文档,会根据以往经验提出相应的解决方案,进行架构的设计以及模块的划分,在这一步会确定系统的构成以及子模块的输入输出。
以上两个文档是整个芯片开发流程中的核心文档,描述出了芯片的“骨架”,通常需要经验丰富的工程师讨论制定。
二、心中有电路,手上有代码——RTL设计 在架构文档完成后,需要将划分出的模块逐一进行RTL的设计。
形成RTL的设计不仅仅是Verilog的编写,更重要,也更考验IC设计工程师能力的是对电路的掌控能力。也就是那句常说的话,“心中有电路,手上有代码”,所有的HDL语言仅仅是用来描述电路的,而不是设计电路的,新手时常犯这样本末倒置的错误,包括笔者自己。解决方法,笔者认为一个是在设计模块前都会预先大概画一下电路图,综合后再与综合出的门电路进行对照,可以锻炼自己的电路设计能力,还有就是多参考前人的经典设计,最近的推送的公众号文章也是出于这样的考虑。
**书籍资料:**关于RTL的设计资料,首先是我们常用的硬件描述语言Verilog HDL的语言标准文件:
- 《IEEE Standard Verilog Hardware Description Language (1364-2001)》
- 《数字设计和计算机体系结构》
- 《轻松成为设计高手——Verilog HDL实用精解》(EDA先锋工作室)
- 《硬件架构的艺术——数字电路的设计方法与技术》(Mohit Arora著 李海东等译)
- 《自己动手写CPU》(雷思磊)
System Verilog(简称SV)是Verilog语言的发展,相比于Verilog添加了面向对象编程的部分,对验证的支持更完善。
UVM是一个经过实践检验的验证方法学,它可以理解为一个函数库,经过库的封装和一些固定用法提高了验证平台的可重用性,使我们可以在改动很小一部分代码后实现新的仿真激励。UVM验证的核心在于随机激励,抛开验证方法学和语言来讲,验证的目的就是从各个角度测试系统的正确性与稳定性,随机激励是能够满足现实条件与测试要求的一种方法。
那么什么时候验证就算完成了呢?验证有评价进度的指标,一方面是代码覆盖率,包含行覆盖率、翻转覆盖率、分支覆盖率、条件覆盖率、有限状态机覆盖率,可以看出这些指标是客观评价代码的。另一方面是功能覆盖率,功能覆盖率是指当前设计能够满足的功能点占比,功能点则是之前功能文档中的人为设定的。
代码覆盖率是客观上的评价,功能覆盖率是主观上的评价。当代码覆盖率接近100%(通常达不到100%),功能覆盖率为100%(必须达到100%)时,验证的工作就结束了。此时通过验证测试的RTL具有一个特性:RTL内所有的代码都是有效的且经过了测试,并且功能能够达到文档中列及的功能点。
**书籍资料:**验证方面的书籍资料较少,相应的选择也少,给大家推荐最经典最受欢迎的书籍:
首先是要学习System Verilog语言,业内经典书籍绿皮书:
- 《System Verilog验证——测试平台编写指南》(克里斯·斯皮尔著 张春等译)
- 《UVM实战(卷I)》(张强)
- 《芯片验证漫游指南》(刘斌)
- 《Universal Verification Methodology(UVM) 1.2 Class Reference》
常用的仿真验证EDA软件有VCS、Verdi、QuestaSim、NC-Verilog等,分属于不同的公司,仿真EDA只要学会一种就可以了,其他的也大同小异。
四、把萝卜放到坑里——逻辑综合 逻辑综合的主要作用,是将RTL代码描述的电路映射到目标库中的电路单元,在映射过程中,还会根据目标库电路单元的特性优化改变电路结构。逻辑综合现在已经被EDA软件承担了绝大部分的工作,工程师需要做的是为EDA软件指路——设定约束,对面积、时序等关键参数进行人为的干预,使综合出来的结果能够满足要求。这里需要提的是进行到逻辑综合步骤时,设计已经经过了功能仿真验证,进入到逻辑综合的RTL设计已经不会再变。
书籍资料:
逻辑综合软件大多使用Synopsys公司的Design Compiler(DC),关于综合的指令大家还是要参考官方的用户指导,上面有非常详细的介绍:
- 《Design Compiler User Guide》
EDA软件:
主流逻辑综合软件Design Compiler
五、时间管理——静态时序分析 逻辑综合之后生成的带门延时的网表文件如何能够保证与RTL的设计具有相等的功能表现呢?在FPGA当中,我们经常使用综合后仿真结果检查设计是否还能够与功能仿真一样完成既定功能,但是有过这样经历的朋友肯定对仿真速度有着相当深刻的印象。相比功能仿真,综合后仿真由于加入了更多运算信息,仿真的速度大大下降。
因此芯片开发中换了一种思路,那就是静态时序分析+形式验证。
- 静态时序分析保证了网表设计不存在时序违例的情况
- 形式验证保证了网表文件与RTL设计具有相同的电路功能
书籍资料:
首先是静态时序分析EDA软件的用户手册:
- 《PrimeTime User Guide 2016》
- 《综合与时序分析的设计约束》
【数字IC前端流程概览及学习资料推荐】Synopsys公司的PrimeTime
六、大家来找茬——形式验证 前面提到过了,形式验证的目的是确保综合出来的网表文件与RTL的设计功能一致。在这里提一下,进入到形式验证的网表须是已经经过静态时序分析之后的网表。经过形式验证过后的网表才是一个真正能交给后端物理设计的网表。经过了这么多层次的设计验证,才能够保证生成一个能够达到目标功能点、满足设计特性的网表文件,可想而知芯片开发的流程是多么复杂又严谨,一枚小小的芯片中蕴藏了多少工程师的智慧与心血啊!
书籍材料:
《Formality User Guide 2016》
EDA软件:
Synopsys公司的Formality
结语: 由于笔者自身能力与经历的限制,本篇文章不可避免的会有一些遗漏或错误,如有还望前辈门不吝赐教!本文推荐的书籍仅仅是笔者学习或了解过的书籍,相信还有更多优秀的书籍未曾列及,因此本文仅仅是个开端,之后会有更多的修改与更新,希望能与大家一起学习进步!
公众号【TechDiary】,专注技术分享
文章图片
推荐阅读
- 最喜6.8.9
- Jsr303做前端数据校验
- 迅捷流程图制作软件的使用方法!
- 7、前端--jQuery简介、基本选择器、基本筛选器、属性选择器、表单选择器、筛选器方法、节点操作、绑定事件
- 前端代码|前端代码 返回顶部 backToTop
- Python专栏|数据分析的常规流程
- 《数字反应出性格》李莉原创分享第96天|《数字反应出性格》李莉原创分享第96天 昆明
- 何以解忧,企业信息化、数字化选型焦虑之五·系统安全隐患大
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export
- 前端自学笔记01