原创 众多硬件描述语言,您使用哪一种?兼论硬件描述语言的现状与发展

2008-6-26 11:21 2661 5 5 分类: FPGA/CPLD
硬件描述语言HDL的现状与发展
硬件描述语言HDL是一种用形式化方法描述数字电路和系统的语言。利用这种语言,数字电路系统的设计可以从上层到下层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下去,再用专用集成电路ASIC或现场可编程门阵列FPGA自动布局布线工具,把网表转换为要实现的具体电路布线结构。

  目前,这种高层次(high-level-design)的方法已被广泛采用。据统计,目前在美国硅谷约有90%以上的ASIC和FPGA采用硬件描述语言进行设计。

  硬件描述语言HDL的发展至今已有20多年的历史,并成功地应用于设计的各个阶段:建模、仿真、验证和综合等。到20世纪80年代,已出现了上百种硬件描述语言,对设计自动化曾起到了极大的促进和推动作用。但是,这些语言一般各自面向特定的设计领域和层次,而且众多的语言使用户无所适从。因此,急需一种面向设计的多领域、多层次并得到普遍认同的标准硬件描述语言。20世纪80年代后期,VHDL和Verilog HDL语言适应了这种趋势的要求,先后成为IEEE标准。

  现在,随着系统级FPGA以及系统芯片的出现,软硬件协调设计和系统设计变得越来越重要。传统意义上的硬件设计越来越倾向于与系统设计和软件设计结合。硬件描述语言为适应新的情况,迅速发展,出现了很多新的硬件描述语言,像Superlog、SystemC、Cynlib C++等等。究竟选择哪种语言进行设计,整个业界正在进行激烈的讨论。因此,完全有必要在这方面作一些比较研究,为EDA设计做一些有意义的工作,也为发展我们未来的芯片设计技术打好基础

1 目前HDL发展状况

  目前,硬件描述语言可谓是百花齐放,有VHDL、Superlog、Verilog、SystemC、Cynlib C++、C Level等等。虽然各种语言各有所长,但业界对到底使用哪一种语言进行设计,却莫衷一是,难有定论。

  而比较一致的意见是,HDL和C/C++语言在设计流程中实现级和系统级都具有各自的用武之地。问题出现在系统级和实现级相连接的地方:什么时候将使用中的一种语言停下来,而开始使用另外一种语言?或者干脆就直接使用一种语言?现在看来得出结论仍为时过早。

  在2001年举行的国际HDL会议上,与会者就使用何种设计语言展开了生动、激烈的辩论。最后,与会者投票表决:如果要启动一个芯片设计项目,他们愿意选择哪种方案?结果,仅有2票或3票赞成使用SystemC、Cynlib和C Level设计;而Superlog和Verilog各自获得了约20票。至于以后会是什么情况,连会议主持人John Cooley也明确表示:“5年后,谁也不知道这个星球会发生什么事情。”

  各方人士各持己见:为Verilog辩护者认为,开发一种新的设计语言是一种浪费;为SystemC辩护者认为,系统级芯片SoC快速增长的复杂性需要新的设计方法;C语言的赞扬者认为,Verilog是硬件设计的汇编语言,而编程的标准很快就会是高级语言,Cynlib C++是最佳的选择,它速度快、代码精简;Superlog的捍卫者认为,Superlog是Verilog的扩展,可以在整个设计流程中仅提供一种语言和一个仿真器,与现有的方法兼容,是一种进化,而不是一场革命。

  当然,以上所有的讨论都没有提及模拟设计。如果想设计带有模拟电路的芯片,硬件描述语言必须有模拟扩展部分,像Verilog HDL-A,既要求能够描述门级开关级,又要求具有描述物理特性的能力。

2 几种代表性的HDL语言

2.1 VHDL

  早在1980年,因为美国军事工业需要描述电子系统的方法,美国国防部开始进行VHDL的开发。1987年,由IEEE(Institute 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描述的器件库支持的,因此,它们之间的互操作性十分重要。目前,Verilog和VDHL的两个国际组织OVI、VI正在筹划这一工作,准备成立专门的工作组来协调VHDL和Verilog HDL语言的互操作性。OVI也支持不需要翻译,由VHDL到Verilog的自由表达。

2.2 Verilog HDL

  Verilog HDL是在1983年,由GDA(GateWay 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语言,于是成立了OVI(Open Verilog International)组织,负责促进Verilog HDL语言的发展。基于Verilog HDL的优越性,IEEE于1995年制定了Verilog HDL的IEEE标准,即Verilog HDL 1364-1995;2001年发布了Verilog HDL 1364-2001标准。在这个标准中,加入了Verilog HDL-A标准,使Verilog有了模拟设计描述的能力。

2.3 Superlog

  开发一种新的硬件设计语言,总是有些冒险,而且未必能够利用原来对硬件开发的经验。能不能在原有硬件描述语言的基础上,结合高级语言C、C++甚至Java等语言的特点,进行扩展,达到一种新的系统级设计语言标准呢?

  Superlog就是在这样的背景下研制开发的系统级硬件描述语言。Verilog语言的首创者Phil Moorby和Peter Flake等硬件描述语言专家,在一家叫Co-Design Automation的EDA公司进行合作,开始对Verilog进行扩展研究。1999年,Co-Design公司发布了SUPERLOGTM系统设计语言,同时发布了两个开发工具:SYSTEMSIMTM和SYSTEMEXTM。一个用于系统级开发,一个用于高级验证。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公司积极响应目前各方对系统级设计语言的需求而合作开发的。1999年9月27日,40多家世界著名的EDA公司、IP公司、半导体公司和嵌入式软件公司宣布成立“开放式SystemC联盟”。著名公司Cadence也于2001年加入了SystemC联盟。SystemC从1999年9月联盟建立初期的0.9版本开始更新,从1.0版到1.1版,一直到2001年10月推出了最新的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 95和Verilog 2K。Superlog是Verilog HDL的超集,支持最新的Verilog 2K的硬件模型。

  ② C和C++语言。Superlog提供C语言的结构、类型、指针,同时具有C++面对对象的特性。

  ③ Superlog扩展综合子集ESS。ESS提供一种新的硬件描述的综合抽象级。

  ④ 强大的验证功能。自动测试基准,如随机数据产生、功能覆盖、各种专有检查等。

  Superlog的系统级硬件开发工具主要有Co- Design Automation公司的SYSTEMSIMTM和SYSTEMEXTM,同时可以结合其它的EDA工具进行开发。

3.3 Verilog和VHDL

  这两种语言是传统硬件描述语言,有很多的书籍和资料可以查阅参考,这里不多介绍。

4 目前可取可行的策略和方式

  按传统方法,我们将硬件抽象级的模型类型分为以下五种:

  ◇ 系统级(system)——用语言提供的高级结构实现算法运行的模型;

  ◇ 算法级(algorithm)——用语言提供的高级结构实现算法运行的模型;

  ◇ RTL级(Register Transfer Level)——描述数据在寄存器之间流动和如何处理、控制这些数据流动的模型。(以上三种都属于行为描述,只有RTL级才与逻辑电路有明确的对应关系。)

  ◇ 门级(gate-level)——描述逻辑门以及逻辑门之间的连接模型。(与逻辑电路有确切的连接关系。以上四种,数字系统设计工程师必须掌握。)

  ◇ 开关级(switch-level)——描述器件中三极管和存储节点以及它们之间连接的模型。(与具体的物理电路有对应关系,工艺库元件和宏部件设计人员必须掌握。)

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

  目前,对于一个系统芯片设计项目,可以采用的方案包括以下几种:

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

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

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

5 未来发展和技术方向

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

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

  ◇ 设计再利用;

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

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

  ◇ 系统级芯片设计要求。

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

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

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

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

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

6 国内发展的战略选择

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

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

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

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

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

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

  ⑤ 政府积极加入,重视产、学、研的合作,开展卓有成效的发展模式。

相关回复:

作者: trust840220   发布日期: 2006-11-20

我在大学学的是化学,具体搞药物的,觉得没什么前途。毕业前学习了水的监测和处理。工作却到了一家光电仪器公司,本来上的项目是COD在线监测仪器,现在出现了致命的问题,光源找不到,我就配合几个技术员搞单片机!什么都不懂!!迷惘之际来到小木虫请教,多亏了sdlj8051!!
在他的发来的学习建议和许多网址中我找到了许多入门的资料,我也及时的把资源的网址发上来,也发了一些小的资料上来。也许有的虫子要学习呢
:D
老的工程师建议我从汇编语言学起,新的工程师说汇编会搞死人的,让我从C语言学起,加上他们热情的提供了我编程器、仿真机,本人又觉得C可读性强,就从KEILC51 学起来了 呵呵
反正什么都不会,一切从头开始!干干净净,利利索索!

作者: ZHMX   发布日期: 2006-12-28

VHDL和Verilog对比就象C和汇编对比。
VHDL的语法描述更规范,高级语言特性较多。适合于大型的硬件逻辑设计。
Verilog则更接近硬件,语法更灵活,适合于激励,仿真,硬件模型。
VHDL具有很多高级语言的特性:数据类型定义,常量定义,函数和过程定义。
以上这些定义都可集中写在一个PACKAGE中(类似C的.H文件),在每个子模块
中只需加一句话引用该PACKAGE即可。从总体设计上这些特性使得模块化设计
和TOP-DOWN设计可以比较方便的进行。从局部设计上,可以很方便的写出可读
性很强的状态机的结构。VHDL是正向逻辑设计的必然趋势,这方面Verilog肯定
是比不过的。现在已经有专门的VHDL的开发环境,如SUMMIT的Visual VHDL。
你可以画状态机,流程图,原理图,由SUMMIT自动生成VHDL。
Verilog语法比VHDL更灵活。从语法核心上Verilog完全是一种事件触发的模式。
它的描述能力实际是超过了硬件能实现的范围。比如Verilog语法可以很容易的
描述一个多时钟的触发器。Verilog非常适合写激励和建器件模型,这些工作
很难用VHDL来完成。目前所有半导体厂家的器件库都是用Verilog来描述的。
SIGN OFF的平台也是基于Verilog的。VHDL的新标准里一直试图加入一些这方面
的特性,但是很不成功。
目前EDA设计以综合为界,综合前的设计用VHDL,综合出的网表就是Verilog的了,
布局布线,时延提取,带时延仿真,测试设计都是基于Verilog。和Verilog相关
的步骤虽多,但现在的设计方法是在VHDL设计阶段做较多约束,从综合开始就是
机器自己去RUN了。

作者: sdlj8051   发布日期: 2006-12-28

规范很重要

   工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件
还是硬件),不按照规范走几乎是不可实现的。逻辑设计也是这样:如果不按规范做的
话,过一个月后调试时发现有错,回头再看自己写的代码,估计很多信号功能都忘了,
更不要说检错了;如果一个项目做了一半一个人走了,接班的估计得从头开始设计;如
果需要在原来的版本基础上增加新功能,很可能也得从头来过,很难做到设计的可重用
性。

  


在逻辑方面,我觉得比较重要的规范有这些:
   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) 端口信号排列要统一,一个信号只占一行,最好按输入输出及从哪个模块来到哪
个模块去的关系排列,这样在后期仿真验证找错时后  方便很多。如:
      module a(
               //input
               clk,
               rst_n,   //globle signal
               wren,
               rden,
               avalon_din,  //related to avalon bus
               sdi,         //related to serial port input
               //output
               data_ready,
               avalon_dout, //related to avalon bus
               ...
              );
      4) 一个模块尽量只用一个时钟,这里的一个模块是指一个module或者是一个en
tity。在多时钟域的设计中涉及到跨时钟域的设计中最好有专门一个模块做时钟域的隔
离。这样做可以让综合器综合出更优的结果。
      5) 尽量在底层模块上做逻辑,在高层尽量做例化,顶层模块只能做例化,禁止
出现任何胶连逻辑(glue logic),哪怕仅仅是对某个信号取反。理由同上。
      6) 在FPGA的设计上禁止用纯组合逻辑产生latch,带D触发器的latch的是允许的
,比如配置寄存器就是这种类型。
      7) 一般来说,进入FPGA的信号必须先同步,以提高系统工作频率(板级)。
       所有模块的输出都要寄存器化,以提高工作频率,这对设计做到时序收敛也
是极有好处的。
      9) 除非是低功耗设计,不然不要用门控时钟--这会增加设计的不稳定性,在要
用到门控时钟的地方,也要将门控信号用时钟的下降沿 打一拍再输出与时钟相与。
               clk_gate_en      --------                    ----
              -----------------|D     Q |------------------|     \ gate_clk
_out
                               |        |         ---------|      )--------
-
                        ------o|>       |         |        |     /
                clk    |       --------           |         ----
              ------------------------------------
      10)禁止用计数器分频后的信号做其它模块的时钟,而要用改成时钟使能的方式
