欢迎光临专业集成电路测试网~~欢迎加入IC测试QQ群:111938408

专业IC测试网

当前位置: 网站主页 > 相关技术 > 芯片制造 >

【芯片设计】从RTL到GDS(一):Introduction

时间:2024-07-29 17:32来源: lawliet 芯时代青年 作者:ictest8_edit 点击:

 

从今天开始,我将和大家一起学习Adam Teman老师的Digital VLSI Design这门课程。这门课程大概就是在讲从RTL到GDS经历了哪些步骤,每个步骤大概做了什么。对于刚接触芯片行业的工程师或者学生而言,我认为这是应该了解的。这可以让你和上下游的同事沟通更Easy,并且这一部分内容面试也非常喜欢考。

 

第一节课的大纲如下所示:

 

1、Motivation and Introduction

为什么我们要学这门课?我们先看下面这张图,由这张图可以看到,一颗芯片上的晶体管数量是在持续增加的,这也就是所谓的摩尔定律。尽管摩尔定律在放缓,但芯片的复杂度仍然呈现一个上升趋势。

这就引出了一个问题,既然芯片越来越复杂,设计芯片的人也没有明显的变多,至少没有像芯片规模那样呈现指数增加。那大家是如何完成设计任务的呢?难道是大家越来越聪明了?

 

大家的水平提高,这可能是一方面。但最主要的是随着时间的变化,设计模式、方法学等等也有了明显的改善,否则是无法逾越芯片大小和设计能力如此大的GAP。(早期的电路可以手绘电路图,现在的GPU和CPU动不动上百亿的晶体管,还能手绘?)

 

下面是一个普普通通的中控系统芯片,包含了数字部分,模拟部分,射频部分,还需要有运行在CPU上的软件。这绝不是简简单单就能完成的工作,我们必须改进原始的设计方法。

 

以下是最常见的思路,设计抽象化、设计自动化、IP复用。这到底是什么意思呢?我们接下来详细介绍。

 

我们来看一下这门课的教学大纲,现在的你可能对这些名词没有完全掌握,但是没关系。我们来一起学习这些概念。

 


2、Building a Chip


我们来看一下通常的设计方法学。我们都知道设计一个芯片不是容易的事情。很难一上来就确定好芯片的架构,方案等等。但我们可以采用分而治之的思想,将一个复杂的问题分解为若干个子问题
 
Partition design problem into many sub-problems, which are manageable:

将设计问题划分为许多可管理的子问题:在IC设计中,这可能意味着将整个芯片的设计分解为多个模块或子组件,每个模块或组件都有自己的特定功能和接口。

Define mathematical model for sub problem and find an algorithmic solution:

为子问题定义数学模型并找到算法解决方案:对于每个子问题,设计者需要建立一个数学模型来描述其功能和性能要求,然后开发算法来满足这些要求。

比如要实现一个密码算法芯片,通常我们需要用CMODEL或者Python等编程语言,去实现它,以确定该算法是可行的,同时也能用于后续的验证比对。

此时还需要注意模型的局限性并检查它们,任何数学模型都有其假设和局限性。设计者需要意识到这些局限性,并确保在实际应用中这些局限性不会导致问题。

Implement algorithm in individual design tools , define and implement general interfaces between the tools:

在单独的设计工具中实现算法,定义并实现工具之间的通用接口:设计者通常使用EDA(电子设计自动化)工具来实现算法。这些工具需要能够相互通信,所以需要定义标准的接口。

Implement checking tools for boundary conditions:

实施用于检查边界条件的工具:边界条件是设计中最容易出现问题的地方。因此,需要专门的工具来检查这些条件,确保设计的稳定性和可靠性。

Concatenate design tools to general design flows which can be managed:

将设计工具串联到可以管理的一般设计流程中:将各个设计工具和步骤组合成一个连贯的设计流程,这个流程需要能够被项目管理和管理。对于公司开发而言,这一部分通常是确定好的,规范的流程大大降低了出错的可能性。

See what doesn't work and start over:

查看哪些不工作并重新开始:在IC设计中,可能会遇到各种问题。当某些部分不起作用时,需要回过头来,找出问题所在,并重新设计那一部分。

 

我们来看一下设计抽象,左边是从IC设计角度的抽象层次。右边是计算机体系结构角度的抽象层次。这两个抽象层次大家都应该掌握,并且很清楚的认识到每一层是在描述什么概念,和上层下层又有什么样的联系。这样每一层才不会像空中楼阁一样,而是一个确定的概念。

 

我们首先看系统层面的抽象:系统级抽象:这是一种设计方法,它使用高层次的语言和模型来描述系统的行为和结构。这种抽象通常忽略底层硬件的细节,专注于系统的整体功能和性能。

