总结数字电路设计的一般方法?
我来自西北工业大学计算机学院微电子学研究所,现在是微电子学研究所的研一学生,专业方向是数字集成电路设计。在研一上学期,初步掌握了数字集成电路后端综合设计方法,本篇学术素养课程报告主要讨论在实现后端流程时的方法、经验、以及相关的感悟。
一般而言,软件工程师的需求量和硬件工程师的需求量是10:1,也就是说硬件工程师需求量远小于软件工程师,硬件工程师中又分为模拟和数字两大类,模拟集成电路设计主要包括ADC、DAC、PLL等,数字集成电路设计则更偏向于实现特定功能的芯片,如CPU、GPU、MCU、MPU、DSP等。
事实上,发展到现阶段,数字集成电路的设计方法已经在EDA工具的帮助之下十分类似于软件开发了,典型的数字集成电路开发一般为以下步骤:
1、根据需求,自顶向下设计电路模块,明确该数字系统需要实现什么功能,再具体细分到各个功能模块。此时的设计图形式一般为模块框图,使用visio或其他绘图软件实现。这个环节较为松散,但十分重要,因为根据需求设计大的模块和指标时,必须要结合实际情况,否则到后期会经历无限次返工甚至无法达到预定指标。一般由德高望重,经验丰富的工程师进行总体设计。
2、定义好各个模块之后,接下来就是具体实现各个模块的功能。因为硬件描述语言的存在,我们可以很轻易的通过硬件描述语言来“写”出模块的实现方法,在本次实验中,我使用的是Verilog HDL。具体代码的复杂程度和模块的复杂程度有关,我在这次实验中采用的是“八位格雷码计数器”电路设计。
3、完成“八位格雷码计数器”的Verilog代码后,需要对该设计进行“前仿真”。所谓前仿真,主要是为了验证代码是否描述正确,是否真正实现了所规划的功能。一般使用modelsim软件进行仿真,仿真成功进入下一阶段,不成功则需要返回修改代码。
4、前仿真成功后,已经有了功能正确的Verilog设计代码,此时可以将代码下载到FPGA板上进行验证(Quartus,JTAG),验证成功则证明此设计正确无误。对于某些集成度要求不高且时间非常紧张的数字电路设计项目,可以直接使用FPGA来实现芯片功能。显然,FPGA这种通用器件是不能满足高集成、低功耗、专用性高ASIC设计需求的,只能用于较为简单和粗犷的设计。
5、接下来进入后端流程。这时需要专用的服务器以及价格高昂的EDA工具支持。这也是为什么硬件设计入门较难的原因之一,如果一个没有接触过软件编程的有志青年立志做软件工程,一般一台电脑,一本书就够了,最多再买个正版编译器(VS,Eclipse,DW等),但是要做硬件电路设计,一台电脑一本书最多画画PCB。要做最核心的部分,必须使用功能强大的服务器和价格昂贵的EDA工具,因为普通的PC电脑负担不起“后端综合”的工作需求。而且大量linux下的复杂操作也会使人望而却步。
6、准备好后端平台后,就可以将“八位格雷码计数器”放到平台里,这时马上需要考虑的问题是使用什么元件库以及什么工艺?因为同样一个与非门,不同元件库有不同实现细节,MOS管细节可能都大相径庭,另外还要考虑工艺,这些工艺的文件来自于相关厂家(TSMC,CSMS等),这也是个人无法做后端的原因之一——因为你几乎不可能以自己的名义向台积电商量工艺库文件,毕竟作为一个涉世未深,无钱无术的初学者,你是无法充满自信的和人数上万、资金上亿的工艺厂签合同的。经过精心筛选后(更多情况下是没得选),确定你想使用的工艺。在本次实验中,我使用的是实验室学长改良过的元件库,以及TSMC 0.18um工艺,EDA工具为Cadence IC 614。
7、经过一系列配置之后,“八位格雷码计数器”已经成为了一个庞大的工程文件,我建议采用TCL脚本文件进行配置。然后就可以进行RTL级综合。所谓RTL级综合,实际上是指将Verilog代码“改写”为综合工具(我使用的是Encounter)所能识别的Verilog代码。通俗的讲,这个类似于将“文言文”翻译为“白话文”,也类似于C语言中的“编译”,即将高级语言翻译为汇编代码。当然,理论上可以直接写出RTL级代码,但这就和直接写汇编语言一样,复杂程度不言而喻。
8、RTL级综合完成后,接下来将RTL Verilog导入Encounter进行真正的后端综合。导入RTL代码后,还需要说明标准单元库的LEF文件,并定义电源和地的线名。此时需要一个MMMC config配置,流程繁杂,主要是配置相关文件和器件状态(TT、SS、FF等)。
9、完成导入配置,接下来是芯片布局设计,即Floorplan。Floorplan需要设置一些基础参数,如芯片的长宽(面积),留给管脚的空间,芯片利用率等。长宽比建议为0.2-5,复杂电路利用率0.85,一般电路利用率0.90,简单电路利用率0.95。
10、POWER计算,以此为根据布置电源线路,主要为ring和stripe。例如,某数字电路芯片功耗为55mW,增加冗余量到2倍左右,设计为100mW,按照1.8V供电,电流约为60mA,也就是总电源线为60u,如果每条线10u,则六条电源线,两侧各一条,中间四条。Encounter中有专门的布线配置器。布线之后,可以先Apply,然后撤销反复尝试。
11、布置IO管脚。如果提前没有导入IO,可以重新导入(TCL),也可以自行调整。
12、Pre-Place,因为Verilog中往往有很多的module,每个module对应一个布局模块,布局时应当注意一些布局原则。布局时一般通过简单的拖动就可以。“八位格雷码计数器”因为只有一个module,因此不需要复杂的布局。
13、布局是一个不断修改和改进的过程,Pre-Place之后进行Place,之后进行之后Post-Place。Place之后,需要进行时钟树综合(CTS),时钟树综合的目的是为了让每个信号都在约束的时间内传输到下一个时序单元,否则会对芯片的主频产生影响(主频是在设计前就定下来的指标),然后在Post-CTS对不符合时钟约束的部分进行布线调整。
14、布局之后进行布线,即Route,对于特殊还布线需要进行SRoute,然后进行Post-Place,这些步骤某种程度上都是“点按钮”和“配参数”,但后端综合时一定要有清醒的头脑,必须知道为什么要点这些按钮,以及该配置什么参数。
15、布局布线经过多次迭代,IO管脚配置好后,可以Fill全图,用各层金属覆盖未使用的区域。单个“八位格雷码计数器”因为结构简单,芯片未覆盖区域较大。
16、至此,Encounter内的后端综合就完成了,可以导出(export)成GDSII格式的网表,以及为了做DRC,LVS检查,也需要“Netlist”成schematic(电路原理图)的格式。
17,将后端综合的GDSII文件导入(Stream in)到Virtuoso里。Virtuoso是一个用于模拟集成电路设计的软件。将GDSII文件导入该软件主要有两个目的,一是可以在Virtuoso里做“后仿真”,验证经过后端综合的一系列流程之后,概念芯片是否能满足设计需求,此时的仿真就已经考虑到了延时,电阻,功耗等实际存在的问题,如果仿真时出现了问题,需要进行返工修改,必要时要重新布局布线。当“后仿真”通过后,还要对该芯片进行DRC和LVS检查,DRC是查看是否满足所选工艺的要求,因为在实际情况下,一些理论上的值是不现实的,比如过细的线无法生产,栅极间的距离过短可能会导致短路,导线和各金属层之间的电容会影响电路功能等。LVS是比较layout和Schematic之间的拓扑关系是否不一致。二是可以方便以后做数模混合芯片设计时进行混合设计,因为模拟集成电路的是直接在Virtuoso中进行的,两者最后结合在一起,就可以进行数模混合集成电路设计。
18、进行完检查之后,就可以与工艺提供厂家联系进行加工了,如TSMC。一般加工需要跟上企业的业务流程。大约经过1月左右,芯片加工完成,然后进入测试环节。焊接,试验,验证芯片指标,以及提出改进方案。
至此,一个数字集成电路从概念到实物的整个流程就完成了,每一步都值得研究和回味,从二四译码器到复杂的CPU,其流程是基本一样的。经过研一上一个学期的学习,我也基本掌握了这个流程。以后会更加努力的在本专业方向继续前进,培养核心竞争力。
延伸阅读
数字电路设计中,不同逻辑电平接口设计需要考虑哪些因素?
首先应该考虑不同逻辑电平之间是否需要隔离,是否共地。
其次在设计时要详细参阅各个逻辑芯片的资料,以确定相连接的芯片间逻辑电平输出与输入的电压值是否可以兼容,最好不要恰好在临界值,会导致系统不稳定。各芯片的输出端口电流驱动能力,是否可以满足需要?
数字电路主要讲什么内容,对硬件设计有帮助吗?
处理数字信号的电子电路称为数字电路。数字电路着重研究各种电路的输入和输出之间的逻辑关系,分析时常利用逻辑代数、真值表、卡诺图和状态转换图等方法。
随着电子技术的不断发展, 数字电路的应用愈来愈广泛, 在很多领域取代了模拟电路。其主要原因是:
①数字电路更易采用各种算法进行编程, 使其应用更加灵活
②数字电路可以提供更高的工作速度
③采用数字电路, 数字信息的范围可以更宽,表示精度可以更高
④数字电路更加微型化
学好数字电路的同时,还需要你再学习模拟电路,这两门课是进行硬件设计的基础课。入门硬件设计以后,有时间把高频电子和电路分析自学了。然后工作中多和项目联系,积累经验,像很多元器件怎么使用,都是在项目中慢慢熟练。比如别人问你,这个地方为什么你一看到就知道怎么使用,你就可以淡定的说,经验。然后再一顿原理分析,基本上你就是他人眼中的工程师了。
数字电路设计中的3Y原则是指什么?
数字电路设计的3Y原则出自《Digital Design and Computer Architecture》
1.
2.3小节,原文是:”In addition to abstraction and discipline, designers use the three “-y’s” to manage complexity: hierarchy, modularity and regularity. These principles apply to both software and hardware systems.”意思就是:除了抽象和约束之外,设计者还另外使用3Y原则来管理系统的复杂性,他们是:层次化、模块化和规则化。 这些原则同时应用在了软件和硬件的系统上。后文有关于这三条原则的解释,还举了个枪械的例子,自己看书吧,这里就不多说了。