,否则这种时钟满天飞的方式对设计的可靠性极为不利,也大大增加了静态时序分析的
复杂性。如FPGA的输入时钟是25M的,现在系统内部要通过RS232与PC通信,要以rs232_
1xclk的速率发送数据。
        不要这样做:
        always (posedge rs232_1xclk or negedge rst_n)
        begin
            ...
        end
        而要这样做:
        always (posedge clk_25m or negedge rst_n)
        begin
            ...
            else if ( rs232_1xclk == 1'b1 )
            ...
        end
      11)状态机要写成3段式的(这是最标准的写法),即
         ...
         always @(posedge clk or negedge rst_n)
         ...
             current_state <= next_state;
         ...
         always @ (current_state ...)
         ...
         case(current_state)
               ...
               s1:
                  if ...
                    next_state = s2;
               ...
         ...
         always @(posedge clk or negedge rst_n)
         ...
             else
                a <= 1'b0;
                c <= 1'b0;
                c <= 1'b0;            //赋默认值
                 case(current_state)
                     s1:
                         a <= 1'b0;   //由于上面赋了默认值,这里就不用再对b
、c赋值了(b、c在该状态为0,不会产生锁存器,下同)
                     s2:
                         b <= 1'b1;
                     s3:
                         c <= 1'b1;
                     default:
                     ...
        ...

      3.ALTERA参考设计准则
       1) Ensure Clock, Preset, and Clear configurations are free of glitch
es.
       2) Never use Clocks consisting of more than one level of combinatori
al logic.
       3) Carefully calculate setup times and hold times for multi-Clock sy
stems.
       4) Synchronize signals between flipflops in multi-Clock systems when
the setup and hold time requirements cannot be met.
       5) Ensure that Preset and Clear signals do not contain race conditio
ns.
       6) Ensure that no other internal race conditions exist.
       7) Register all glitch-sensitive outputs.
        Synchronize all asynchronous inputs.
       9) Never rely on delay chains for pin-to-pin or internal delays.
       10)Do not rely on Power-On Reset. Use a master Reset pin to clear al
l flipflops.
       11)Remove any stuck states from state machines or synchronous logic.

    其它方面的规范一时没有想到,想到了再写,也欢迎大家补充。


====================================================================================
时序是设计出来的
   我的boss有在华为及峻龙工作的背景,自然就给我们讲了一些华为及altera做逻辑
的一些东西,而我们的项目规范,也基本上是按华为的那一套去做。在工作这几个月中
,给我感触最深的是华为的那句话:时序是设计出来的,不是仿出来的,更不是湊出来
的。

   在我们公司,每一个项目都有很严格的评审,只有评审通过了,才能做下一步的工
作。以做逻辑为例,并不是一上来就开始写代码,而是要先写总体设计方案和逻辑详细
设计方案,要等这些方案评审通过,认为可行了,才能进行编码,一般来说这部分工作
所占的时间要远大于编码的时间。

   总体方案主要是涉及模块划分,一级模块和二级模块的接口信号和时序(我们要求
把接口信号的时序波形描述出来)以及将来如何测试设计。在这一级方案中,要保证在
今后的设计中时序要收敛到一级模块(最后是在二级模块中)。什么意思呢?我们在做
详细设计的时候,对于一些信号的时序肯定会做一些调整的,但是这种时序的调整最多
只能波及到本一级模块,而不能影响到整个设计。记得以前在学校做设计的时候,由于
不懂得设计时序,经常因为有一处信号的时序不满足,结果不得不将其它模块信号的时
序也改一下,搞得人很郁闷。

   在逻辑详细设计方案这一级的时候,我们已经将各级模块的接口时序都设计出来了
,各级模块内部是怎么实现的也基本上确定下来了。

   由于做到这一点,在编码的时候自然就很快了,最重要的是这样做后可以让设计会
一直处于可控的状态,不会因为某一处的错误引起整个设计从头进行。


   版权所有,未经作者允许,禁止用于商业性质的转载;如对此文有疑问或想给作者
提建议请给作者发email:wangdian@tom.com  




EDA论坛 版权所有,严禁拷贝! 转载请联系bbs@edacn.net

=============================================================================================
如何提高电路工作频率

   对于设计者来说,我们当然希望我们设计的电路的工作频率(在这里如无特别说明
,工作频率指FPGA片内的工作频率)尽量高。我们也经常听说用资源换速度,用流水的
方式可以提高工作频率,这确实是一个很重要的方法,今天我想进一步去分析该如何提
高电路的工作频率。

   我们先来分析下是什么影响了电路的工作频率。

   我们电路的工作频率主要与寄存器到寄存器之间的信号传播时延及clock skew有关
