⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fpga验证.txt

📁 fpga设计大礼包
💻 TXT
📖 第 1 页 / 共 2 页
字号:
   writeburst128; 
   writeburst128; 
   read_enable = 1; //读出一个数,Full信号应该变低
   writeburst128;   //同时读写,检查FIFO操作是否正确
   read_enable = 0; //读操作结束
   endwriteburst;   //写操作结束
   delay;           
   readburst128;    //连续读512次,Empty信号应在读出511个数后变高
   readburst128; 
   readburst128; 
   readburst128; 
   endreadburst;
end
这段程序首先延迟5个时钟周期,等初始化完成之后再开始验证工作。验证时,首先写入512个数,使用波形观察器可以检查写入的过程是否正确,以及Full信号在写入511个数后是否变高;然后read_enable = 1,读出一个数,Full信号应该变低,这样写操作和Full信号的验证就基本完成了;程序接着也启动了写操作,由于此时read_enable仍然为高,即读写同时进行,这是对实际情况的模拟,可以对FIFO的功能进行更严格的验证;最后,连续读FIFO 512次,用波形观察器检查读操作是否正确,Empty信号是否在读出511个数后变高,如果这些操作都是正确的,那么FIFO的功能就基本正确了。
需要注意的一点是,以上的程序是不可综合的,因为不是RTL级描述,而是行为级描述(Behavioral Description)。行为级描述的特点是直接描述对象的功能,具有比较高的抽象层次,开发、运行速度都比RTL代码要会,因此testbench都是用行为级描述写的。关于行为级描述的特点、写法以后将有专门的章节论述。
这个testbench的特点是,输入激励由testbench产生,输出响应的检查人工完成,这样的testbench编写相对容易,可以加快开发速度,作为开发人员自己验证是非常好的选择。有些testbench能完成输入激励和输出检查,不用观察波形也能完成验证工作,这样的testbench具有更高的自动化程度,使用方便,可重复性好,当设计比较复杂而且团队中有专门的验证工程师时,一般会有验证工程师建立一套这样的testbench,用于验证开发工程师的RTL级代码,如果发现问题,开发工程师修改后在testbench再运行一次所花的时间非常少,开发复杂项目时这样做可以比用波形观察器节省很多时间。
3.总结
验证一般要通过写testbench实现,从《FPGA验证》第一篇我们知道,testbench要完成向DUT施加激励和检查DUT相应是否正确的功能,这就要求我们非常清楚待验证模块(DUT)的功能,这样才知道需要验证什么、如何施加激励和如何检查响应是否正确。写testbench时, 首先要列出需要验证的功能,让后再编写testbench,这样可以做到有的放矢,避免遗漏。

思考:
1.Testbench中有“write_enable = #2  1”一行代码,为什么要2ns的延迟?

第三篇 验证工具介绍
  我们做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设计中用得比较多。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -