甄建勇:五分钟搞定计算机体系结构(下)

Posted 宋宝华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了甄建勇:五分钟搞定计算机体系结构(下)相关的知识,希望对你有一定的参考价值。

作者简介

甄建勇,高级架构师(某国际大厂),十年以上半导体从业经验。主要研究领域:CPU/GPU/NPU架构与微架构设计。感兴趣领域:经济学、心理学、哲学。 

设计流程

IC设计处在整个半导体产业链的顶端,而设计出性能高,功耗小,成本低的CPU更是一项具有挑战性工作,困难除了设计难度大之外,设计周期长,设计环节多是另一方面。本小节,我们将介绍体系结构设计的一般步骤和阶段。

图 2   体系结构设计流程

首先要确定应用领域,找出对应的benchmark,根据对benchmark的分析,设计相应的体系结构,并编写这个结构的模拟器。根据模拟器的模拟结果,反复优化和改进体系结构。

一旦体系结构暂时确定下来之后,就可以开始FPGA验证阶段了,这一阶段也需要反复优化和改进体系结构。

在FPGA验证完成后,就可以开始ASIC的工作了,这样就会得到这个体系结构的实际芯片,再经过对芯片的测试和验证,来进一步完善体系结构。

计算机体系结构设计工作是一个长期复杂的过程,涉及到很多领域,上面只是大体的设计过程,为了更深的理解这个过程,本小节就对上述几个过程单独阐述一下。

profile

CPU的作用就是执行程序指令,所以CPU设计成什么样子,不是拍脑袋想出来的,而是有其特定的条件的,其所执行的程序是决定CPU结构的主要原因,所以在设计CPU之前,必须首先要对程序进行仔细分析。

在进行程序分析时,需要一些程序分析器。程序分析器有静态分析器和动态分析器之分。咱们常用的编辑软件,如SourceInsight,notepad++,UE等都或多或少有程序分析的功能,他能知道哪些是函数接口,哪些是全局变量,哪些是局部变量等等。pclint就是咱们常用的稍微专业点的静态代码检查工具了,再专业点的比如Testbed等。相对于静态代码检查工具,动态代码分析工具就更专业一点了,可以分析二进制代码的详细的属性,比如instruction mix,call graph,memory leak等等。pin最常用,由intel公司维护,提供丰富API,不提供source。而valgrind是开源的,我们可以看到其全部源代码。此外LLVM也具有强大的程序分析功能。

Pin是一个Intel公司maintain针对IA-32和X86-64体系结构的动态二进制指令分析的framework。可以对基于LINUX和Windows平台的user space的程序进行分析。既然是Dynamic的程序分析tool,所以我们就可以利用其来分析程序实际运行时的一些参数。与valgrind不同,pin不是开源的,但他提供了非常rich的API,我们可以用这些API,开发设计出我们想要的程序分析工具。就好像用OS的API可能编出很多不同功能的软件一样。

关于Pin ,valgrind,以及LLVM,请参考参考文献中相关内容。

simulator

“三岁看大,七岁看老”说的是早期教育的重要性,体系结构的设计也是这样,要想设计出一个优秀的体系结构,必须首先要设计其对应的模拟器(simulator),可以这么说,一旦模拟器最终设计,改进,完成之后,也就成功一半了。

模拟器是体系结构设计和研究的重要工具,无论是在学术界还是在工业界,模拟器的使用都非常广泛。尤其是软件全系统模拟器,由于其开发速度快,成本较低,并且易于修改,在计算机系统设计,验证,系统软件开发,调优等方面,起着重要的作用。

在计算机系统的设计初期,模拟器可以用来对各种设计方案进行粗粒度模拟,通过比较多种模拟结果,最终选择最优方案;在设计中期,模拟器可以用来对各种微结构的设计进行评估,对多个选择进行折中;在设计后期,模拟器可以用来进行目标系统软件的开发,这样,软件和硬件就可以同步进行,加快系统开发进度。此外,模拟器可以获得丰富的trace信息,根据这些trace信息,就可以得到系统的性能瓶颈,便于进一步优化。