。在FPGA内部如果时钟走长线的话,clock skew很小,基本上可以忽略, 在这里为了简
单起见,我们只考虑信号的传播时延的因素。

   信号的传播时延包括寄存器的开关时延、走线时延、经过组合逻辑的时延(这样划
分或许不是很准确,不过对分析问题来说应该是没有可以的),要提高电路的工作频率
,我们就要在这三个时延中做文章,使其尽可能的小。

   我们先来看开关时延,这个时延是由器件物理特性决定的,我们没有办法去改变,
所以我们只能通过改变走线方式和减少组合逻辑的方法来提高工作频率。

   1.通过改变走线的方式减少时延。
   以altera的器件为例,我们在quartus里面的timing closure floorplan可以看到有
很多条条块块,我们可以将条条块块按行和按列分,每一个条块代表1个LAB,每个LAB里
有8个或者是10个LE。它们的走线时延的关系如下:同一个LAB中(最快) < 同列或者同
行 < 不同行且不同列。
   我们通过给综合器加适当的约束(不可贪心,一般以加5%裕量较为合适,比如电路
工作在100Mhz,则加约束加到105Mhz就可以了,贪心效果反而不好,且极大增加综合时
间)可以将相关的逻辑在布线时尽量布的靠近一点,从而减少走线的时延。(注:约束
的实现不完全是通过改进布局布线方式去提高工作频率,还有其它的改进措施)

   2.通过减少组合逻辑的减少时延。
   上面我们讲了可以通过加约束来提高工作频率,但是我们在做设计之初可万万不可
将提高工作频率的美好愿望寄托在加约束上,我们要通过合理的设计去避免出现大的组
合逻辑,从而提高电路的工作频率,这才能增强设计的可移植性,才可以使得我们的设
计在移植到另一同等速度级别的芯片时还能使用。
   我们知道,目前大部分FPGA都基于4输入LUT的,如果一个输出对应的判断条件大于
四输入的话就要由多个LUT级联才能完成,这样就引入一级组合逻辑时延,我们要减少组
合逻辑,无非就是要输入条件尽可能的少,,这样就可以级联的LUT更少,从而减少了组
合逻辑引起的时延。
   我们平时听说的流水就是一种通过切割大的组合逻辑(在其中插入一级或多级D触发
器,从而使寄存器与寄存器之间的组合逻辑减少)来提高工作频率的方法。比如一个32
位的计数器,该计数器的进位链很长,必然会降低工作频率,我们可以将其分割成4位和
8位的计数,每当4位的计数器计到15后触发一次8位的计数器,这样就实现了计数器的切
割,也提高了工作频率。
   在状态机中,一般也要将大的计数器移到状态机外,因为计数器这东西一般是经常
是大于4输入的,如果再和其它条件一起做为状态的跳变判据的话,必然会增加LUT的级
联,从而增大组合逻辑。以一个6输入的计数器为例,我们原希望当计数器计到111100后
状态跳变,现在我们将计数器放到状态机外,当计数器计到111011后产生个enable信号
去触发状态跳变,这样就将组合逻辑减少了。

   上面说的都是可以通过流水的方式切割组合逻辑的情况,但是有些情况下我们是很
难去切割组合逻辑的,在这些情况下我们又该怎么做呢?

   状态机就是这么一个例子,我们不能通过往状态译码组合逻辑中加入流水。如果我
们的设计中有一个几十个状态的状态机,它的状态译码逻辑将非常之巨大,毫无疑问,
这极有可能是设计中的关键路径。那我们该怎么做呢?还是老思路,减少组合逻辑。我
们可以对状态的输出进行分析,对它们进行重新分类,并根据这个重新定义成一组组小
状态机,通过对输入进行选择(case语句)并去触发相应的小状态机,从而实现了将大的
状态机切割成小的状态机。在ATA6的规范中(硬盘的标准),输入的命令大概有20十种
,每一个命令又对应很多种状态,如果用一个大的状态机(状态套状态)去做那是不可
想象的,我们可以通过case语句去对命令进行译码,并触发相应的状态机,这样做下来
这一个模块的频率就可以跑得比较高了。

   总结:提高工作频率的本质就是要减少寄存器到寄存器的时延,最有效的方法就是
避免出现大的组合逻辑,也就是要尽量去满足四输入的条件,减少LUT级联的数量。我们
可以通过加约束、流水、切割状态的方法提高工作频率。

===================================================================================
做逻辑的难点在于系统结构设计和仿真验证
   刚去公司的时候BOSS就和我讲,做逻辑的难点不在于RTL级代码的设计,而在于系统
