硬体描述语言VHDL & Verilog设计导论

作者:蔡宏儒

EDA工具的功能正以飞快的速度进步,初接触高阶设计的入门者,应该如何以及从何著手?本文以一个典型的设计流程为主干,引导读者一窥其中的源流。
 

楔子

数位电路应用的风行,起于1972年中期所发生的一次电子革命-一种称为TTL(Transistor-Transistor Logic)的标准化逻辑元件面市。在数位电路的发展史上,工程师第一次能以极便宜的价格,买到一组标准逻辑闸(logic gates),用以进行电路的组装及验证。自此,数位电路设计进入了所谓的逻辑闸层次设计(gate-level design)时代。

在此之前,姑且称之为电晶体层次设计(transistor-level design)时代,从事数位电路设计著实是一件麻烦事。您须先以电晶体、电阻及二极体等离散元件组合成各种“土制的”逻辑闸,之后再利用它们组装成您需要的数位电路。由于,离散元件的电器特性并不十分稳定,这导致诸如扇出(fan-in)、扇入(fan-out)及杂讯(noise)等问题变得难以掌控;调教这些“土制的”逻辑闸实在是旷日费时,经常让工程师们非常头痛,也因此使得数位化的脚步变得相当缓慢。

TTL的推出,的确为数位化发展跨出了一大步;自此,逻辑元件设计便与数位电路设计分了家。逻辑元件设计者,专心致力于提供性能更加优异的逻辑闸,而数位电路工程师 ,则只须专注在数位电路的逻辑分析即可。这使得数位电路的设计变得非常方便、经济;在某些方面,它甚至比传统类比电路更便宜、更好用。

然而,由于积体电路的制程技术不断地进步,这使得电路数位化的脚步越来越快。自从制程技术迈入次微米时代之后,System-on-a-Chip(SoC)的观念日趋受到重视,今日设计复杂的ASIC,其逻辑闸的使用数目,及工作频率不断增加的结果,导致以传统徒手将逻辑闸一个个组合的设计分析方式已不敷使用。相信读者们都有使用过OrCAD等工具,发展数位电路的经验;假若电路不大,这类直接绘制gate-level电路图的设计方式或许非常方便,但是,假若是上万个逻辑闸的设计呢?我想那将会是一场十分可怕的梦魇。

工程师希望的是:能否运用现今电脑强大的运算能力,来帮助人们组合并且分析电路;如此,便可将人类可贵的智慧,运用在更高阶层的事务上。基于此一观点,各种电子设计自动化(Electronic Design Automation, EDA)及电脑辅助设计(Computer-Aided Design, CAD)等工具应运而生,它们使得数位电路的设计进入了高阶设计(high-level design)的新世代。

参考图1,假若读者们熟悉软体工程发展的轨迹,应当可以轻易地看出,数位硬体电路设计方式的演进与其有著极相似的历程:亦即,其设计切入点(design entry)均有愈往高阶发展的趋势。软体程式设计由早期直接编辑机械码(machine code)到使用组合语言(assembly language),以至于使用现今普遍风行的C或Pascal等高阶程式语言(high-level programming language);相对地,数位电路设计的发展亦由使用电晶体等离散元件的电晶体层次(transistor-level, 注1)设计,到逻辑闸层次(gate-level, 注2)以至于使用目前最流行的硬体描述语言(Hardware Description Language, HDL),作为其设计流程切入点之高阶合成电路设计(high-level synthesis circuit design)。

本篇文章,便是希望针对现今及未来几年数位电路设计的发展趋势-高阶合成电路设计,以其设计流程为主轴,讨论一些相关的设计概念。为能较完整地描述高阶合成电路设计流程,有必要了解一下,做为其设计切入点的硬体描述语言,及其的演进历程。

注1:对于ASIC而言,transistor-level底下另有一个与设计相关的层次,称为layout-level。这是因为ASIC内的电晶体,其电器特性与layout有直接的关系。
注2:也有人称之为logic-level。

 

 

硬体描述语言的诞生及电子设计自动化工具的发展

早在1970年代末期至1980年代初,美国国防部(The United States Department of Defense),为方便管理有关武器承包商的电子电路技术文件,使其遵循统一的设计描述介面,以便在将来若有新技术推出后,仍能重复再使用(reuse)原设计,因而发展了名为VHSIC(Very High Speed Integrated Circuit) 的计划。最初,其目的是希望能制定一个标准的文件格式(format)及语法(syntax),而各武器承包商及其分包商,均须遵循此一标准语法格式,描述其设计之电路。然而,它的最终的目的-恰如其名:VHSIC,却是希望能借此刺激,创造出下一世代高速积体电路的设计介面,以期能突破各种大型积体电路在设计上的不便。
 

