新闻  |   论坛  |   博客  |   在线研讨会
众多硬件描述语言,您使用哪一种?兼论硬件描述语言的现状与发展
tvb2058 | 2008-07-04 09:18:24    阅读:5257   发布文章

硬件描述语言HDL的现状与发展
硬件描述语言HDL是一种用形式化方法描述数字电路和系统的语言。利用这种语言,数字电路系统的设计可以从上层到下层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下去,再用专用集成电路ASIC或现场可编程门阵列FPGA自动布局布线工具,把网表转换为要实现的具体电路布线结构。
  目前,这种高层次(high-level-design)的方法已被广泛采用。据统计,目前在美国硅谷约有90%以上的ASICFPGA采用硬件描述语言进行设计。
  硬件描述语言HDL的发展至今已有20多年的历史,并成功地应用于设计的各个阶段:建模、仿真、验证和综合等。到20世纪80年代,已出现了上百种硬件描述语言,对设计自动化曾起到了极大的促进和推动作用。但是,这些语言一般各自面向特定的设计领域和层次,而且众多的语言使用户无所适从。因此,急需一种面向设计的多领域、多层次并得到普遍认同的标准硬件描述语言。20世纪80年代后期,VHDLVerilog HDL语言适应了这种趋势的要求,先后成为IEEE标准。
  现在,随着系统级FPGA以及系统芯片的出现,软硬件协调设计和系统设计变得越来越重要。传统意义上的硬件设计越来越倾向于与系统设计和软件设计结合。硬件描述语言为适应新的情况,迅速发展,出现了很多新的硬件描述语言,像SuperlogSystemCCynlib C++等等。究竟选择哪种语言进行设计,整个业界正在进行激烈的讨论。因此,完全有必要在这方面作一些比较研究,为EDA设计做一些有意义的工作,也为发展我们未来的芯片设计技术打好基础
1 目前HDL发展状况
  目前,硬件描述语言可谓是百花齐放,有VHDLSuperlogVerilogSystemCCynlib C++C Level等等。虽然各种语言各有所长,但业界对到底使用哪一种语言进行设计,却莫衷一是,难有定论。
  而比较一致的意见是,HDLC/C++语言在设计流程中实现级和系统级都具有各自的用武之地。问题出现在系统级和实现级相连接的地方:什么时候将使用中的一种语言停下来,而开始使用另外一种语言?或者干脆就直接使用一种语言?现在看来得出结论仍为时过早。
  在2001年举行的国际HDL会议上,与会者就使用何种设计语言展开了生动、激烈的辩论。最后,与会者投票表决:如果要启动一个芯片设计项目,他们愿意选择哪种方案?结果,仅有2票或3票赞成使用SystemCCynlibC Level设计;而SuperlogVerilog各自获得了约20票。至于以后会是什么情况,连会议主持人John Cooley也明确表示:“5年后,谁也不知道这个星球会发生什么事情。”
  各方人士各持己见:为Verilog辩护者认为,开发一种新的设计语言是一种浪费;为SystemC辩护者认为,系统级芯片SoC快速增长的复杂性需要新的设计方法;C语言的赞扬者认为,Verilog是硬件设计的汇编语言,而编程的标准很快就会是高级语言,Cynlib C++是最佳的选择,它速度快、代码精简;Superlog的捍卫者认为,SuperlogVerilog的扩展,可以在整个设计流程中仅提供一种语言和一个仿真器,与现有的方法兼容,是一种进化,而不是一场革命。
  当然,以上所有的讨论都没有提及模拟设计。如果想设计带有模拟电路的芯片,硬件描述语言必须有模拟扩展部分,像Verilog HDL-A,既要求能够描述门级开关级,又要求具有描述物理特性的能力。
2 几种代表性的HDL语言
2.1 VHDL
  早在1980年,因为美国军事工业需要描述电子系统的方法,美国国防部开始进行VHDL的开发。1987年,由IEEEInstitute of Electrical and Electro- nics Engineers)将VHDL制定为标准。参考手册为IEEE VHDL语言参考手册标准草案1076/B版,于1987年批准,称为IEEE 1076-1987。应当注意,起初VHDL只是作为系统规范的一个标准,而不是为设计而制定的。第二个版本是在1993年制定的,称为VHDL-93,增加了一些新的命令和属性。
  虽然有“VHDL是一个4亿美元的错误”这样的说法,但VHDL毕竟是1995年以前唯一制订为标准的硬件描述语言,这是它不争的事实和优势;但同时它确实比较麻烦,而且其综合库至今也没有标准化,不具有晶体管开关级的描述能力和模拟设计的描述能力。目前的看法是,对于特大型的系统级数字电路设计,VHDL是较为合适的。
  实质上,在底层的VHDL设计环境是由Verilog HDL描述的器件库支持的,因此,它们之间的互操作性十分重要。目前,VerilogVDHL的两个国际组织OVIVI正在筹划这一工作,准备成立专门的工作组来协调VHDLVerilog HDL语言的互操作性。OVI也支持不需要翻译,由VHDLVerilog的自由表达。