结构设计和仿真验证方面。目前国内对可综合的设计强调的比较多,而对系统结构设计
和仿真验证方面似乎还没有什么资料,这或许也从一个侧面反映了国内目前的设计水平
还比较低下吧。

   以前在学校的时候,总是觉得将RTL级代码做好就行了,仿真验证只是形式而已,所
以对HDL的行为描述方面的语法不屑一顾,对testbench也一直不愿意去学--因为觉得画
波形图方便;对于系统结构设计更是一点都不懂了。

   到了公司接触了些东西才发现完全不是这样。

   其实在国外,花在仿真验证上的时间和人力大概是花在RTL级代码上的两倍,现在仿
真验证才是百万门级芯片设计的关键路径。仿真验证的难点主要在于怎么建模才能完全
和准确地去验证设计的正确性(主要是提高代码覆盖),在这过程中,验证速度也是很
重要的。

   验证说白了也就是怎么产生足够覆盖率的激励源,然后怎么去检测错误。我个人认
为,在仿真验证中,最基本就是要做到验证的自动化。这也是为什么我们要写testbenc
h的原因。在我现在的一个设计中,每次跑仿真都要一个小时左右(这其实算小设计)。
由于画波形图无法做到验证自动化,如果用通过画波形图来仿真的话,一是画波形会画
死(特别是对于算法复杂的、输入呈统计分布的设计),二是看波形图要看死,三是检
错率几乎为零。

   那么怎么做到自动化呢?我个人的水平还很有限,只能简单地谈下BFM(bus funct
ion model,总线功能模型)。

   以做一个MAC的core为例(背板是PCI总线),那么我们需要一个MAC_BFM和PCI_BFM
及PCI_BM(PCI behavior model)。MAC_BFM的主要功能是产生以太网帧(激励源),随
机的长度和帧头,内容也是随机的,在发送的同时也将其复制一份到PCI_BM中;PCI_BFM
的功能则是仿PCI总线的行为,比如被测收到了一个正确帧后会向PCI总线发送一个
请求,PCI_BFM则会去响应它,并将数据收进来;PCI_BM的主要功能是将MAC_BFM发送出
来的东西与PCI_BFM接收到的东西做比较,由于它具有了MAC_BFM的发送信息和PCI_BFM的
接收信息,只要设计合理,它总是可以自动地、完全地去测试被测是否工作正常,
从而实现自动检测。

   华为在仿真验证方面估计在国内来说是做的比较好的,他们已建立起了比较好的验
证平台,大部分与通信有关的BFM都做好了,听我朋友说,现在他们只需要将被测放
在测试平台中,并配置好参数,就可以自动地检测被测功能的正确与否。

   在功能仿真做完后,由于我们做在是FPGA的设计,在设计时已经基本保证RTL级代码
在综合结果和功能仿真结果的一致性,只要综合布局布线后的静态时序报告没有违反时
序约束的警告,就可以下到板子上去调试了。事实上,在华为中兴,他们做FPGA的设计
时也是不做时序仿真的,因为做时序仿真很花时间,且效果也不见得比看静态时序分析
报告好。

   当然了,如果是ASIC的设计话,它们的仿真验证的工作量要大一些,在涉及到多时
钟域的设计时,一般还是做后仿的。不过在做后仿之前,也一般会先用形式验证工具和
通过静态时序分序报告去查看有没有违反设计要求的地方,这样做了之后,后仿的工作
量可以小很多。

   在HDL语言方面,国内语言很多人都在争论VHDL和verilog哪个好,其实我个人认为
这并没有多大的意义,外面的大公司基本上都是用verilog在做RTL级的代码,所以还是
建议大家尽量学verilog。在仿真方面,由于VHDL在行为级建模方面弱于verilog,用VH
DL做仿真模型的很少,当然也不是说verilog就好,其实verilog在复杂的行为级建模方
面的能力也是有限的,比如目前它还不支持数组。在一些复杂的算法设计中,需要高级
语言做抽象才能描述出行为级模型。在国外,仿真建模很多都是用System C和E语言,用
verilog的都算是很落后的了,国内华为的验证平台好像是用System C写。

   在系统结构设计方面,由于我做的设计还不够大,还谈不上什么经验,只是觉得必
须要具备一些计算机系统结构的知识才行。划分的首要依据是功能,之后是选择合适的
总线结构、存储结构和处理器架构,通过系统结构划分要使各部分功能模块清晰,易于
实现。这一部分我想过段时间有一点体会了再和大家分享,就先不误导大家了。

作者: sdlj8051   发布日期: 2006-12-28