计划初期的成果令人雀跃;可惜的是,由于当时的文件格式,仅能以gate level的方式描述电路,一旦面对数万逻辑闸以上的设计时 ,那实在是极其复杂且非常具挑战性的苦差事;事实上,这可能比用徒手直接绘制电路图,还要令人头疼。于是,一种改良的电路描述方式-“VHSIC硬体描述语言”(VHSIC Hardware Description Language)便在1982年正式诞生;这也就是习称的VHDL。其后,并于1986被「国际电机电子工程协会」(International Electrical & Electronic Engineering , IEEE)收纳为其标准之一;文件编号为IEEE standard 1076。

在此同时,一家名为Gateway Design Automation的公司,亦于1984发表了一种相似于VHDL的硬体描述语言-Verilog HDL。不同于VHDL的是,Verilog HDL在发展之初,便是企图能以程式语言介面(Programming Language Interface, PLI)为基础,创造一个以电脑辅助设计为导向的自动化电路设计环境 ;基于此一原则,Verilog便被设计成一种语法极具亲和力的硬体描述语言。
先前提及,由于美国国防部在发展VHDL语言之初,主要的目的只是希望制定一个设计标准,以便将来若有新技术推出后,仍能重复再使用(reuse)原设计。由于其牵涉到国防大计,想当然尔,其语法的制定便须尽可能地严谨;不幸的是,这个优点却成为往后推展VHDL语言时的致命伤。以软体的程式语言来比较,VHDL的语法即有如PASCAL般的严谨;反之,Verilog的语法却与当时流行的C语言极为类似(事实上,Verilog大部分语法的制定,其灵感便是来自于C语言)。所以,虽然Verilog在发表的时程上,比VHDL晚了近两年,但是当时Verilog受欢迎的程度却远超过VHDL。

Verilog成功的原因,并不单纯只因它那具亲和力的语法;基本上,商业上的应用才是它致胜的关键。原本Gateway本身便是以提供EDA工具为主业,它们非常了解当时ASIC晶圆厂(Application Specific Integrated Circuit Foundry)的需求-一套功能强大的电路模拟器(Simulator),足以用来验证庞大且复杂的数位电路;而Gateway的Verilog模拟器-Verilog-XL,做到了这一点。

Verilog模拟器提供了使用者一个非常具有弹性的模拟环境;使用它,工程师便可如同撰写软体般,以程式语言的方式,描述数位电路内部的电气行为、架构、功能及各种输出入的状态。晶圆厂利用它程式语言介面的特点,建立了本身专属的元件模型(primitive model);这套模型不但可作为厂内ASIC模拟验收(sign-off)之用,并可提供这些模型给客户,作为设计时的模拟参考。直到目前为止,虽然VHDL模拟器已逐渐成为另一个主流 ,但仍有许多专门从事ASIC代工的老字号晶圆厂,只提供Verilog的元件模型。

使用Verilog模拟器的客户利用电脑模拟,便可由终端机得知其设计的ASIC是否符合规格 ,免除许多实际电路板上的验证工作,因而大幅地减少产品的面市时间(time-to-market) 。这使得拥有Verilog元件模型的晶圆厂,在市场上占有更大的优势利基(niche);于是整个ASIC设计产业逐渐向Verilog模拟器靠拢,而Verilog HDL亦因此成为了工业界的标准。

有人说:科学是懒人发明的工具,一点也没有错;1987年,当Synopsys发表了第一个以Verilog HDL为介面的数位电路合成器(digital circuit synthesizer)之后,数位电路设计正式进入了一个新的里程碑;利用Verilog电路合成器,数位电路设计变得更有效率。以往在模拟过后,工程师需要以徒手的方式,将Verilog HDL描述的设计,转换为get-level的电路网络图(net-list);但是Verilog电路合成器却可以自动地完成这件繁琐并且恼人的工作。