模拟器有三个衡量指标:速度,精度和灵活性。速度,是指模拟器执行模拟任务的快慢,一般用相同的应用程序在模拟器执行时间和在宿主机上执行时间的比(减速比,slowdown)来表示。精度,是指由模拟器模拟出来的系统和真实系统的相似程度,一般用模拟器模拟得到的CPI(sycleper instruction)和实际的CPI偏离的百分比表示。灵活性,是指模拟器通过配置来模拟不同体系结构的方便程度。

一个理想的模拟器,要求执行速度快,模拟精度高,还要可以灵活的配置出可以模拟的体系结构。“鱼与熊掌,不可得兼”,实际中这三者是相互制约的,只能根据不同的情况有所取舍。一般来说,设计初期要求灵活性好,精度可以适当低一些。而在设计后期和末期,则要求模拟精度高,灵活性可适当降低。然而,无论是设计初期,还是设计中期和后期,模拟器的速度要求则一刻也不能放松。

由于模拟器的重要性,学术界和工业界都开发了大量的模拟器,学术界常用的模拟器有SimpleScalar,SimOS,MG5,Liberty等,工业界主要有IBM的Mambo,AMD的SimNow等。

对于想学习研究体系结构设计但没有硬件基础的读者来说,通过阅读模拟器的实现代码,也可以获得丰富的体系结构设计知识。

FPGA设计

在学习使用FPGA之前,一定弄明白一件事情,就是,FPGA到底是什么?弄明白了这个问题,下一节开始说verilog语言的问题。

众所周知,FPGA不同于ASIC的最要的特性就是,FPGA是可重配置的。可重配置,就是这个芯片的功能是可重新定义的。配置什么呢,配置逻辑,什么是逻辑?逻辑由最小逻辑单元和连线两部分内容组成。如果配置内容的逻辑部分(真值表)是通过RAM存放的,那么这个FPGA就是基于RAM的。如果配置内容的逻辑部分(真值表)是通过FLASH存放的,那么这个FPGA就是基于FLASH的。如果配置内容的逻辑部分(真值表)是那都没存,直接修改硬连线,那么这个FPGA就是基于熔丝/反熔丝的。这种只能配置一次,严格意义上说不算FPGA。由于存在FLASH或RAM的内容在高辐射等影响下,容易发生变化,所以我猜,神九上面的FPGA是基于熔丝/反熔丝的。

FPGA是有很多最基本的单元组成的,那么这些最小单元又是什么呢?altera公司叫LE。xilux有另外一个名字。其实都一样。下面就亲眼看一下LE到底是什么,怎么看呢?打开quartusII,找到chipplaner,你会看到好多小格子,逐级放大,然后双击一个小格子,你会看到几个门,和很多线,有的线是灰的,有的线是蓝的。有的门是灰的,有的门是蓝的。配置文件就是描述哪些门是灰的,哪些是蓝的,哪些线是灰的,哪些线是蓝的。再双击一个小格子,你会发现和刚才那个小格子一样,好了,有很多很多。芯片型号EP2C8Q。。。其中‘C’后面的‘8’就是8K,就是LE的数量。FPGA芯片有的是4线的,5线的,什么意思呢,其实FPGA的最小单元就是一个多路选择器。4线就是4选16路选择器。16路的内容存在的memery(可以是RAM或FLASH)里,内容就是真值表的输出。通过修改真值表,就可以实现不同的逻辑。通过修改很多很多个LE的真值表,就可以修改整个FPGA芯片的逻辑,即,重配置。

FPGA的应用领域很多,其中作为ASIC设计中的验证系统是其中之一。如果把werilog语言描述的电路映射成FPGA的单元(LE),那么就是FGPA。如果把werilog语言描述的电路映射成制造IC的公司的元件,布线,像制造PCB那样,(只不过电阻和电容都很小)那么就是ASIC。在流片之前要用FPGA验证。