2.2 Verilog HDL
  Verilog HDL是在1983年,由GDAGateWay Design Automation)公司的Phil Moorby首创的。Phil Moorby后来成为Verilog-XL的主要设计者和Cadence公司的第一合伙人。在1984~1985年,Phil Moorby设计出了第一个名为Verilog-XL的仿真器;1986年,他对Verilog HDL的发展又作出了另一个巨大的贡献:提出了用于快速门级仿真的XL算法。
  随着Verilog-XL算法的成功,Verilog HDL语言得到迅速发展。1989年,Cadence公司收购了GDA公司,Verilog HDL语言成为Cadence公司的私有财产。1990年,Cadence公司决定公开Verilog HDL语言,于是成立了OVIOpen Verilog International)组织,负责促进Verilog HDL语言的发展。基于Verilog HDL的优越性,IEEE1995年制定了Verilog HDLIEEE标准,即Verilog HDL 1364-19952001年发布了Verilog HDL 1364-2001标准。在这个标准中,加入了Verilog HDL-A标准,使Verilog有了模拟设计描述的能力。
2.3 Superlog
  开发一种新的硬件设计语言,总是有些冒险,而且未必能够利用原来对硬件开发的经验。能不能在原有硬件描述语言的基础上,结合高级语言CC++甚至Java等语言的特点,进行扩展,达到一种新的系统级设计语言标准呢?
  Superlog就是在这样的背景下研制开发的系统级硬件描述语言。Verilog语言的首创者Phil MoorbyPeter Flake等硬件描述语言专家,在一家叫Co-Design AutomationEDA公司进行合作,开始对Verilog进行扩展研究。1999年,Co-Design公司发布了SUPERLOGTM系统设计语言,同时发布了两个开发工具:SYSTEMSIMTMSYSTEMEXTM。一个用于系统级开发,一个用于高级验证。2001年,Co-Design公司向电子产业标准化组织Accellera发布了SUPERLOG扩展综合子集ESS,这样它就可以在今天Verilog语言的RTL级综合子集的基础上,提供更多级别的硬件综合抽象级,为各种系统级的EDA软件工具所利用。
  至今为止,已超过15家芯片设计公司用Superlog来进行芯片设计和硬件开发。Superlog是一种具有良好前景的系统级硬件描述语言。但是不久前,由于整个IT产业的滑坡,EDA公司进行大的整合,Co-Design公司被Synopsys公司兼并,形势又变得扑朔迷离。
2.4 SystemC
  随着半导体技术的迅猛发展,SoC已经成为当今集成电路设计的发展方向。在系统芯片的各个设计中,像系统定义、软硬件划分、设计实现等,集成电路设计界一直在考虑如何满足SoC的设计要求,一直在寻找一种能同时实现较高层次的软件和硬件描述的系统级设计语言。
  SystemC正是在这种情况下,由Synopsys公司和CoWare公司积极响应目前各方对系统级设计语言的需求而合作开发的。1999927日,40多家世界著名的EDA公司、IP公司、半导体公司和嵌入式软件公司宣布成立“开放式SystemC联盟”。著名公司Cadence也于2001年加入了SystemC联盟。SystemC19999月联盟建立初期的0.9版本开始更新,从1.0版到1.1版,一直到200110月推出了最新的2.0版。
3 各种HDL语言的体系结构和设计方法
3.1 SystemC
  所有的SystemC都是基于C++的;图1中的上层构架都是很明确地建立在下层的基础上;SystemC内核提供一个用于系统体系结构、并行、通信和同步时钟描述的模块;完全支持内核描绘以外的数据类型、用户定义数据类型;通常的通信方式,如信号、FIFO,都可以在内核的基础上建立,经常使用的计算模块也可以在内核基础上建立;如果需要,图1中较低层的内容不依赖上层就可以直接使用。
  实际使用中,SystemC由一组描述类库和一个包含仿真核的库组成。在用户的描述程序中,必须包括相应的类库,可以通过通常的ANSI C++编译器编译该程序。SystemC提供了软件、硬件和系统模块。用户可以在不同的层次上自由选择,建立自己的系统模型,进行仿真、优化、验证、综合等等。
3.2 Superlog
  Superlog集合了Verilog的简洁、C语言的强大、功能验证和系统级结构设计等特征,是一种高速的硬件描述语言。其体系结构如图2
  ① Verilog 95Verilog 2KSuperlogVerilog HDL的超集,支持最新的Verilog 2K的硬件模型。
  ② CC++语言。Superlog提供C语言的结构、类型、指针,同时具有C++面对对象的特性。
  ③ Superlog扩展综合子集ESSESS提供一种新的硬件描述的综合抽象级。
  ④ 强大的验证功能。自动测试基准,如随机数据产生、功能覆盖、各种专有检查等。
  Superlog的系统级硬件开发工具主要有Co- Design Automation公司的SYSTEMSIMTMSYSTEMEXTM,同时可以结合其它的EDA工具进行开发。