一路走来,Verilog似乎占尽了天时地利人和 ,并取得了绝对领先的地位,其实不然。首先,Verilog具有先天上语法不够严谨的缺陷,因此,并不受以行事严谨著称的欧洲市场青睐;其次,这广大的ASIC EDA市场,又岂只这少数几家公司可垄断。于是,VHDL便背负了这些期望,夹著IEEE standard的声望,对Verilog展开了绝地大反攻;经过多番努力与推广,各种支援VHDL语法的EDA工具越来越多,VHDL因而逐渐取得竞争优势。为巩固市场占有率上领先的地位,各家Verilog EDA工具的供应商,无不尽全力促使Verilog成为IEEE标准。终于在1995年,Verilog正式成为IEEE标准的一员;文件编号为IEEE standard 1364。时至今日,这两种硬体描述语言及其衍生的各种工具,在全球EDA市场上的占有率,仍难分轩轾。

基本上,这两种硬体描述语言各有其优缺点;除了语法上的差异及限制之外,支援两者的EDA工具,它们所提供的功能几乎是相同的。要选择何种语言切入,端视您的工作环境而定;大体上,Verilog HDL在美洲地区较受欢迎,而欧洲的厂家则较偏爱VHDL,至于台湾则是两者互有消长(最近VHDL有越来越受重视的趋势)。以笔者的观点来看,较保守的建议是,精其一而了然其二,如此,不论面对的是习惯何种语言的工作伙伴,您都可以合作愉快、事半功倍。

各种EDA工具介绍与自动化设计流程之关系

在了解了硬体描述语言的演进过程中,相信各位对VHDL及Verilog HDL与ASIC EDA工具之间的关系,应已有基本的认识。在此,让我再强调一次:在高阶设计的领域中,硬体描述语言扮演的角色,只是一种程式语言介面(PLI);它提供了一个极具弹性的设计入口(design entry),以作为电路设计者与各种电脑辅助设计工具之间沟通的桥梁 。因此,若缺少了这些EDA工具,硬体描述语言的剩余价值,也只不过是一种系统规划工具,或是技术文件格式而已。

 

具体地说,整个数位电路的高阶设计概念 ,可以说就是设计自动化(design automatize)的实现。理想的情况是:由模拟验证设计是否符合原始设定的规格(specification),以至于诸如逻辑电路的合成与实际电晶体配置与绕线(place and route)这一类徒手不易掌控的工作,工程师均能寻求适当的DEA工具来完成整个电路的设计。图2描述了完整的自动化数位电路设计流程;其中包含了三种主要的EDA工具:模拟器(simulator)、合成器(synthesizer)以及配置与绕线(place and routing, P&R)工具;除了P&R工具之外,其余两者绝大部分,均是以VHDL或Verilog HDL作为其程式语言介面。以下,笔者将配合介绍这个典型的自动化设计流程,简述各项EDA工具的基本功用。

1.系统规格制定(Define Specification)

在ASIC设计之初,工程师们须根据产品的应用场合,为ASIC设定一些诸如功能、操作速度、介面规格、环境温度及消耗功率等规格,以做为将来电路设计时的依据。在这方面,目前已有厂商提供系统级模拟器(system-level simulator),为系统设计提供不错的解决方案;透过此类模拟器,工程师们可以预估系统的执行效能,并可以最佳化的考量,决定韧体模组及硬体模组该如何划分。除此之外,更可进一步规划哪些功能该整合于ASIC内,哪些功能可以设计在电路板上,以符合最大的经济效能比。

2.设计描述(Design Description)

一旦规格制定完成,便依据功能(function)或其他相关考量,将ASIC划分为数个模组(module);此阶段是整个设计过程中最要的关键之一,它直接影响了ASIC内部的架构及各模组间互动的讯号,更间接影响到后续电路合成的效能及未来产品的可靠性。

决定模组之后,便分交由团队的各个工程师,以VHDL或Verilog等硬体描述语言进行设计-亦即功能的行为描述(behavioral description);为能明确及有效率地描述模组的内部功能,各模组之下可能再细分成数个子模组(sub-module),直到能以可合成(synthesizible)的语法描述为止。这种一层层分割模组的设计技巧,便是一般所谓的阶层式设计(hierarchical design);这与早期直接以绘制闸级电路进行设计的时代,所使用的技巧是相类似的。此一步骤所完成的设计描述,是进入高阶合成电路设计流程的叩门砖 ;习惯上,称之为硬体描述语言的设计切入点(HDL design entry)。

关于此一步骤,亦有相关的辅助工具相继推出。Design Book便是其中的代表;它利用一般工程师熟悉的图形介面-如状态图及流程图,协助初接触以硬体描述语言进行设计的工程师,自动编写出相对应的硬体语言描述码。效能如何笔者不敢断言,但它能依使用者决定,整合惯用之其他EDA工具的特点,倒是满吸引人的地方。