自己写完verilog代码,到底会生成什么样的电路呢?打开qartusII,找到RTL vewer,然后你就可以看到你的代码生成什么样的电路了。就像你画完原理图得到的结果。就像是一个尺寸很小的PCB一样。可以这样认为,一个小芯片,就是一个浓缩版的PCB板子。

 那么,verilog代码是如何生成ASIC的?用notepad++等编辑器写代码,用modulesim等仿真工具进行RTL仿真:前仿真,用QartusII等软件进行编译,生成中间表示形式,然后进行逻辑优化,综合,生成门级表示形式,和自带的元件库(也是用verilog写的,只不过是开关级的),用modulesim等仿真工具进行门级,开关级仿真:后仿真,将QartusII综合后的配置文件(sof,pof)烧到板子上,验证,ASIC back endflow ,sign off。让ASIC厂子造几片,验证,批量造。

其实FPGA不是从天上掉下来的,有他一步步的发展过程。和传统PCB制造,软件编译等领域有很多联系啊,对比一下,会比较容易理解。

一般情况下,如果FPGA的资源限制了我们设计的电路的大小。比如,如果你选则的某个FPGA芯片只有22K个LE,那么我们用HDL语言编写的电路模块,在综合之后的资源使用总量就不能超过22K。但是,有一些FPGA芯片实现了动态配置,如果是这样的话,我们的电路在综合之后就可以超过22K。FPGA动态配置机制的本质,也是局部性原理。

FPGA设计人体分为设计输入、综合、功能仿真(前仿真)、实现、时序仿真(后仿真)、配置下载等六个步骤,设计流程如图1-28所示。下面分别介绍各个设计步骤。

图3   FPGA设计流程

1 设计输入

设计输入包括使用硬件描述语言HDL、状态图与原理图输入三种方式。HDL设计方式是现今设计大规模数字集成电路的良好形式,除IEEE标准中VHDL与Verilog HDL两种形式外,尚有各自FPGA厂家推出的专用语言,如Quartus下的AHDL。HDL语言描述在状态机、控制逻辑、总线功能方面较强,使其描述的电路能特定综合器(如Synopsys公司的FPGA CompilerII或FPGA Express)作用下以具体硬件单元较好地实现;而原理图输入在顶层设计、数据通路逻辑、手工最优化电路等方面具有图形化强、单元节俭、功能明确等特点,另外,在Altera公司Quartus软件环境下,可以使用Momory Editor对内部memory进行直接编辑置入数据。常用方式是以HDL语言为主,原理图为辅,进行混合设计以发挥二者各自特色。

通常,FPGA厂商软件与第三方软件设有接口,可以把第三方设计文件导入进行处理。如Quartus与Foundation都可以把EDIF网表作为输入网表而直接进行布局布线,布局布线后,可再将生成的相应文件交给第三方进行后续处理。

2 设计综合

综合,就是针对给定的电路实现功能和实现此电路的约束条件,如速度、功耗、成本及电路类型等,通过计算机进行优化处理,获得一个能满足上述要求的电路设计方案。也就是是说,被综合的文件是HDL文件(或相应文件等),综合的依据是逻辑设计的描述和各种约束条件,综合的结果则是一个硬件电路的实现方案,该方案必须同时满足预期的功能和约束条件。对于综合来说,满足要求的方案可能有多个,综合器将产生一个最优的或接近最优的结果。因此,综合的过程也就是设计目标的优化过程,最后获得的结构与综合器的工作性能有关。

FPGA Compiler II是一个完善的FPGA逻辑分析、综合和优化工具,它从HDL形式未优化的网表中产生优化的网表文件,包括分析、综合和优化三个步骤。其中,分析是采用Synopsys标准的HDL语法规则对HDL源文件进行分析并纠正语法错误;综合是以选定的FPGA结构和器件为目标,对HDL和FPGA网表文件进行逻辑综合;而优化则是根据用户的设计约束对速度和面积进行逻辑优化,产生一个优化的FPGA网表文件,以供FPGA布局和布线工具使用,即将电路优化于特定厂家器件库,独立于硅持性,但可以被约束条件所驱动。

