信息与通信第8章 仿真与Testbench设计课件_第1页
信息与通信第8章 仿真与Testbench设计课件_第2页
信息与通信第8章 仿真与Testbench设计课件_第3页
信息与通信第8章 仿真与Testbench设计课件_第4页
信息与通信第8章 仿真与Testbench设计课件_第5页
已阅读5页,还剩107页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章仿真与Testbench设计第8章仿真与Testbench设计本章主要内容仿真概述Testbench设计仿真实例Testbench结构化本章主要内容仿真概述8.1仿真概述对仿真器进行优化,一般基于两种方式:周期驱动和事件驱动。8.1仿真概述对仿真器进行优化,一般基于两种方式:周期驱动8.1.1周期驱动周期驱动是基于时钟周期的仿真模型。图8–1周期驱动模型图8.1.1周期驱动周期驱动是基于时钟周期的仿真模型。周期驱动的仿真器只在乎Q2的输出,即每个时钟有效沿到来时的输入和输出,时钟周期之内的延时全部不考虑,S1和S2之间的变化和时序完全被忽略——仿真器假定所有的触发器的建立时间和保持时间均满足条件。这种模型只能应用于同步模型,如果设计中包含了锁存器或者多时钟域的情况,周期驱动的仿真器模型都不能适用。如果需要应用的话,只能使用静态时延分析来实现。周期驱动的仿真器只在乎Q2的输出,即每个时钟有效沿到来时的输8.1.2事件驱动目前逻辑仿真最普遍的形式就是事件驱动。事件驱动仿真模型有个重要特点:一是如果输入不变化,输出就不会变化,因为输入不变化就不需要仿真;二是一旦输入发生变化,不管输出有没有变化,仿真器都会执行仿真。8.1.2事件驱动目前逻辑仿真最普遍的形式就是事件驱动。图8–2事件驱动模型图[信息与通信]第8章仿真与Testbench设计课件仿真器在内部会维护一些信息用来记录某些时刻要被激活的事件。而每个输入都是一些离散的事件。当输入a发生变化的时候,标记为T1,仿真器会检查这个输入连接到了何处,检测到了一个5ns的与门,仿真器会在T1之后的5ns时候(T2)安排一个与门输出的时间。接着仿真器检查当前时刻T1是否还有其他动作需要执行。b就是下一个事件,发生在T2时刻,也就是T2的边沿。然后仿真器检查b连接到何处,是一个4ns的缓冲器。同样仿真器会在T2时候后的4ns时刻(T3)安排一个缓冲器的输出。同样仿真器再次检测下一个事件,直到由输入端a的首次变化触发所引起的所有事件都被执行完毕为止。事件驱动的优点在于它可以处理任何形式的设计,包括同步和异步逻辑、锁存器、组合逻辑反馈回路等等,并且具有极好的设计可见性,便于调试。但是它最大的缺点就是运算量大、速度非常慢。仿真器在内部会维护一些信息用来记录某些时刻要被激活的事件。而8.1.3混合语言仿真20世纪60年代末和170年代初出现的第一代事件驱动的仿真器是基于仿真基本元件的、采用标准的文本编辑器在门级网表级输入设计,同样采用文本激励语言作为测试平台,仿真器使用网表建立电路模型,然后将激励加入到这个模型中,并将结果输出到另外一个文本文件中。要解决混合语言仿真有几种方式:一是先将其中的一种语言所写的设计翻译成另外一种语言,然后再进行仿真二是在仿真器中使用多核——一个用来进行VHDL仿真,另外一种进行VerilogHDL仿真。三是采用单核仿真器,同时支持多种语言8.1.3混合语言仿真20世纪60年代末和170年代初出现8.2仿真器的选择一是选择的仿真器必须能够支持混合语言仿真。二是仿真器的性能需要满足设计的要求。三是仿真器需要有一个良好的调试环境。最后还要考虑的是仿真器的代码覆盖能力。代码覆盖能力包括很多种,如:基本代码覆盖率分支覆盖率条件覆盖率表达式覆盖率状态覆盖率功能覆盖率断言/属性覆盖率8.2仿真器的选择一是选择的仿真器必须能够支持混合语言仿真8.3Modelsim简介与仿真8.3.1Modelsim简介Mentor公司是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。Modelsim的主要特点有:RTL和门级优化,本地编译结构,编译仿真速度快,跨平台跨版本仿真;单内核VHDL和Verilog混合仿真;源代码模版和助手,项目管理;集成了性能分析、波形比较、代码覆盖、数据流ChaseX、SignalSpy、虚拟对象VirtualObject、Memory窗口、Assertion窗口、源码窗口显示信号值、信号条件断点等众多调试功能;8.3Modelsim简介与仿真8.3.1ModelsiC和Tcl/Tk接口,C调试;直接支持SystemC,和HDL任意混合;支持SystemVerilog的设计功能;对系统级描述语言如SystemVerilog、SystemC、PSL的最全面支持;ASICSignoff。ModelSim分几种不同的版本:SE、PE、DE和OEM,其中SE是最高级的版本,而集成在