国人所谓多人用VHDL的原因.由于有一批40-50之间的教授以前从国外回来所指导的国内学生所导致的.市面上有部分书还是这些人写的.因为他写的都是VHDL,学生也学以于用.结果就生产成大家所看到的国内人偏用VHDL为多.
而在实际设计中,由于中国台湾,和国外公司近些进驱国内,成立的一些芯片设计公司中,却很多就是使用Verilog多.如果你是内业人就会知道这一点.还有就,这些公司中,都会要求设计工程会用Verilog来设计,以配合整体的团队.当然由于行业的使用较多的原因,包括现在的一EDA设计部门或公司也将导致Verilog使用的内来人事增多的原因.
现在有很学过VHDL的同事也转为使Verilog了,这是一个现实的情况.无他,只因工作上在需要.
所以,请不要以书店上的书的多少来看国内的市场...,真正在使用的还是实际行业情况....

作者: sdlj8051   发布日期: 2007-01-06

<> 评价:★★★★★

褚振勇 翁木云 西安电子科技大学出版社 2002年7月 ISBN 7-5606-1132-X 30.00

介绍altera器件,MaxplusII,QuartusII,FPGAexpress,Leonardo等软件的使用。书中还讨论了数的表示方法,时钟设计等常见问题,本书收录了许多设计实例。 随书送一张光盘,内有altera的数据手册及QuartusII,Leonardo等软件。详细内容参见本书目录。这是一本近两年来比较全面系统介绍PLD/FPGA最新技术发展的书籍。值得推荐!


《CPLD/FPGA的开发与运用》 评价:★★★★★

徐志军等 电子工业出版社 2002年7月 7-5053-6909-1/TN.1457 29.00元

介绍Xilinx的器件和Foundation的使用。这本后半部分有许多非常有启发意义的例子,例如小数分频原理,实现位同步,CRC校验,MCU与PLD的接口等,对提高PLD的设计水平和拓宽设计思路非常有帮助。详细内容参见本书目录。 值得推荐!


《VHDL 数字系统设计与高层次综合》 评价:暂无

林敏等编著 2002-01 5053-7094-4/TN.1479 33.00元



《数字系统设计与Verilog HDL》 评价:暂无

王金明等编 电子工业出版社 2002-06 5053-6912-1/TN.1460 28.00元


《CPLD 系统设计技术入门与应用》(含光盘) 评价:暂无

黄正瑾等 电子工业出版社 2002-03 5053-7501-6/TN.1563 40.00元


《可编程逻辑设计技术及应用》 评价: 暂无

高书莉 罗朝霞 人民邮电出版社 2001年9月 ISBN 7-115-09624 35 元

本书配有多媒体学习软件(光盘)



《Verilog HDL 硬件描述语言》 评价:暂无
(美)贝斯克(Bhasker,J.) 机械工业出版社 2001-7 7-111-07890-X 19。00


《VHDL与数字电路设计》 评价:★★★★★

卢毅 赖杰 科学出版社 2001年4月 7-03-009042-X/TP.1477 49.00

这本书由简单的例子入手,由浅入深的介绍VHDL常见语法。整本书着重于实际应用,不去深纠复杂和冷僻的语法,风格轻松活泼,阅读时不会觉得枯燥,联想到国内大多数呆板枯燥的VHDL读物,不得不佩服两位台湾作家的功力。此书是目前我们见到的最优秀的VHDL入门书籍之一,本书附一张光盘,收录了书中提到的所有例子。详情见本书目录 值得推荐!


《用 VHDL 设计电子线路》 评价:暂无


边计年等翻译 清华大学出版社 2001-4 7-302-03932-1 42.00


《可编程逻辑器件原理、开发与应用》 评价:暂无

赵曙光 西安电子科技大学出版社 2001-04 ISBN 7-5606-0900-7 22.00 元


《VHDL语言100例详解——北京理工大学ASIC研究所》 评价:★★★

北京理工大学ASIC研究所 清华大学出版社,2001年4月版 7-900625-02- 52.00元

里面有不VHDL的例子(但比较简单),对很多概念的理解都有帮助。不过许多例子只适合仿真,不能用于PLD实现,这一点要千万注意。书中自带了一张光盘,有一个叫Talent的VHDL模拟器。      



《VHDL硬件描述语言与数字逻设计》 评价:★★★★

侯伯亨  西安电子科技大学出版社 2001-04 ISBN 7-5606-0534-6 20.80 元

已Altera的产品为载体,介绍VHDL语言。基本概念清楚,比较适合初学者。