利用FPGA Compiler II进行设计综合时,应在当前Project下导入设计源文件,自动进行语法分析,在语法无误并确定综合方式、目标器件、综合强度、多层保持选择、优化目标等设置后,即可进行综合与优化。在此可以将两步独立进行,在两步之间进行约束指定,如时钟的确定、通路与端口的延时、模块的算子共享、寄存器的扇出等。如果设计模型较大,可以采用层次化方式进行综合,先综合下级模块,后综合上级模块。在进行上级模块综合埋设置下级模块为Don't Touch,使设计与综合过程合理化。综合后形成的网表可以以EDIF格式输出,也可以以VHDL或Verilog HDL格式输出,将其导入FPGA设计厂商提供的可支持第三方设计输入的专用软件中,就可进行后续的FPGA芯片的实现。综合完成后可以输出报告文件,列出综合状态与综合结果,如资源使用情况、综合后层次信息等。

3 仿真验证

从广义上讲,设计验证包括功能与时序仿真和电路验证。仿真是指使用设计软件包对已实现的设计进行完整测试,模拟实际物理环境下的工作情况。前仿真是指仅对逻辑功能进行测试模拟,以了解其实现的功能否满足原设计的要求,仿真过程没有加入时序信息,不涉及具体器件的硬件特性,如延时特性;而在布局布线后,提取有关的器件延迟、连线延时等时序参数,并在此基础上进行的仿真称为后仿真,它是接近真实器件运行的仿真。

4 设计实现

实现可理解为利用实现工具把逻辑映射到目标器件结构的资源中,决定逻辑的最佳布局,选择逻辑与输入输出功能连接的布线通道进行连线,并产生相应文件(如配置文件与相关报告)。通常可分为如下五个步骤。(1)转换:将多个设计文件进行转换并合并到一个设计库文件中。(2)映射:将网表中逻辑门映射成物理元素,即把逻辑设计分割到构成可编程逻辑阵列内的可配置逻辑块与输入输出块及其它资源中的过程。(3)布局与布线:布局是指从映射取出定义的逻辑和输入输出块,并把它们分配到FPGA内部的物理位置,通常基于某种先进的算法,如最小分割、模拟退火和一般的受力方向张弛等来完成;布线是指利用自动布线软件使用布线资源选择路径试着完成所有的逻辑连接。因最新的设计实现工具是时序驱动的,即在器件的布局布线期间对整个信号通道执行时序分析,因此可以使用约束条件操作布线软件,完成设计规定的性能要求。在布局布线过程中,可同时提取时序信息形成报靠。(4)时序提取:产生一反标文件,供给后续的时序仿真使用。(5)配置:产生FPGA配置时的需要的位流文件。

在实现过程中可以进行选项设置。因其支持增量设计,可以使其重复多次布线,且每次布线利用上一次布线信息以使布线更优或达到设计目标。在实现过程中应设置默认配置的下载形式,以使后续位流下载正常。

5 时序分析

在设计实现过程中,在映射后需要对一个设计的实际功能块的延时和估计的布线延时进行时序分析;而在布局布线后,也要对实际布局布线的功能块延时和实际布线延时进行静态时序分析。从某种程序来讲,静态时序分析可以说是整个FPGA设计中最重要的步骤,它允许设计者详尽地分析所有关键路径并得出一个有次序的报告,而且报告中含有其它调试信息,比如每个网络节点的扇出或容性负载等。静态时序分析器可以用来检查设计的逻辑和时序,以便计算各通中性能,识别可靠的踪迹,检测建立和保持时间的配合,时序分析器不要求用户产生输入激励或测试矢量。虽然Xilinx与Altera在FPGA开发套件上拥有时序分析工具,但在拥有第三方专门时序分析工具的情况下,仅利用FPGA厂家设计工具进行布局布线,而使用第三方的专门时序分析工具进行时序分析,一般FPGA厂商在其设计环境下皆有与第三方时序分析工具的接口。Synopsys公司的PrimeTime是一个很好的时序分析工具,利用它可以达到更好的效果。将综合后的网表文件保存为db格式,可在PrimeTime环境下打开。利用此软件查看关键路径或设计者感兴趣的通路的时序,并对其进行分析,再次对原来的设计进行时序结束,可以提高工作主频或减少关键路径的跹时。与综合过程相似,静态时序分析也是一个重复的过程,它与布局布线步骤紧密相连,这个操作通常要进行多次直到时序约束得到很好的满足。

