其实我们在做FPGA设计或者IC设计的时候,都会需要做FPGA验证,降低风险,在做FPGA或者IC开发会用到很多工具,包括代码输入、仿真、综合、布局布线、时序分析等各种各样工具,熟悉这些工具是成功完成设计的关键,因为我们的设计思想需要通过这些工具来实现,只有清楚的知道工具的用法、如何设置参数、如果检查工具的输出结果,才能使设计者的想法变为显示,对验证来说也是如此。
验证的工具很多,有些是验证必不可少的,例如仿真器,有些工具可以代替人完成最繁琐的工作,并能提高功能验证的可信度,例如linting和代码覆盖率工具。这里我们介绍常用验证工具的特点和用途,以便为工具的使用提供参考。
1)代码检查工具
常用的代码检查工具有nlint等,nlint根据设计的RTL描述代码结构做静态分析,推断描述代码存在的逻辑错误,但无法决定描述代码是否能够现实设计要求的功能。代码检查工具可用于强制代码遵从编写规范,由于代码检查工具是静态验证工具,因此运行速度快,可以节省时间。由于Verilog不是强类型语言,使用代码检查工具非常必要,可以检测race conditions 及数据宽度不匹配,可保证Verilog正确描述数据处理过程,避免造成数据的弃位及增位现象,这种错误通过仿真并不一定发现。因为verilog 语言的特点, 对Verilog描述的设计,Linting tool是一种有益的验证工具。因为VHDL 语言的特点,对VHDL使用Linting tool的作用不如对Verilog语言那么明显,但Linting tool还是能发现一些潜在的问题。
2)仿真器
仿真器是常用的验证工具,它通过忽略及简化设计的物理特性,对设计的实现进行模拟。仿真器通过执行RTL级的设计描述,模拟设计的物理实现,它无法确定设计真实的物理实现与设计描述之间的区别。仿真的结果取决于设计描述是否准确反映了设计的物理实现。仿真器不是一个静态工具,需要编写激励和检查输出响应。激励由模拟设计工作环境的testbench 产生,响应为仿真的输出,由设计者确定输出的有效性。
仿真器的类型分为3种类型,Event-driven Simulator(事件驱动仿真器)、Cycle-Based Simulator(基于周期的仿真器)、Co-Simulator(联合仿真器),分别介绍如下:
1.Event-driven Simulator
事件驱动仿真器是最常用的仿真器,例如modelsim/VCS等都是事件驱动仿真器,它将信号的变化定义为一个事件,该事件驱动仿真执行,事件驱动仿真器能准确地模拟设计的时 序特征,可模拟异步设计。
2.Cycle-based simulator
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
硬件模拟器创建一个物理芯片的逻辑模型,向仿真器提供该芯片的行为信息,芯片和仿真器的通信过程是首先将物理芯片插入硬件仿真器,然后格式化来自仿真器的数据,作为该芯片的输入,最后将该芯片输出的数据,包含时序信息,送往仿真器。硬件模拟器可以提供很高的仿真速度,但是设备价格高昂。需要注意的是,硬件模拟器做的仍然是功能仿真,而不是时序仿真,因为芯片是降频运行的。
3)波形观察器
仿真调试的过程中波形观察器是必不可少的工具,它能提供信号状态和变化的详细信息,但是波形观察器不能用来判断一个设计是否通过验证,因为波形是不可重复的且无法用于递归仿真。
波形观察器的优点是可以观察仿真的整个过程,有利于设计及testbench 的诊断,缺点是由于要输出波形,影响了仿真的速度,因此应尽可能限制在波形图中显示的信号数量及时间长度。波形观察器的另一个作用是波形比较,主要用于redesign,保证设计具有cycle-accurate的后向兼容性。在波形比较中,不能仅看表象,需仔细分析,确认波形之间存在的差别是有意义的。例如,有时我们仅关心波形transitions之间的相对位置,而不关心它的绝对位置。
以上是比较常用的验证工具,另外可能用到的验证工具有:形式验证工具、静态时序分析工具以及Vera、SpecmanE、SystemC等高级语言验证工具,这些工具在复杂的IC/FPGA设计中用得比较多。
|