下图描述了一个计算数据包路由的最佳路径算法。该算法没有包含任何的时序信息,其高效地获得一个紧凑的执行模型作为初步设计草案:系统级抽象允许设计者快速创建一个简化的模型,这个模型可以运行基本的执行流程,用于验证系统概念和基本功能。这个模型通常比较紧凑,因为它不需要包含所有的实现细节。

但是由于与实现没有联系,因此在整个项目中难以维护:随着项目的发展,设计需要变得更加详细和具体,以适应实际的硬件实现。如果系统级抽象没有很好地映射到底层的硬件实现,那么在设计的后续阶段,维护和更新这个抽象模型可能会变得困难。这是因为系统级模型可能无法准确地反映底层硬件的复杂性和限制。

简而言之,系统级抽象在设计的早期阶段非常有用,因为它可以快速提供系统的概览,并帮助设计者做出高层次的设计决策。然而,随着设计的深入,如果这个抽象模型不能很好地映射到底层的硬件实现,那么它可能会变得难以维护,并且可能需要被更加详细和具体的模型所取代。

 

我们再来看一下芯片设计工程师最熟悉的RTL层次。其和高级语言最大的区别在于,RTL是真正从硬件角度去描述电路。而不是软件层次的建模。其包含了时序信息,bit级别精度的数据信息。

 

比RTL抽象层次更低的是门级电路。门级就不用我多说了,学数字电路的时候我们都知道,数字电路本质上都是各种门的组合。从RTL到Gate Level Abstraction的转换通常是通过逻辑综合过程完成的,这个过程将RTL代码转换为门级网表,这个网表包含了所有的逻辑门和连接这些门的导线。这个转换过程需要考虑许多设计约束,如时钟频率、功耗和面积等,以确保最终的硬件设计既满足功能要求,又满足性能和物理实现的要求。

对于数字芯片设计工程师而言,基本掌握到门级电路就足够了,再往下的东西涉及到版图工程师,工艺工程师等芯片设计中下游的人员。对于芯片设计人员而言,接下来的概念大概掌握即可。

 

我们一口气看完剩下三个Level,看图就行,具体的不展开。有兴趣的可以看芯片制造相关的书。

 


3、Design Automation


 

我们看一下早期的芯片如何设计。大家看下面的图就可以知道,早期芯片设计效率并不高。并且规模不可能太复杂,太复杂的芯片怎么手绘?

 

为此,设计自动化即EDA工具,在过去的几十年蓬勃发展,逐步成为我们现在看到的这个样子。我们来看一些容易混淆的概念。

Validation和Verification是两回事。Validation通常在Verification之后进行,涉及到将设计放到实际的环境中,通过与实际硬件或系统的交互来确认设计是否满足用户的需求。比如ATPG和BIST都属于Validation。

自动测试模式生成(ATPG):

ATPG是一种用于生产测试的技术,它自动生成测试模式,用于检测芯片制造后的物理缺陷。这些测试模式是为了检测制造过程中可能引入的故障,如短路、开路等。ATPG工具分析设计的逻辑结构,并生成一系列的测试向量,这些向量能够最大限度地覆盖可能的故障。

内置自测试(BIST):

BIST是一种内置在芯片中的测试机制,它允许芯片在生产后或在现场操作中自我测试。

BIST电路通常包括测试模式生成器、测试响应分析器和控制逻辑。BIST的目的是在芯片的生命周期内提供一种手段来检测和诊断故障。

而Verification又包含功能验证,形式验证,物理验证等等。这里简单讲一下形式验证,之前我也不知道形式验证是干什么,直到工作以后接触了Formality才明白。

形式验证是一种基于数学和逻辑的验证方法,它不依赖于模拟。形式验证使用形式语言和数学证明技术来验证设计是否满足特定的属性或性质。这种方法通过比较设计的不同表示(例如,合成前的RTL代码和合成后的网表)或者通过形式化属性来检查设计的一致性。形式验证可以确保设计在所有可能的状态下都符合规格,而不是仅仅在模拟的特定测试案例中。其本质在于数学证明。



我们看一下本门课需要用到的EDA工具。这门课由于是Cadence赞助的,所以都采用了Cadence的EDA工具。但目前数字芯片设计,Synopsys的EDA工具使用量还是要多一点。尤其是逻辑综合基本都使用DC,很少用Genus。不过工具是其次,关键是理解工具本质上在干什么,这一点对于不同的工具而言都是一样的。



4、Chip Design Flow


我们看一下数字芯片设计流程。(这一块校招基本必问,不管是出于学习角度还是求职角度,都需要好好掌握)