在综合与时序仿真过程中交互使用PrimeTime进行时序分析,满足设计要求后即可进行FPGA芯片投片前的最终物理验证。

6 下载验证

下载是在功能仿真与时序仿真正确的前提下,将综合后形成的位流下载到具体的FPGA芯片中,也叫芯片配置。FPGA设计有两种配置形式:直接由计算机经过专用下载电缆进行配置;由外围配置芯片进行上电时自动配置。因FPGA具有掉电信息丢失的性质,因此可在验证初期使用电缆直接下载位流,如有必要再将烧录配置芯片中(如Xilinx的XC18V系列,Altera的EPC2系列)。使用电缆下载时有多种直载方式,如对Xilinx公司的FPGA下载可以使用JTAG Programmer、HardwareProgrammer、PROM Programmer三种方式,而对Altera公司的FPGA可以选择JTAG方式或Passive Serial方式。因FPGA大多支持IEEE的JTAG标准,所以使用芯片上的JTAG口是常用下载方式。

将位流文件下载到FPGA器件内部后进行实际器件的物理测试即为电路验证,当得到正确的验证结果后就证明了设计的正确性。电路验证对FPGA投片生产具有较大意义。

其实,FPGA的设计流程中可能会用到很多种FPGA工具,那么,基于多种EDA工具的FPGA设计是怎样的呢?

仿真工具Modelsim与综合工具FPGACompiler II及布线工具Foundation Series或Quartus相配合实现FPGA设计流程图如图2所示。

在设计输入阶段,因Modelsim仅支持VHDL或Verilog HDL,所以在选用多种设计输入工具时,可以使用文本编辑器完成HDL语言的输入,也可以利用相应的工具以图形方式完成输入,但必须能够导出对应的VHDL或Verilog HDL格式。近年来出现的图形化HDL设计工具,可以接收逻辑结构图、状态转换图、数据流图、控制流程图及真值表等输入方式,并通过配置的翻译器将这些图形格式转化为HDL文件,如Mentor Graphics公司的Renoir,Xilinx公司的Foundation Series都带有将状态转换图翻译成HDL文本的设计工具。在这方面,Summit公司(现在已经合并为Innoveda)的图形化界面友好程度较高,且可以导出相应的HDL格式。

从图1-29中可以看到有三处可以由Modelsim进行仿真:第一处是寄存器传输级(RTL)仿真,此级仿真是对设计的语法和基本功能进行验证(不含时序信息);第二处是针对特定的FPGA厂有技术的仿真,此级伪真是在综合后、实现前而进行的功能级仿真,功能级仿真一般验证综合后是否可以得到设计者所需要的正确功能;第三处仿真是门级仿真,此级仿真是针对门级时序进行的仿真,门级仿真体现出由于布局布线而产生的实际延时。

图4  利用多种EDA工具实现FPGA设计的流程

在RTL仿真阶段,应该建立一个测试台。此测试台可以在整个FPGA流程中进行仿真验证(RTL级、功能级、时序门级)。测试台不但提供测试激励与接收响应信息,而且可以测试HDL仿真流程中的关键功能(如运算部件输出值的正确性等)。测试台的产生可以直接使用文本编程得到,也可以使用图形化工具输入,再由软件翻译为HDL格式,例如使用HDL Bencher软件利用其良好的波形输入界面输入测试激励,再由其自动转化为HDL格式而得到。