3.功能验证(Function Verification)

完成步骤2的设计描述,接下来便是利用VHDL或Verilog的电路模拟器,针对先前的设计描述,验证其功能或时序(timing)是否符合由步骤1所制定的规格。通常,称这类验证为功能模拟(function simulation),或行为模拟(behavioral simulation),而这类的HDL电路模拟器,则通称为行为模拟器(behavioral simulator)。

对于这一类功能验证的模拟而言,模拟器并不会考虑实际逻辑闸或连线(connenct wires)所造成的时间延迟(time delay)、闸延迟(gate delay)及传递延迟(transport delay)。取而代之的是,使用单一延迟(unit delay)的数学模型,来粗略估测电路的逻辑行为;虽然如此无法获得精确的结果,但其所提供的资讯,已足够作为工程师,针对电路功能的设计除错之用。
为了能顺利完成模拟,在此,您还需要准备一分称为测试平台(test bench)的HDL描述档。在这份测试平台的描述档中,必须尽可能地细描述所有可能影响您设计功能的输入讯号组合,以便激发出错误的设计描述位于何处。幸运的话,或许在几次修改之后,就可得到您想要的结果,顺利进入下一个步骤。

4.逻辑电路合成(Logic synthesis)

确定设计描述之功能无误之后,便可借由合成器(synthesizer)进行电路合成。合成过程中,您必须选择适当的逻辑闸元件库(logic cell library),作为合成逻辑电路时的参考依据。元件库的取得,可能直接来自于您的ASIC供应商(ASIC vendor, 负责协助客户设计ASIC的厂商)、购自其他元件库供应商(third-party ASIC library vendor),或是为了某种特殊原因,您亦可能考虑自行建立。

事实上,元件库内含的逻辑闸资讯非常广泛,大致上包括了以下各项。

  • cell schematic,用于电路合成,以便产生逻辑电路的网络列表(netlist)。
  • timing model,描述各逻辑闸精确的时序模型;元件工程师会萃取各逻辑闸内的寄生电阻及电容进行模拟,进而建立各逻辑闸的实际延迟参数。其中包括闸延迟(gate delay) 、输出入的延迟(input delay / output delay)及所谓的连线延迟(wire delay)等;这在进入逻辑闸层次的电路模拟,以及在P&R之后的模拟都会使用到它。
  • routing model,描述各逻辑闸在进行绕线时的限制,作为绕线工具的参考资料。
  • silicon physical layout,在制作ASIC的光罩(mask)时会使用到它。

使用合成器有几个需要注意的事项,其一就是最佳化(optimize)的设定。根据步骤1所制定的规格,工程师可对合成器下达一连串限制条件(constrain),根据这些条件,合成器便会自动合成满足您规格要求的逻辑电路。最常见的三个限制条件(注3)有:操作速度、逻辑闸数及功率消耗。事实上,这三项限制条件之间是呈现互相矛盾的关系;也就是说:一旦您所下的限制条件太过严苛,将使电路合成的速度变得非常的慢,更甚者,有可能在花费大把时间后,仍得不到您想要的结果。

design entry硬体语言设计描述档,其语法的编写风格(HDL coding style) ,亦是决定合成器执行效能的另一个因素。事实上,无论是对VHDL或是Verilog而言,合成器所支援的HDL语法均是有限的;过于抽象的语法只适用于编写cell library,或是做为系统规划评估时的模拟模型所用,而不为合成器所接受。

此外,由于一般合成器的最佳化演算法则,都只能达到区域性最佳化(local optima);因此,对于过分刁钻的语法描述,将影响合成器在最佳化过程的执行时间。

利用图3,可以简单地说明coding style与最佳化之间的关系:一个良好的coding style,便如同位于A点上的球,合成器仅需花费些许的气力,便可将其推至最低点(最佳点)。而相反地,较差的coding style,就犹如位在C点上的球,合成器需花费较大的功夫,才能将其推到B点;假若又加上较严苛的限制条件,则可能连B点都到不了。工程师应清楚的明白,对您所使用的合成器而言,哪些才是“良好的”coding style,而这些在使用手册中都可以查得到。

5.逻辑闸层次的电路功能验证(Gate-Level Netlist Verification)

由合成器产生的netlist,会在这个阶段进行第二次的电路模拟;一般称之为逻辑闸层次的电路功能验证,或称为P&R前的模拟,简称前段模拟(pre-simulation)。在此阶段,主要的工作是要确认,经由合成器所合成的电路,是否如同原始的设计描述般,符合您的功能需求;利用逻辑闸层次模拟器(gate-level simulator),配合在功能验证时已经建立的test bench,便可达到这个目的。