《VHDL 程序设计》(第二版) 评价:暂无

曾繁泰等 清华大学出版社 2001-3 7-302-03896-1 37.00

有网友反映本书的一个例子有错误




《数字系统设计与PLD应用技术》 评价:暂无

蒋璇 电子工业出版社 2001-02 5053-6165-1/TP.3305 25.00元



《VHDL入门与应用》 评价:★★★

陈雪松 滕立中 人民邮电出版社 2000.12  ISBN7-115-08950-7/TP.1943 RMB32.00

基本概念清楚,结合实例讲解,例子较多,适合初学者阅读,书中还介绍了MaxplusII和Quartus软件。


《VHDL编程与仿真》

王毅平 张振荣 人民邮电出版社 2000年7月 ISBN 7-115-08641 30 元


《CPLD技术及应用》 评价:★★★★

宋万杰等 西安电子科技大学出版社 2000-06 ISBN7-5606-0769-1/TP.0395  RMB25.00

介绍Altera软硬件产品,前半部以翻译Databook为主,后半部的提高篇是作者经验的总结,值得一看

《大规模可编程逻辑器件及其应用》 评价:★★★

徐志军等 电子科技大学出版社 2000年11月 ISDN7-81065-042-4/TP.266  21.00元

印刷质量略感粗糙,但书写的比较全面和实用,同时介绍Altera,Xilinx,Lattice/Vantis三家公司的硬件和开发软件,对于全面了解市场上的PLD/FPGA产品很有帮助



《数字电路设计与Verllog HDL》评价:暂无

张亮 人民邮电出版社 2000年10月 ISBN 7-115-08770 35 元


《用VHDL设计电子线路》 评价:暂无

乔长阁 薛宏熙 翻译 清华大学出版社 2000.8 ISBN7-302-03932-1/TP.2300 RMB42.00

比较详细和系统,有不少例子,本书的一个特点是每章都有练习题和部分答案

《PLD器件与EDA技术》 评价:★★★

李冬梅   北京广播学院出版社 2000年1月 ISBN 7-81004-870-8/G.509   22.00元

以Altera公司产品和软件为主,分四章介绍了PLD结构,MaxplusII,AHDL,VHDL等,其中VHDL部分很简洁,只介绍最基本语法,一看即懂,是入门性读物。



《FPGA原理及应用》 评价:★★★

赵雅兴 天津大学出版社 1999  RMB19.00

介绍Altera软硬件产品,软件部分写的比较清楚,硬件部分有些内容略旧,AHDL讲的非常详细,是学习AHDL的好教材



《VHDL硬件描述语言与数字逻辑电路设计——电子工程师必备知识》评价:★★★★

西电出版社,1999年修订版

书名虽然是长了一点,但是是一本好书,尤其是修订版,改正了第一版不少的错误,值得一读。



《可编程逻辑系统的VHDL设计技术》 评价:★★★★★

Kevin Skahill 东南大学出版社1998.9 ISBN7-81050-379-0/TP.56 RMB32.00

以Cypress的PLD产品为载体,对可编程逻辑器件的基本概念及原理讲的很清楚,由浅入深的讲述了VHDL,是一很好的VHDL和可编程逻辑器件入门和进阶教材。值得推荐。



《VHDL简明教程》 评价:★

王小军 清华大学出版社 1997.10 ISBN7-302-02647-5/TP.1365 RMB19.50

书不厚,是比较简明的VHDL教程,但基本概念讲述不多,初学者初次阅读可能不得要领



《ALTERA可编程器件及其应用》 评价:★★★★

刘宝琴等 清华大学出版社 1995    ISBN 7-302-01804-9/TP.803 RMB40.00

最早介绍Altera产品的中文书之一,内容严谨,以翻译为主,关于如何消除毛刺,如何提高设计的稳定性讲的比较好

作者: sdlj8051   发布日期: 2007-01-06

这就比较多了,象如Cadence的NC-VHDL、NC-Verilog、Verilog-XL;Altera的Maxplus2和Quartus2的自带仿真器;Mentor的Modelsim;Xilinx的foundition自带的仿真器;Aldec的Active;SYNOPSYS的VCS、VSS等。
   不过我认为假如是用工作站的话,用NC-VHDL、NC-Verilog、Verilog-XL都是不错的选择;但是用PC的话专用仿真工具Modelsim和Active都不错;在国内Modelsim用的更多一点吧!就我自己的感觉来说;它的前仿和后仿都不错,而且好上手。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条