在功能级仿真阶段,一般验证综合后是否仍与RTL级仿真结果相同。

在门级仿真阶段,由于已经针对具体的FPGA厂家技术进行了功能级仿真,因此可以通过布局布线得到标准延格式下的时序信息进行门级仿真。

Mentor Graphics公司的Modelsim是业界较好的仿真工具,其仿真功能强大,且图形化界面友好,而且具有结构、信号、波形、进程、数据流等窗口。将FPGA设计(以HDL方式)输入后进行编译即可进行前仿真,其最新版本Modelsim SE/Plus 5.5支持VHDL与Verilog HDL混合仿真。在仿真时可以编写HDL激励文件或执行组模式方式。组模式方式类似批处理方式,可以连续执行事先在文件中写好的多个执行命令,这对重新仿真或重复执行多个命令特别有效。在仿真过程中可以执行性能分析与代码覆盖分析。性能分析在程序代码执行过程中可以分析出各部分代码执行时占用整个执行时间的百分率。在此信息下,设计者可以找到设计的瓶颈并通过优化代码减少仿真时间。代码覆盖分析可以使设计者确切知道在测试台上正在进行的代码位置,以方便设计者调试。

由Modelsim进行仿真,需要导出VHDL或Verilog HDL网表。此网表是由针对特定FPGA器件的基本单元组成的。这些基本单元在FPGA厂家提供的厂家库中含有其定义和特性,且厂家一般提供其功能的VHDL或Verilog VDL库。因此,在Modelsim下进行仿真,需要设置厂家库信息。如使用Altera公司的Apex20ke系列,需要将Apex20ke_atoms.v(或.vhd)与Apex20ke_component.v文件设置或编译到工程项目的对应库中。除网表外,还需要布局布线输出的标准延时文件(sdf),将sdf文件加入仿真可以在窗口化界面设置加入,或通过激励指定。如使用Verilog HDL时加入反标语句$sdf_annotate(“”,Top)通过参数路径指定即可。

在综合阶段,应利用设计指定的约束文件将RTL级设计功能实现并优化到具有相等功能且具有单元延时(但不含时序信息)的基本器件中,如触发器、逻辑门等,得到的结果是功能独立于FPGA的网表。它不含时序信息,可作为后续的布局布线使用。使用FPGA Compiler II进行综合后可以导出EDIF网络。

在实际阶段,主要是利用综合后生成的EDIF网表并基于FPGA内的基本器件进行布局布线。可以利用布线工具Foundation Series选用具体器件(如Virtex系列器件)进行布局布线加以实现,也可以使用布线工具Quartus选用Apex20ke系列器件进行布局布线加以实现,同时输出相应的VHDL或Verilog HDL格式,以便在Modelsim下进行仿真。

在数字系统设计的今天,利用多种EDA工具进行处理,同时使用FPGA快速设计专用系统或作为检验手段已经成为数字系统设计中不可或缺的一种方式,了解并熟悉其设计流程应成为现今电子工程师的一种必备知识。


ASIC

前面我们介绍了程序分析,模拟器设计,FPGA设计这几个阶段的大体流程,对于很多工程,一般完成FPGA验证之后就结束了,但是由于FPGA在成本,功耗,频率方面的限制,对于另外一些工程,我们完成FPGA验证之后,还要走ASIC流程,进行流片(tapeout)验证。ASIC流程是怎样的呢?

本小节着重介绍国内设计公司薄弱的后端设计,介绍其流程并对在设计过程中的关键步骤进行一些讨论。传统的后端设计流程指的是从门级网表(gate level netlist)开始的,根据设计要求的不同,后端流程可以分为扁平流程(flat flow)和层次化流程(hierarchyflow)两种,在深亚微米DSM(deepsub-micron)领域,又增加了布局加逻辑合成的前后端合二为一的扁平流程(flat flow)和分层流程(hierarchyflow)。

1扁平流程(Flat flow) 

集成电路的各种后端设计流程中,扁平式物理设计师最基本的一种方法,在实际应用中,标准库的建立是最常见的例子之一。扁平式流程,采用了自下而上的方法,先设计好晶体管,然后进行仿真,再建立版图,最后再对逻辑门单元进行仿真建模。而对于稍大一些的模块,一般写经过设计和仿真,然后再调用基本单元来实现版图的设计,最后再对整个模块进行仿真建模。

随着技术的进步,上面的很多工作一般都有相应的工具帮助我们完成。现在,在实际工作中,后端流程的开始一般是从前端提供了门级网表,时序约束,和时序分析报告开始的。

我们一旦拿到这三样东西之后,就意味着后端工作正式开始了。对于扁平式流程,整个后端一般分为三个阶段:前期检查,布局布线,和静态时序分析。

其中前期检查,是指,我们把网表文件送到EDA工具内部开始布局布线之前,需要对前端送过来的内容进行详细的检查,那么都需要检查什么呢?不同的厂家和软件对此都会有一些限制,一般为了方便后续工作,可以定义一套比较严格的网表书写规则。比如文法错误,连接短路,无任何连接的net,无驱动的输入引脚(pin),assign语句, wire类型以外的net,使用了由"\\"开始的特别字符,数据总线的写法,名字的长度等。

如果前期检查发现问题,要跟前端反复沟通,直到双方达成一致。然后就可以开始布局布线了。这个阶段的顺序一般是先进行I/O单元的布置,然后再布置megacell,然后生成行通道,最后是电源和时钟树的布置。

经过前面两个阶段的工作,我们已经有了一个完整的布局结果,如果没有拥塞问题的话,我们就可以开始第三个阶段的工作了,即按预估线长提取延迟数据作静态时序分析和再优化了。由于这时布线已经完成,提取出来的延迟数据应该是十分真实的了,在此基础上作的再优化应该能够有效地去除任何setup和hold冲突 (violation)。

一切工作完成之后,就可以sign off了。以上是对传统的后端flat流程的简单介绍,在实际工作中,还可能会有很多附加的工作。

2层次化流程(Hierarchy flow)

扁平式流程适用于较小规模的芯片设计,但如果芯片的规模很大,软件的承受能力和运行时间都会受限,我们就必须使用层次化流程。与扁平(flat)流程相比,层次化流程有不少附加的工作要做,这些附加的工作一般包括,顶层布局规划(Top floorplan),创建和布置宏单元,. 全局引脚优化,时序分配预算,顶层布局等。

其实,现在的半导体行业拼的不只是芯片本身,也不单纯是由CPU架构的领先程度来决定的,这涉及到操作系统,应用程序,编译器等方方面面。一款CPU的成功与否,甚至和很多非技术因素有关,这里不再赘述。总之,ASIC需要一个完整,成熟,健康的生态系统。

自此,我们了解了ASIC的整体过程。其实,对于芯片设计的前端和后端的划分,不同的公司可能有不同的定义,上面之所以引用这些内容,是为了说明和展示一般ASIC的大体设计流程。

精彩回顾

甄建勇:芯片架构方法学

甄建勇:五分钟搞定MMU

甄建勇:五分钟搞定Cache(上)

甄建勇:五分钟搞定Cache(下)

甄建勇:五分钟搞定计算机的前世今生

甄建勇:五分钟搞定计算机体系结构(上)

扫码加入社群

以上是关于甄建勇:五分钟搞定计算机体系结构(下)的主要内容,如果未能解决你的问题,请参考以下文章

甄建勇:五分钟搞定Cache(上)

甄建勇:五分钟搞定计算机的前世今生

甄建勇:五分钟搞定Cache(下)

甄建勇:五分钟搞定MMU

五分钟搞不定系列- 1+1=?

五分钟搞定Bash功能与使用技巧