这里出现两个新的名词:VITAL(VHDL Initiative Toward ASIC Library)、library及Verilog library;两者均可视为先前所提及的cell library当中的timing model。在pre-simulation中,一般只考虑闸延迟,而连线延迟在此处是不予考虑的(通常在电路合成阶段,是无法预测实际连线的长度,因此也就无法推测连线所造成的延迟)。
时序变异(timing variation)是此处经常出现的发生错误,这当中包括了,设定时间(set-up time)或保持时间(holding time)的不符合,以及脉冲干扰(glitch)现象的发生。而这些时序变异,基本上都是只是单纯考虑闸延迟时所造成的结果。

6. 配置与绕线(Place and Routing)

这里包含了三项主要的工作:平面规划(floor planning)、配置(placement)及绕线(routing)。还记得在设计描述的步骤,您已将ASIC划分成数个模组了吗?floor planning的工作便是,适当地规划这些划分好模组在晶片上的位置。

比起模组内逻辑闸间的接线,各模组之间互连讯号的接线,通常会比较长,因此,他们所产生的延迟会主控ASIC的性能;在次微米制程上,此种现象更为显著,这也就是为何先前特别强调,模组划分的重要性。完成平面规划之后,P&R工具便接著完成各模组方块内逻辑闸的放置与绕线。

7.绕线后的电路功能验证(Post Layout Verification)

在这个阶段,经过P&R之后的电路,除了须重复验证,是否仍符合原始之功能设计之外,工程师最关心的是,在考虑实体的闸延迟及连线延迟的条件之下,电路能否正常运作。与逻辑闸层次的电路功能验证时发生的情况相同,您将面对诸如set-up time、hold time及glitch的问题;不同的是,此时若真有错误发生,您将面对更冗长的重复修正周期(iteration cycle)。也就是说,您可能需要回到最原始的步骤:修改HDL设计描述,重新再跑一次相同的流程。

麻烦还没有完,由于需要参考的参数非常的多,模拟时间将花费您数倍于先前的模拟。经由P&R工具所产生的标准延迟格式(Standard Delay Format, SDF)档,提供了详实的物理层次的延迟参数;透过VITAL的参数回传机制(back-annotation),模拟器能够精确的预估数位电路的电气行为,并且指示出发生时序错误的时间点,而您所须付出的代价就是“时间”。最后,非常幸运的您完成了这项验证工作,便可以sign-off,等著您的ASIC vendor交货了。

整个设计流程在此只能算是大概介绍完毕 ;这当中牵涉到许多未提及的层面,其中包括了时脉(clock tree)、测试设计(Design for Test)、功能一致性验证(function equivalence check)、以及静态模拟(static simulation)等等。为免文章过于冗长,这些进阶的问题,将来有机会再与读者分享。

结论

假使设计硬体电路能像写软体这样方便,那该是多么美好的景象;硬体描述语言的高阶合成电路设计,为我们打开了这扇窗。事实上,VHDL及Verilog HDL并非唯一的硬体描述语言,基于相似的目的,早期也发展出其他如ABEL及AHDL等硬体语言,但是由于支持的厂商不多,因此目前不如前者来得普遍。最近,VHDL及Verilog HDL的发展协会 ,为提供更一般化的电路描述,已制定了能够同时描述数位及类比混合电路的描述语法(注4),相信支援其语法的相关EDA工具,应该能在近期面市。

为能迎接系统晶片(System on One Chip, SoC)以及智产权(Intellectual Property, IP)的时代来临,各EDA工具的供应商无不卯足全力,企图在下一世代的设计流程上,站在业界领先的地位。Synopsys及Cadence更是相继推出应用功能一致性验证及静态模拟等技术的产品,例如:Formality、PrimeTime(Synopsys)以及Affirma(Cadence);其他诸如预先平面规划(pre-floor-planning)等新的设计观念亦不断地被提出。虽然电路的设计工具及观念不断推陈出新,但是对传统的晶片设计厂商而言,如何将这些新的概念,整合进原先的设计流程,才是最重要的问题。希望本文介绍的基本设计流程,能提供初入门者一个完整的概念。笔者相信,只要以这个典型的设计流程为基础,应该不难接受新的设计观念才对。

注3:这些亦是评量ASIC性能的重要指标。
注4:http://www.vhdl.org

相关文章