3.3 VerilogVHDL
  这两种语言是传统硬件描述语言,有很多的书籍和资料可以查阅参考,这里不多介绍。
4 目前可取可行的策略和方式
  按传统方法,我们将硬件抽象级的模型类型分为以下五种:
  ◇ 系统级(system)——用语言提供的高级结构实现算法运行的模型;
  ◇ 算法级(algorithm)——用语言提供的高级结构实现算法运行的模型;
  ◇ RTL级(Register Transfer Level)——描述数据在寄存器之间流动和如何处理、控制这些数据流动的模型。(以上三种都属于行为描述,只有RTL级才与逻辑电路有明确的对应关系。)
  ◇ 门级(gate-level)——描述逻辑门以及逻辑门之间的连接模型。(与逻辑电路有确切的连接关系。以上四种,数字系统设计工程师必须掌握。)
  ◇ 开关级(switch-level)——描述器件中三极管和存储节点以及它们之间连接的模型。(与具体的物理电路有对应关系,工艺库元件和宏部件设计人员必须掌握。)

根据目前芯片设计的发展趋势,验证级和综合抽象级也有可能成为一种标准级别。因为它们适合于IP核复用和系统级仿真综合优化的需要,而软件(嵌入式、固件式)也越来越成为一个和系统密切相关的抽象级别。目前,对于一个系统芯片设计项目,可以采用的方案包括以下几种:

 

  ① 最传统的办法是,在系统级采用VHDL,在软件级采用C语言,在实现级采用Verilog。目前,VHDLVerilog的互操作性已经逐步走向标准化,但软件与硬件的协调设计还是一个很具挑战性的工作,因为软件越来越成为SOC设计的关键。该方案的特点是:风险小,集成难度大,与原有方法完全兼容,有现成的开发工具;但工具集成由开发者自行负责完成。

 

  ② 系统级及软件级采用Superlog,硬件级和实现级均采用Verilog HDL描述,这样和原有的硬件设计可以兼容。只要重新采购两个Superlog开发工具SYSTEMSIMTMSYSTEMEXTM即可。该方案特点是风险较小,易于集成,与原硬件设计兼容性好,有集成开发环境。

 

  ③ 系统级和软件级采用SystemC,硬件级采用SystemC与常规的Verilog HDL互相转换,与原来的软件编译环境完全兼容。开发者只需要一组描述类库和一个包含仿真核的库,就可以在通常的ANSI C++编译器环境下开发;但硬件描述与原有方法完全不兼容。该方案特点是风险较大,与原软件开发兼容性好,硬件开发有风险。

 

5 未来发展和技术方向

 

  微电子设计工业的设计线宽已经从0.25μm 0.18μm变迁,而且正在向0.13μm90nm的目标努力迈进。到0.13μm这个目标后,90%的信号延迟将由线路互连所产生。为了设计工作频率近2GHz的高性能电路,就必须解决感应、电迁移和衬底噪声问题(同时还有设计复杂度问题)。

 

未来几年的设计中所面临的挑战有哪些?标准组织怎样去面对?当设计线宽降到0.13μm,甚至更小时,将会出现四个主要的趋势:

 

  ◇ 设计再利用;

 

  ◇ 设计验证(包括硬件和软件);

 

  ◇ 互连问题将决定对时间、电源及噪声要求;

 

  ◇ 系统级芯片设计要求。

 

  满足未来设计者需要的设计环境将是多家供应商提供解决方案的模式,因为涉及的问题面太广且太复杂,没有哪个公司或实体可以独立解决。实际上,人们完全有理由认为,对下一代设计问题解决方案的贡献,基础研究活动与独立产业的作用将同等重要。

 

  以后,EDA界将在以下三个方面开展工作。

 

  ① 互用性标准。所有解决方案的基础,是设计工具开发过程的组件——互用性标准。我们知道,EDA工业采用的是工业上所需要的标准,而不管标准是谁制定的。但是,当今市场的迅速发展正在将优势转向那些提供标准时能做到快速适应和技术领先的组织。处于领先的公司正在有目的地向这方面投资,那些没有参加开发这些标准的公司则必须独自承担风险。

 

  ② 扩展其高级库格式(ALF)标准,使其包含物理领域的信息,是EDA开发商可以致力于解决互连问题的算法,从而使电路设计者在解决设计收尾工作时,不再受到这个问题的困扰。

 

  ③ 制定新的系统级设计语言标准。标准化系统芯片的设计工具和语言,使SoC真正达到第三次微电子设计革命浪潮。

 

