老古开发网首页
导航:老古开发网首页文章索引文章分类EDA/IC设计→[验证方法学浅谈 --- 验证工具VHDL实例]
| -文章搜索 - 最新文章 - |

验证方法学浅谈 --- 验证工具VHDL实例

发布时间:2006年7月27日 点击次数:1423
来源:   作者:
 
作者: deve

      改善验证效率和可靠性的一个方法是自动化,自动化工具很多,有些是功能验证必不可少的,例如仿真器,有些工具可以代替人完成最繁琐的工作,并能提高功能验证的可信度,例如linting和代码覆盖率工具。

      Linting tool
      Linting
      tool根据设计的RTL描述代码结构做静态分析,推断描述代码存在的逻辑错误,但无法决定描述代码是否能够现实设计要求的功能。linting
      tool可用于强制代码遵从编写规范,由于Linting工具是静态验证工具,因此运行速度会,可以节省时间。其缺点是多疑,误报率高,产生大量不存在的错误警告,因此要对不存在的错误警告仔细过滤,注意避免滤出真实的错误警告,变量名最好符合命名惯例,有助于过滤。
      由于Verilog不是强类型语言,使用Linting tool非常有用,可以检测race conditions
      及数据宽度不匹配,可保证Verilog正确描述数据处理过程,避免造成数据的弃位及增位现象,这种错误通过仿真并不一定发现。因为verilog
      语言的特点, 对Verilog描述的设计,Linting tool是一种有益的验证工具。因为VHDL 语言的特点,对VHDL使用Linting
      tool的作用不如对Verilog语言那么明显,但Linting tool还是能发现一些潜在的问题。

      仿真器
      仿真器通过忽略及简化设计的物理特性,对设计的实现进行模拟。仿真器通过执行RTL级的设计描述,模拟设计的物理实现,它无法确定设计真实的物理实现与设计描述之间的区别。仿真的结果取决于设计描述是否准确反映了设计的物理实现。仿真器不是一个静态工具,需要Stimulus和Reponse。Stimulus由模拟设计工作环境的testbench
      产生,Reponse为仿真的输出,由设计者确定输出的有效性。
      仿真器的类型分为3种类型,Event-driven Simulator(事件驱动仿真器)、Cycle-Based
      Simulator(基于周期的仿真器)、Co-Simulator(联合仿真器),分别介绍如下:

      1.Event-driven Simulator
      将信号的变化定义为一个事件,该事件驱动仿真执行,事件驱动仿真器能准确地模拟设计的时序特征,可模拟异步设计。时间驱动仿真器的工作过程如图9所示。

      2.Cycle-based simulator
      基于周期的仿真器的特点是忽略设计的时序,假定所有flip_flop的setup和hold时间都满足要求,在一个时钟周期,信号仅更新一次,从而信号必须与时钟同步。仿真速度比事件驱动仿真器高。基于周期的仿真器的工作过程步骤是,首先编译电路,将组合逻辑压缩成单独的表达式,根据该表达式可确定flop的输入,然后执行仿真,遇到时钟的有效沿,
      flip_flop 的值被更新。基于周期的仿真器的缺点是不能仿真异步电路,不能进行验证设计的时序。

      3.Co-Simulators
      联合仿真器对同一设计各个部分,分别用不同的仿真器仿真,如即含有同步设计又含有异步设计的电路,可用Event-driven
      Simulator对异步设计仿真,用Cycle-based Simulator对异步设计仿真。联合仿真器中各个Simulator
      的操作是locked-step的,类似于电路的pipeline
      操作。其缺点是由于不同仿真器之间需要同步和相互通讯,Co-Simulators的仿真速度受到最慢Simulator的限制,因而影响仿真器的性能,而且在各仿真器传送的信息会产生多义性。

      4.Hardware modeler
      硬件模拟器创建一个物理芯片的逻辑模型,向仿真器提供该芯片的行为信息,芯片和仿真器的通信过是首先将物理芯片插入硬件仿真器,然后格式化来自仿真器的数据,作为该芯片的输入,最后将该芯片输出的数据,包含时序信息,送往仿真器。硬件模拟器可以提供很高的仿真速度,但是设备价格高昂。需要注意的是,硬件模拟器做的仍然是功能仿真,而不是时序仿真,因为芯片是降频运行的。图10为硬件模拟器系统框图

      波形观察器
      仿真调试的过程中波形观察器是必不可少的工具,它能提供信号状态和变化的详细信息,但是波形观察器不能用来判断一个设计是否通过验证,因为波形是不可重复的且无法用于递归仿真。
      波形观察器的优点是可以观察仿真的整个过程,有利于设计及testbench
      的诊断,缺点是由于要输出波形,影响了仿真的速度,因此应尽可能限制在波形图中显示的信号数量及时间长度。
      波形观察器的另一个作用是波形比较,主要用于redesign,保证设计具有cycle-accurate的后向兼容性。在波形比较中,不能仅看表象,需仔细分析,确认波形之间存在的差别是有意义的。例如,有时我们仅关心波形transitions之间的相对位置,而不关心它的绝对位置。图11为波形观察器的工作流程

      代码覆盖率
      代码覆盖率(Code Coverage)可以指示Verilog代码描述的功能多少被验证。代码覆盖率有三种计算方法,第一种是Statement
      coverage(block
      coverage),即语句覆盖率,指示验证过程中,设计代码被执行的语句数量。有时,我们会添加一些没有具体设计意义的语句,仅用于监视代码执行过程中的异常或标注一些设计中的假设。这些语句可不参与Statement
      coverage的统计;第二种是Path
      coverage,即分支覆盖率,在设计中往往通过分支控制语句来完成对功能的控制,我们将所有分支控制语句的控制状态进行组合,产生一定数量语句执行path,Path
      coverage指示所有的语句执行path是否都得以执行。第三种是Expression
      Coverage,即表达式覆盖率,指示分支控制语句的控制条件是否全部有效。

      需要注意的是百分之百的Code Coverage仅仅表示了代码都被执行了,不能证明设计的正确性。代码覆盖率可以用于衡量验证工作是否完成。