Actel、Atmel、Altera、Xilinx以及Lattice等FPGA厂商设计工具中的均是其OEM版本。C和Tcl/Tk接口,C调试;8.3.2功能仿真在桌面点击Modelsim图标,或者在开始->所有程序中选择Modelsim,如下图所示。图8–3Modelsim界面8.3.2功能仿真在桌面点击Modelsim图标,或者在开建立仿真工程。图8–4建立仿真工程界面建立仿真工程。弹出一个对话框,选择”“AddExistingFile””,添加测试平台和被测文件到仿真工程中。点击“OPEN”,然后点击“OK”。图8–5添加仿真文件界面弹出一个对话框,选择”“AddExistingFile”关掉对话框。图8–6Modelsim仿真参数设置关掉对话框。选中测试程序,然后点击“project->Setting”来选择Verilog仿真器。点击“OK”。图8–7Modelsim仿真语言选择选中测试程序,然后点击“project->Setting编译。图8–8编译界面编译。选择“”Simulation->RuntimeOptions””,可以选择所需要的显示,图8–9Modelsim仿真格式选择选择“”Simulation->RuntimeOpti选择“Simulation->StartSimulation”。图8–10仿真选择“Simulation->StartSimulat运行后的结果如下图8–11仿真结果界面运行后的结果如下在工作区窗口选择顶层仿真文件,点击“Add->Wave->SelectedInstance”图8–12添加仿真波形在工作区窗口选择顶层仿真文件,点击“Add->Wave-点击“Simulate->Run-all”图8–13仿真运行界面点击“Simulate->Run-all”点击wave查看仿真波形图8–14查看仿真波形点击wave查看仿真波形点击“ContinueRun”工具条可以继续仿真到下一个$stop图8–15继续仿真界面点击“ContinueRun”工具条可以继续仿真到下一个$s设置Cursor图8–16Cursor设置设置Cursor图8–17时延量测[信息与通信]第8章仿真与Testbench设计课件保存波形文件图8–18保存波形文件保存波形文件8.3.3时序仿真时序仿真总体思路与功能仿真类似,只是时序仿真需要考虑逻辑单元时延和布局布线时延,因此需要借助不同公司的开发平台生成相应的静态时延报告,并且结合相关的器件模型来进行仿真。时序仿真比功能仿真更加精确,但是花费时间比较久。以Lattice公司的器件为开发平台来讲述怎样进行时序仿真。生成.sdf文件。通过ispLEVER建立一个工程文件,点击“GenerateTimingSimulationFiles”生成.vo和.sdf文件。把这两个文件加到仿真文件夹中。关掉ispLEVER。打开Modelsim并建立一个新的仿真工程。建库。例如设计采用xo系列的库,在图8-19显示的Modelsim的界面的命令框中键入下面的两个命令:Vlibmachxo8.3.3时序仿真时序仿真总体思路与功能仿真类似,只是时序Vlog–workmachxoC:/Lattice/ispLever72/cae_library/simulation/verilog/machxo/*.

v(xo系列在ispLEVER下的路径,不同的安装有不同的路径)图8–19建库界面Vlog–workmachxoC:/Lattice/i编译点击“Compile->CompileAll”。点击“Simulate->StartSimulation”,出现一个配置窗口。点击SDF按钮,然后点击“Add”按钮图8–20添加.sdf文件界面编译点击“Compile->CompileAll”。选择.sdf文件。在“ApplytoRegion”区域写入/UUT。添加库。图8–21添加库界面选择.sdf文件。在“ApplytoRegion”区域点击Design键,从工作文件夹中选择仿真程序,点击“OK”按钮。后续的方式与功能仿真相同。点击Design键,从工作文件夹中选择仿真程序,点击“OK”8.4Testbench设计Testbench的结构和RTL设计的结构相似,只是由于Testbench和所要仿真的程序构成的是一个封闭的系统,所以不存在输入输出列表。另外所有可以综合的Verilog语言都可以用来进行仿真设计。Testbench并不会生成一个实实在在的电路尽量采用抽象层次比较高的语言来设计Testbench不仅可以提高设计的效率,而且可以提高仿真的效率。8.4Testbench设计Testbench的结构和RT8.4.1时钟时钟是设计Testbench中的一个最基本的元素。时钟可以分为很多种,包括无限循环时钟和有限个周期的时钟信号,因此时钟的生成方式也各式各样。无限循环时钟信号的产生请参考例8-1到例8-3有限周期的时钟信号的产生请参考例8-4同频异相时钟信号的产生请参考例8-58.4.1时钟时钟是设计Testbench中的一个最基本的8.4.2值序列值序列是Testbench中经常使用到的一种信号形式,它可以描述有限个规则或者不规则的数据形式。时钟信号是一种特殊的值序列。值序列有离散值序列和周期值序列之分。值序列的产生可以采用阻塞赋值和非阻塞赋值,但是结果完全不同。8.4.2值序列值序列是Testbench中经常使用到的一离散值序列图8–22值序列波形图离散值序列采用非阻塞赋值会出现的一种值序列图8–23非阻塞赋值的值序列波形图采用非阻塞赋值会出现的一种值序列重复值序列图8–24重复值序列示意图重复值序列8.4.3复位异步复位信号:直接通过一个值序列来产生异步复位信号,具体设计请参考例8-6同步复位信号:同步复位信号需要在时钟的作用下才能产生。同步设计需要满足建立时间和保持时间的要求,因此产生和释放复位信号必须使用时钟信号的非有效沿,具体设计请参考例8-7在有些设计中,同步复位信号的脉宽是需要严格与时钟信号挂钩,而不是绝对的脉冲宽度,这个时候可以采用repeat语句来实现,具体设计请参考实例8-88.4.3复位异步复位信号:直接通过一个值序列来产生异步复8.4.4任务任务就像一个过程,它能够把共同的代码段封装起来,从而实现封装的代码段可以在设计中被不同的位置调用。任务中可以包含时序控制,并且可以调用其它任务和函数。基本格式:具体设计请参考例8-98.4.4任务任务就像一个过程,它能够把共同的代码段封装起任务名可以有参数,也可以没有参数。任务通过output声明输出任务值。调用任务:任务名可以有参数,也可以没有参数。任务通过output声明输8.4.5函数函数与任务很相似,它也可以在模块不同位置执行共同代码,它们之间的不同之处在于函数只能返回一个值,而且不能有任何时延或者时延控制。它必须有一个输入,但是可以没有输出和输入声明。函数可以调用其它函数,但是不可以调用任务。基本格式:具体设计请参考例8-108.4.5函数函数与任务很相似,它也可以在模块不同位置执行8.4.6事件事件是Verilog的另外一类数据类型,它必须在使用前被声明。基本格式:即声明了两个事件Start和Ready。如果要触发这两个事件,则采用如下格式:具体设计请参考例8-118.4.6事件事件是Verilog的另外一类数据类型,它必8.4.7并行激励两个或者两个以上的任务需要同时执行时,可以采用并行激励的方式:fork…join如需要同时启动读写数据的任务:8.4.7并行激励两个或者两个以上的任务需要同时执行时,可8.4.8系统任务和系统函数请参考第三章第十节8.4.8系统任务和系统函数请参考第三章第十节8.5Testbench结构化初级的Testbench往往喜欢把测试用例和测试套具写在一起,不仅可读性不强,而且维护性也比较麻烦,测试用例不能得到重用。图8–25初级仿真模型示意图8.5Testbench结构化初级的Testbench往往将Testbench结构化的好处在于能够解决上述的这些问题,它不仅可以提高测试用例的重用率,使整个设计的结构清晰,而且可以提高代码的抽象程度,适合复杂的设计。将Testbench结构化的好处在于能够解决上述的这些问题,图8–26结构化Testbench模型图[信息与通信]第8章仿真与Testbench设计课件在这个模型里面顶层模块对仿真模块和设计模块都例化,仿真模块与设计模块之间通过接口相互影响,仿真模块直接调用复杂的任务和函数来进行仿真。这样整个顶层模块就是一个封闭的系统,仿真模块和设计模块之际相互影响,又相互独立。在这个模型里面顶层模块对仿真模块和设计模块都例化,仿真模块与图8–27BFM模型示意图这个模型和上一个仿真模型之所以不同在于这个模型增加一级行为级模块,这样被测模块与仿真模块和行为模块之间同时作用。[信息与通信]第8章仿真与Testbench设计课件8.6实例9:基于Modelsim的I2CSlaveTestbench设计在此设计中,RTL代码为一个最简单的I2C从机,里面包含一个器件识别数据。因此相应的Testbench只要模拟I2C主机读出从机的识别数据并且认为正确就可以。为了更简单,我们假定从机的地址和识别数据是一致的。具体设计源代码请参考实例98.6实例9:基于Modelsim的I2CSlaveT8.7实例10:基于Modelsim的LPCSlave接口仿真设计本例我们充分使用task语句来实现测试平台,具体源代码请参考实例10图8–28LPCSlave仿真波形图8.7实例10:基于Modelsim的LPCSlave8.8实例11:基于Modelsim的信号消抖程序仿真设计采用时延实现测试信号的生成,具体源代码设计请参考实例11图8–29采用ModelsimPE6.3c实现信号消抖仿真波形图8.8实例11:基于Modelsim的信号消抖程序仿真设8.9本章小结本章主要讲述了怎样采用VerilogHDL语言来进行Testbench设计,怎样采用modelsim来实现功能和时序仿真。要设计一个优秀的仿真和测试平台,其基本原则是:每一行、每一个语句、每一个条件都必须覆盖到并有判断,因此测试平台和测试用例必须完整,需要花费大量的时间、精力并且有一定的经验来做出判断,尽量在仿真阶段发现并解决问题,实现代码覆盖的最大化。8.9本章小结本章主要讲述了怎样采用VerilogHDL8.10思考与练习仿真器有哪几种类型?它们的基本原理是什么?怎样使用VerilogHDL产生一个有限的时钟和一个无限的时钟?怎样采用VerilogHDL语言实现一个同步复位逻辑和异步复位逻辑?函数和任务各是什么意思?它们之间有什么区别?$stop与$finish有什么区别?试用for语句实现对一个存取器的初始化。功能仿真与时序仿真有什么区别与联系?什么是Testbench结构化?为什么要采用Testbench结构化设计?begin…end与fork…join之间有什么样的区别与联系?什么是事件?采用什么样的关键字来表示事件?一般由于什么场合?试用VerilogHDL语言实现对PCISlave的仿真。8.10思考与练习仿真器有哪几种类型?它们的基本原理是什么第8章仿真与Testbench设计第8章仿真与Testbench设计本章主要内容仿真概述Testbench设计仿真实例Testbench结构化本章主要内容仿真概述8.1仿真概述对仿真器进行优化,一般基于两种方式:周期驱动和事件驱动。8.1仿真概述对仿真器进行优化,一般基于两种方式:周期驱动8.1.1周期驱动周期驱动是基于时钟周期的仿真模型。图8–1周期驱动模型图8.1.1周期驱动周期驱动是基于时钟周期的仿真模型。周期驱动的仿真器只在乎Q2的输出,即每个时钟有效沿到来时的输入和输出,时钟周期之内的延时全部不考虑,S1和S2之间的变化和时序完全被忽略——仿真器假定所有的触发器的建立时间和保持时间均满足条件。这种模型只能应用于同步模型,如果设计中包含了锁存器或者多时钟域的情况,周期驱动的仿真器模型都不能适用。如果需要应用的话,只能使用静态时延分析来实现。周期驱动的仿真器只在乎Q2的输出,即每个时钟有效沿到来时的输8.1.2事件驱动目前逻辑仿真最普遍的形式就是事件驱动。事件驱动仿真模型有个重要特点:一是如果输入不变化,输出就不会变化,因为输入不变化就不需要仿真;二是一旦输入发生变化,不管输出有没有变化,仿真器都会执行仿真。8.1.2事件驱动目前逻辑仿真最普遍的形式就是事件驱动。图8–2事件驱动模型图[信息与通信]第8章仿真与Testbench设计课件仿真器在内部会维护一些信息用来记录某些时刻要被激活的事件。而每个输入都是一些离散的事件。当输入a发生变化的时候,标记为T1,仿真器会检查这个输入连接到了何处,检测到了一个5ns的与门,仿真器会在T1之后的5ns时候(T2)安排一个与门输出的时间。接着仿真器检查当前时刻T1是否还有其他动作需要执行。b就是下一个事件,发生在T2时刻,也就是T2的边沿。然后仿真器检查b连接到何处,是一个4ns的缓冲器。同样仿真器会在T2时候后的4ns时刻(T3)安排一个缓冲器的输出。同样仿真器再次检测下一个事件,直到由输入端a的首次变化触发所引起的所有事件都被执行完毕为止。事件驱动的优点在于它可以处理任何形式的设计,包括同步和异步逻辑、锁存器、组合逻辑反馈回路等等,并且具有极好的设计可见性,便于调试。但是它最大的缺点就是运算量大、速度非常慢。仿真器在内部会维护一些信息用来记录某些时刻要被激活的事件。而8.1.3混合语言仿真20世纪60年代末和170年代初出现的第一代事件驱动的仿真器是基于仿真基本元件的、采用标准的文本编辑器在门级网表级输入设计,同样采用文本激励语言作为测试平台,仿真器使用网表建立电路模型,然后将激励加入到这个模型中,并将结果输出到另外一个文本文件中。要解决混合语言仿真有几种方式:一是先将其中的一种语言所写的设计翻译成另外一种语言,然后再进行仿真二是在仿真器中使用多核——一个用来进行VHDL仿真,另外一种进行VerilogHDL仿真。三是采用单核仿真器,同时支持多种语言8.1.3混合语言仿真20世纪60年代末和170年代初出现8.2仿真器的选择一是选择的仿真器必须能够支持混合语言仿真。二是仿真器的性能需要满足设计的要求。三是仿真器需要有一个良好的调试环境。最后还要考虑的是仿真器的代码覆盖能力。代码覆盖能力包括很多种,如:基本代码覆盖率分支覆盖率条件覆盖率表达式覆盖率状态覆盖率功能覆盖率断言/属性覆盖率8.2仿真器的选择一是选择的仿真器必须能够支持混合语言仿真8.3Modelsim简介与仿真8.3.1Modelsim简介Mentor公司是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。Modelsim的主要特点有:RTL和门级优化,本地编译结构,编译仿真速度快,跨平台跨版本仿真;单内核VHDL和Verilog混合仿真;源代码模版和助手,项目管理;集成了性能分析、波形比较、代码覆盖、数据流ChaseX、SignalSpy、虚拟对象VirtualObject、Memory窗口、Assertion窗口、源码窗口显示信号值、信号条件断点等众多调试功能;8.3Modelsim简介与仿真8.3.1ModelsiC和Tcl/Tk接口,C调试;直接支持SystemC,和HDL任意混合;支持SystemVerilog的设计功能;对系统级描述语言如SystemVerilog、SystemC、PSL的最全面支持;ASICSignoff。ModelSim分几种不同的版本:SE、PE、DE和OEM,其中SE是最高级的版本,而集成在

Actel、Atmel、Altera、Xilinx以及Lattice等FPGA厂商设计工具中的均是其OEM版本。C和Tcl/Tk接口,C调试;8.3.2功能仿真在桌面点击Modelsim图标,或者在开始->所有程序中选择Modelsim,如下图所示。图8–3Modelsim界面8.3.2功能仿真在桌面点击Modelsim图标,或者在开建立仿真工程。图8–4建立仿真工程界面建立仿真工程。弹出一个对话框,选择”“AddExistingFile””,添加测试平台和被测文件到仿真工程中。点击“OPEN”,然后点击“OK”。图8–5添加仿真文件界面弹出一个对话框,选择”“AddExistingFile”关掉对话框。图8–6Modelsim仿真参数设置关掉对话框。选中测试程序,然后点击“project->Setting”来选择Verilog仿真器。点击“OK”。图8–7Modelsim仿真语言选择选中测试程序,然后点击“project->Setting编译。图8–8编译界面编译。选择“”Simulation->RuntimeOptions””,可以选择所需要的显示,图8–9Modelsim仿真格式选择选择“”Simulation->RuntimeOpti选择“Simulation->StartSimulation”。图8–10仿真选择“Simulation->StartSimulat运行后的结果如下图8–11仿真结果界面运行后的结果如下在工作区窗口选择顶层仿真文件,点击“Add->Wave->SelectedInstance”图8–12添加仿真波形在工作区窗口选择顶层仿真文件,点击“Add->Wave-点击“Simulate->Run-all”图8–13仿真运行界面点击“Simulate->Run-all”点击wave查看仿真波形图8–14查看仿真波形点击wave查看仿真波形点击“ContinueRun”工具条可以继续仿真到下一个$stop图8–15继续仿真界面点击“ContinueRun”工具条可以继续仿真到下一个$s设置Cursor图8–16Cursor设置设置Cursor图8–17时延量测[信息与通信]第8章仿真与Testbench设计课件保存波形文件图8–18保存波形文件保存波形文件8.3.3时序仿真时序仿真总体思路与功能仿真类似,只是时序仿真需要考虑逻辑单元时延和布局布线时延,因此需要借助不同公司的开发平台生成相应的静态时延报告,并且结合相关的器件模型来进行仿真。时序仿真比功能仿真更加精确,但是花费时间比较久。以Lattice公司的器件为开发平台来讲述怎样进行时序仿真。生成.sdf文件。通过ispLEVER建立一个工程文件,点击“GenerateTimingSimulationFiles”生成.vo和.sdf文件。把这两个文件加到仿真文件夹中。关掉ispLEVER。打开Modelsim并建立一个新的仿真工程。建库。例如设计采用xo系列的库,在图8-19显示的Modelsim的界面的命令框中键入下面的两个命令:Vlibmachxo8.3.3时序仿真时序仿真总体思路与功能仿真类似,只是时序Vlog–workmachxoC:/Lattice/ispLever72/cae_library/simulation/verilog/machxo/*.

v(xo系列在ispLEVER下的路径,不同的安装有不同的路径)图8–19建库界面Vlog–workmachxoC:/Lattice/i编译点击“Compile->CompileAll”。点击“Simulate->StartSimulation”,出现一个配置窗口。点击SDF按钮,然后点击“Add”按钮图8–20添加.sdf文件界面编译点击“Compile->CompileAll”。选择.sdf文件。在“ApplytoRegion”区域写入/UUT。添加库。图8–21添加库界面选择.sdf文件。在“ApplytoRegion”区域点击Design键,从工作文件夹中选择仿真程序,点击“OK”按钮。后续的方式与功能仿真相同。点击Design键,从工作文件夹中选择仿真程序,点击“OK”8.4Testbench设计Testbench的结构和RTL设计的结构相似,只是由于Testbench和所要仿真的程序构成的是一个封闭的系统,所以不存在输入输出列表。另外所有可以综合的Verilog语言都可以用来进行仿真设计。Testbench并不会生成一个实实在在的电路尽量采用抽象层次比较高的语言来设计Testbench不仅可以提高设计的效率,而且可以提高仿真的效率。8.4Testbench设计Testbench的结构和RT8.4.1时钟时钟是设计Testbench中的一个最基本的元素。时钟可以分为很多种,包括无限循环时钟和有限个周期的时钟信号,因此时钟的生成方式也各式各样。无限循环时钟信号的产生请参考例8-1到例8-3有限周期的时钟信号的产生请参考例8-4同频异相时钟信号的产生请参考例8-58.4.1时钟时钟是设计Testbench中的一个最基本的8.4.2值序列值序列是Testbench中经常使用到的一种信号形式,它可以描述有限个规则或者不规则的数据形式。时钟信号是一种特殊的值序列。值序列有离散值序列和周期值序列之分。值序列的产生可以采用阻塞赋值和非阻塞赋值,但是结果完全不同。8.4.2值序列值序列是Testbench中经常使用到的一离散值序列图8–22值序列波形图离散值序列采用非阻塞赋值会出现的一种值序列图8–23非阻塞赋值的值序列波形图采用非阻塞赋值会出现的一种值序列重复值序列图8–24重复值序列示意图重复值序列8.4.3复位异步复位信号:直接通过一个值序列来产生异步复位信号,具体设计请参考例8-6同步复位信号:同步复位信号需要在时钟的作用下才能产生。同步设计需要满足建立时间和保持时间的要求,因此产生和释放复位信号必须使用时钟信号的非有效沿,具体设计请参考例8-7在有些设计中,同步复位信号的脉宽是需要严格与时钟信号挂钩,而不是绝对的脉冲宽度,这个时候可以采用repeat语句来实现,具体设计请参考实例8-88.4.3复位异步复位信号:直接通过一个值序列来产生异步复8.4.4任务任务就像一个过程,它能够把共同的代码段封装起来,从而实现封装的代码段可以在设计中被不同的位置调用。任务中可以包含时序控制,并且可以调用其它任务和函数。基本格式:具体设计请参考例8-98.4.4任务任务就像一个过程,它能够把共同的代码段封装起任务名可以有参数,也可以没有参数。任务通过output声明输出任务值。调用任务:任务名可以有参数,也可以没有参数。任务通过output声明输8.4.5函数函数与任务很相似,它也可以在模块不同位置执行共同代码,它们之间的不同之处在于函数只能返回一个值,而且不能有任何时延或者时延控制。它必须有一个输入,但是可以没有输出和输入声明。函数可以调用其它函数,但是不可以调用任务。基本格式:具体设计请参考例8-108.4.5函数函数与任务很相似,它也可以在模块不同位置执行8.4.6事件事件是Verilog的另外一类数据类型,它必须在使用前被声明。基本格式:即声明了两个事件Start和Ready。如果要触发这两个事件,则采用如下格式:具体设计请参考例8-118.4.6事件事件是Verilog的另外一类数据类型,它必8.4.7并行激励两个或者两个以上的任务需要同时执行时,可以采用并行激励的方式:fork…join如需要同时启动读写数据的任务:8.4.7并行激励两个或者两个以上的任务需要同时执行时,可8.4.8系统任务和系统函数请参考第三章第十节8.4.8系统任务和系统函数请参考第三章第十节8.5Testbench结构化初级的Testbench往往喜欢把测试用例和测试套具写在一起,不仅可读性不强,而且维护性也比较麻烦,测试用例不能得到重用。图8–25初级仿真模型示意图8.5Testbench结构化初级的Testbench往往将Testbench结构化的好处在于能够解决上述的这些问题,它不仅可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论