6 国内发展的战略选择

 

  由于目前IT行业不景气,以及ASIC设计复杂程度不断增加,各EDA公司出现了合并调整的趋势。Synopsys合了Avant!和Co-DesignCadence合了GDA等,形成了几大巨头的局面。而各可编程器件厂商,像XilinxAltera,也积极与EDA紧密合作,因此,我们必须抓住这个时机,全力发展;不然,就要面对以后与垄断巨头进行竞争的事倍功半的不利局面。

 

  针对目前硬件描述语言的发展和国家芯片制造生产的发展战略,国内如何在原EDA基础薄弱的情况下迅速发展,使EDA成为一个合理、健康而必不可少的产业;将基础研究活动与独立产业的作用合理的结合,建议开展如下方面的工作:

 

  ① 为了实现我国的芯片设计自主化,必须夯实基础,在结合VHDL的基础上,推广Verilog HDL设计语言,使硬件设计的底层单元库可以自主研制;

 

  ② 根据目前芯片系统的发展趋势,对系统级语言进行比较研究,在SuoerlogSystemC等语言中做出选择,并进行相关工具的推广,以及与相关企业进行合作等;

 

  ③ 深入HDL语言的综合和仿真等模型的研究,努力在与国外合作的基础上,建立自主知识产权的EDA公司;

 

  ④ 积极加入EDA目前正在进行的标准化工作,做到了解、学习、应用、吸收、参与并重;

 

  ⑤ 政府积极加入,重视产、学、研的合作,开展卓有成效的发展模式。
规范很重要
   工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件
还是硬件),不按照规范走几乎是不可实现的。逻辑设计也是这样:如果不按规范做的
话,过一个月后调试时发现有错,回头再看自己写的代码,估计很多信号功能都忘了,
更不要说检错了;如果一个项目做了一半一个人走了,接班的估计得从头开始设计;如
果需要在原来的版本基础上增加新功能,很可能也得从头来过,很难做到设计的可重用
性。
 
在逻辑方面,我觉得比较重要的规范有这些:
   1.设计必须文档化。要将设计思路,详细实现等写入文档,然后经过严格评审通过
后才能进行下一步的工作。这样做乍看起来很花时间,但是从整个项目过程来看,绝对
要比一上来就写代码要节约时间,且这种做法可以使项目处于可控、可实现的状态。
   2.代码规范。
   a.设计要参数化。比如一开始的设计时钟周期是30ns,复位周期是5个时钟周期,我
们可以这么写:
         parameter  CLK_PERIOD = 30;
         parameter  RST_MUL_TIME = 5;
         parameter  RST_TIME = RST_MUL_TIME * CLK_PERIOD;
         ...
         rst_n = 1'b0;
         # RST_TIME rst_n = 1'b1;
         ...
         # CLK_PERIOD/2 clk <= ~clk;
    如果在另一个设计中的时钟是40ns,复位周期不变,我们只需对CLK_PERIOD进行重
新例化就行了,从而使得代码更加易于重用。
   b.信号命名要规范化。
   1) 信号名一律小写,参数用大写。
   2) 对于低电平有效的信号结尾要用_n标记,如rst_n
   3) 端口信号排列要统一,一个信号只占一行,最好按输入输出及从哪个模块来到哪
个模块去的关系排列,这样在后期仿真验证找错时后  方便很多。
      4) 一个模块尽量只用一个时钟,这里的一个模块是指一个module或者是一个en
tity。在多时钟域的设计中涉及到跨时钟域的设计中最好有专门一个模块做时钟域的隔
离。这样做可以让综合器综合出更优的结果。
      5) 尽量在底层模块上做逻辑,在高层尽量做例化,顶层模块只能做例化,禁止
出现任何胶连逻辑(glue logic),哪怕仅仅是对某个信号取反。理由同上。
      6) FPGA的设计上禁止用纯组合逻辑产生latch,带D触发器的latch的是允许的
,比如配置寄存器就是这种类型。
      7) 一般来说,进入FPGA的信号必须先同步,以提高系统工作频率(板级)。
       所有模块的输出都要寄存器化,以提高工作频率,这对设计做到时序收敛也
是极有好处的。
      9) 除非是低功耗设计,不然不要用门控时钟--这会增加设计的不稳定性,在要
用到门控时钟的地方,也要将门控信号用时钟的下降沿 打一拍再输出与时钟相与。
   10)禁止用计数器分频后的信号做其它模块的时钟,而要用改成时钟使能的方式
,否则这种时钟满天飞的方式对设计的可靠性极为不利,也大大增加了静态时序分析的
复杂性。如FPGA的输入时钟是25M的,现在系统内部要通过RS232PC通信,要以rs232_
1xclk的速率发送数据。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客