欢迎进入老古论坛进行讨论
[EDA/IC设计] 相关文章:
什么是验证环境? --- 验证的流程VHDL实例
简介:
首先我们来解决第一个问题:什么是验证环境。在解释这个概念之前,讲解一下验证的流程是必须的。对很多人而言是老调重谈了。那么就可以略过这一节。 我们知道验证分为:编写testbench,利用仿真工具进行功能仿真,利用检测覆盖率工具进行代码覆盖率分析,进行loose的综合,等价性检测,门级仿真。当然在这些步骤之中,都需要同时写就各个阶段的文档。 &nbs......

学写 Testbench --- 结构篇VHDL实例
FPGA中双向端口的设计问题
和可靠性有关的几个概念
FPGA中的冒险现象
关于时钟的讨论---3
关于时钟的讨论---2
提高同步系统的运行速度
assura RCX 简介(转)
用MAX+PLUSⅡ开发Altera CPLD
 
下一个:[EDA/IC设计]验证方法学浅谈 --- 什么是验证VHDL实例
简介:
写在前面 验证的内涵和外延都非常大,常说的验证是指功能验证,占了大部分的工作量,因此大多数时候,人们往往把验证和功能验证等同使用,这里谈的主要也是功能验证。 验证对于IC设计、FPGA设计的重要性无须赘述,现在验证已经成为IC设计技术中,发展最为迅速的领域。对验证有充分的理解和经验成为项目成功必不可少的因素,在国外很多IC设计公司,丰富的IC验证经验是成为项目经理所必须得。 &nbs......
 

上一个:[新闻热点]Atmel推出14引脚和16引脚低功耗单周期核心8051微控制器

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:10分钟 执行时间:16毫秒