首先是定义和规划阶段。不
可能上来就确定好芯片做多大,做多少。做什么芯片,实现什么功能,基本上是由市场决定的,做一款芯片需要很多钱,对于企业而言,如果不能达到足够的预期,是不会去做的。

确定好要做芯片以后,需要制定MRD,Marketing Requirements Document (MRD) 是一个关键的文档,它定义了新芯片产品所需满足的市场需求。MRD 是设计团队、市场营销团队和潜在客户之间沟通的桥梁,确保产品设计能够满足目标市场的需求。

MRD 是芯片设计项目的起点,它为后续的设计和开发工作提供了指导。一旦 MRD 被批准,它将作为产品定义的关键文档,指导工程师团队进行系统架构设计、硬件设计、软件开发和其他相关活动。MRD 的内容可能会随着项目的进展和市场情况的变化而更新,但它始终是确保产品设计和开发与市场需求保持一致的重要参考。

接下来就可以确定芯片的架构,这一部分由架构师确定。比如带宽,功耗范围,面积范围,软硬件划分等等。然后就是制定宏观的设计文档,确定Floorplan需求,用什么工艺,找什么Foundry,接下来就开始项目启动。

FloorPlan这里稍微详细讲一下,通常将芯片整体规划,内部数字、模拟电路的位置、面积、形状等特征的规划称为版图布局规划(FloorPlan)。连接关系最初并不一定能确定,在研发过程中经常会调整FloorPlan规划。

FloorPlan的周围是芯片引脚(PAD),对于特定的芯片封装,引脚的数量和排布是确定的。Pad实际上指的是芯片引脚的一块金属,通过它可以将芯片焊接在电路板上,而I/O是包括Pad和内部逻辑在内的整个引脚设计。

更多的方案确定细节我也不太清楚,等我当上架构师再细说。



架构确定好以后,便可以开始分工干活了。我们只谈数字IC这一部分,前期的工作基本就是写文档,文档确定以后写RTL,验证,验证出BUG再改RTL,一直迭代。中间还要持续改LINT等。这个过程会持续很久,也是芯片设计工程师最主要的工作。

对于功能验证而言,有几个层次,单元验证,即小模块验证,然后是子系统验证,最后是SoC层面的验证。单元验证基本是芯片设计工程师自己验,我也建议大家自己验。这一部分不用上UVM框架,把TB写的完备一点就行。往上的验证一般是验证工程师去验。



开发一款芯片,不可能全部模块都自己写,不然设计周期就太长太长了,等芯片做好以后,市场的需求已经发生了很大的变化。很多时候都是用现有的IP。我们可以把这些IP简单划分为硬核和软核IP。

硬核IP是以预先存在的布局形式(Layout)提供的,通常包含以下内容:

时序模型:用于模拟和验证IP的时序特性;

布局抽象:对物理布局的高层次描述,用于综合和布局;

行为模型:用Verilog或VHDL等硬件描述语言编写的逻辑功能描述;

有时还包含Spice模型和完整的布局:用于模拟和验证IP的电气特性;

硬核IP是定制数字模块的标准交付格式,例如RAM、ROM、PLL、处理器等,其通常是针对特定的工艺节点优化的,因此可能需要较少的调整即可集成到新的设计中。

软核IP通常以RTL代码的形式提供,这些代码可以用硬件描述语言编写,如Verilog或VHDL。很多时候为了保护IP的知识产权,供应商可能会对RTL代码进行加密。



我们再来看一下验证阶段。验证阶段有仿真验证,形式验证,FPGA原型验证,硬件仿真器等。硬件仿真大家可能接触的少,我也没怎么接触过。



接下来我们看一下逻辑综合,逻辑综合在后续的章节会详细介绍,这里简单理解为从RTL到门级网表即可。



然后是物理设计,也就是通常所说的IC后端,这一部分有很多工作要做,可以看下面的一些名词,后面的章节也会详细介绍IC后端。这里简单将后端理解为布局布线即可。



在完成上述流程以后,还需要验证和验收(Signoff)。其负责对设计质量进行把控和最终验收。当后端完成版图以后,需要经过时序和功耗检查,合格才能交给Foundry,这种检查叫做SignOff检查,如果检查无法通过,数字后端工程师需要努力修改,重新绘制版图或者微调元器件位置,如果无法达标,需要修改综合策略,重新综合绘制版图,还不可以的话需要前端人员修改RTL。在SignOff合格以后,需要将最终网表和延迟信息提供给验证人员,进行后仿真(Post-layout Gate-level Simulation)。



我们看一下下面的名词,经过这节课的学习,大家应该对这些名词大概有个了解,如果没有的话可以自行搜索一些相关资料。


 
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
用户名: 验证码: 点击我更换图片