[信息与通信]第8章 仿真与Testbench设计.ppt

上传人:sccc 文档编号:5615541 上传时间:2023-08-02 格式:PPT 页数:56 大小:4.26MB
返回 下载 相关 举报
[信息与通信]第8章 仿真与Testbench设计.ppt_第1页
第1页 / 共56页
[信息与通信]第8章 仿真与Testbench设计.ppt_第2页
第2页 / 共56页
[信息与通信]第8章 仿真与Testbench设计.ppt_第3页
第3页 / 共56页
[信息与通信]第8章 仿真与Testbench设计.ppt_第4页
第4页 / 共56页
[信息与通信]第8章 仿真与Testbench设计.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《[信息与通信]第8章 仿真与Testbench设计.ppt》由会员分享,可在线阅读,更多相关《[信息与通信]第8章 仿真与Testbench设计.ppt(56页珍藏版)》请在三一办公上搜索。

1、第8章仿真与Testbench设计,本章主要内容,仿真概述Testbench设计仿真实例Testbench结构化,8.1 仿真概述,对仿真器进行优化,一般基于两种方式:周期驱动和事件驱动。,8.1.1 周期驱动,周期驱动是基于时钟周期的仿真模型。图 81 周期驱动模型图,周期驱动的仿真器只在乎Q2的输出,即每个时钟有效沿到来时的输入和输出,时钟周期之内的延时全部不考虑,S1和S2之间的变化和时序完全被忽略仿真器假定所有的触发器的建立时间和保持时间均满足条件。这种模型只能应用于同步模型,如果设计中包含了锁存器或者多时钟域的情况,周期驱动的仿真器模型都不能适用。如果需要应用的话,只能使用静态时延分

2、析来实现。,8.1.2 事件驱动,目前逻辑仿真最普遍的形式就是事件驱动。事件驱动仿真模型有个重要特点:一是如果输入不变化,输出就不会变化,因为输入不变化就不需要仿真;二是一旦输入发生变化,不管输出有没有变化,仿真器都会执行仿真。,图 82 事件驱动模型图,仿真器在内部会维护一些信息用来记录某些时刻要被激活的事件。而每个输入都是一些离散的事件。当输入a发生变化的时候,标记为T1,仿真器会检查这个输入连接到了何处,检测到了一个5ns的与门,仿真器会在T1之后的5ns时候(T2)安排一个与门输出的时间。接着仿真器检查当前时刻T1是否还有其他动作需要执行。b就是下一个事件,发生在T2时刻,也就是T2的

3、边沿。然后仿真器检查b连接到何处,是一个4ns的缓冲器。同样仿真器会在T2时候后的4ns时刻(T3)安排一个缓冲器的输出。同样仿真器再次检测下一个事件,直到由输入端a的首次变化触发所引起的所有事件都被执行完毕为止。事件驱动的优点在于它可以处理任何形式的设计,包括同步和异步逻辑、锁存器、组合逻辑反馈回路等等,并且具有极好的设计可见性,便于调试。但是它最大的缺点就是运算量大、速度非常慢。,8.1.3 混合语言仿真,20世纪60年代末和170年代初出现的第一代事件驱动的仿真器是基于仿真基本元件的、采用标准的文本编辑器在门级网表级输入设计,同样采用文本激励语言作为测试平台,仿真器使用网表建立电路模型,

4、然后将激励加入到这个模型中,并将结果输出到另外一个文本文件中。要解决混合语言仿真有几种方式:一是先将其中的一种语言所写的设计翻译成另外一种语言,然后再进行仿真二是在仿真器中使用多核一个用来进行VHDL仿真,另外一种进行Verilog HDL仿真。三是采用单核仿真器,同时支持多种语言,8.2 仿真器的选择,一是选择的仿真器必须能够支持混合语言仿真。二是仿真器的性能需要满足设计的要求。三是仿真器需要有一个良好的调试环境。最后还要考虑的是仿真器的代码覆盖能力。代码覆盖能力包括很多种,如:基本代码覆盖率分支覆盖率条件覆盖率表达式覆盖率状态覆盖率功能覆盖率断言/属性覆盖率,8.3 Modelsim简介与

5、仿真,8.3.1 Modelsim简介Mentor公司是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。Modelsim的主要特点有:RTL和门级优化,本地编译结构,编译仿真速度快,跨平台跨版本仿真;单内核VHDL和Verilog混合仿真;源代码模版和助手,项目管理;集成了性能分析、波形比较、代码覆盖、数据流ChaseX、Signal Spy、虚拟对象Virtual Object、Memory窗口、Assertion窗口、源码窗口显示信号值、信号条件断点等众多调试功能;,C和Tcl/Tk接口,C调试;直接支持SystemC,和HDL任意混合;支持SystemVerilog的设计功

6、能;对系统级描述语言如SystemVerilog、SystemC、PSL的最全面支持;ASIC Sign off。ModelSim分几种不同的版本:SE、PE、DE和OEM,其中SE是最高级的版本,而集成在 Actel、Atmel、Altera、Xilinx以及Lattice等FPGA厂商设计工具中的均是其OEM版本。,8.3.2 功能仿真,在桌面点击Modelsim图标,或者在开始-所有程序中选择Modelsim,如下图所示。图 83 Modelsim界面,建立仿真工程。图 84 建立仿真工程界面,弹出一个对话框,选择”“Add Existing File”,添加测试平台和被测文件到仿真工程

7、中。点击“OPEN”,然后点击“OK”。图 85 添加仿真文件界面,关掉对话框。图 86 Modelsim仿真参数设置,选中测试程序,然后点击“project-Setting”来选择Verilog 仿真器。点击“OK”。图 87 Modelsim仿真语言选择,编译。图 88 编译界面,选择“”Simulation-Runtime Options”,可以选择所需要的显示,图 89 Modelsim仿真格式选择,选择“Simulation-Start Simulation”。图 810 仿真,运行后的结果如下图 811 仿真结果界面,在工作区窗口选择顶层仿真文件,点击“Add-Wave-Selec

8、ted Instance”图 812 添加仿真波形,点击“Simulate-Run-all”图 813 仿真运行界面,点击wave查看仿真波形图 814 查看仿真波形,点击“ContinueRun”工具条可以继续仿真到下一个$stop图 815 继续仿真界面,设置Cursor图 816 Cursor设置,图 817 时延量测,保存波形文件图 818 保存波形文件,8.3.3时序仿真,时序仿真总体思路与功能仿真类似,只是时序仿真需要考虑逻辑单元时延和布局布线时延,因此需要借助不同公司的开发平台生成相应的静态时延报告,并且结合相关的器件模型来进行仿真。时序仿真比功能仿真更加精确,但是花费时间比较久

9、。以Lattice公司的器件为开发平台来讲述怎样进行时序仿真。生成.sdf文件。通过ispLEVER建立一个工程文件,点击“Generate Timing Simulation Files”生成.vo和.sdf文件。把这两个文件加到仿真文件夹中。关掉ispLEVER。打开Modelsim并建立一个新的仿真工程。建库。例如设计采用xo系列的库,在图8-19显示的Modelsim的界面的命令框中键入下面的两个命令:Vlib machxo,Vlog work machxo C:/Lattice/ispLever72/cae_library/simulation/verilog/machxo/*.v(

10、xo系列在ispLEVER下的路径,不同的安装有不同的路径)图 819 建库界面,编译点击“Compile-Compile All”。点击“Simulate-Start Simulation”,出现一个配置窗口。点击SDF按钮,然后点击“Add”按钮图 820 添加.sdf文件界面,选择.sdf文件。在“Apply to Region”区域写入/UUT。添加库。图 821 添加库界面,点击Design键,从工作文件夹中选择仿真程序,点击“OK”按钮。后续的方式与功能仿真相同。,8.4 Testbench设计,Testbench的结构和RTL设计的结构相似,只是由于Testbench和所要仿真的

11、程序构成的是一个封闭的系统,所以不存在输入输出列表。另外所有可以综合的Verilog语言都可以用来进行仿真设计。Testbench并不会生成一个实实在在的电路尽量采用抽象层次比较高的语言来设计Testbench不仅可以提高设计的效率,而且可以提高仿真的效率。,8.4.1 时钟,时钟是设计Testbench中的一个最基本的元素。时钟可以分为很多种,包括无限循环时钟和有限个周期的时钟信号,因此时钟的生成方式也各式各样。无限循环时钟信号的产生请参考例8-1到例8-3有限周期的时钟信号的产生请参考例8-4同频异相时钟信号的产生请参考例8-5,8.4.2 值序列,值序列是Testbench中经常使用到的

12、一种信号形式,它可以描述有限个规则或者不规则的数据形式。时钟信号是一种特殊的值序列。值序列有离散值序列和周期值序列之分。值序列的产生可以采用阻塞赋值和非阻塞赋值,但是结果完全不同。,离散值序列 图 822 值序列波形图,采用非阻塞赋值会出现的一种值序列图 823 非阻塞赋值的值序列波形图,重复值序列图 824 重复值序列示意图,8.4.3 复位,异步复位信号:直接通过一个值序列来产生异步复位信号,具体设计请参考例8-6同步复位信号:同步复位信号需要在时钟的作用下才能产生。同步设计需要满足建立时间和保持时间的要求,因此产生和释放复位信号必须使用时钟信号的非有效沿,具体设计请参考例8-7在有些设计

13、中,同步复位信号的脉宽是需要严格与时钟信号挂钩,而不是绝对的脉冲宽度,这个时候可以采用repeat语句来实现,具体设计请参考实例8-8,8.4.4 任务,任务就像一个过程,它能够把共同的代码段封装起来,从而实现封装的代码段可以在设计中被不同的位置调用。任务中可以包含时序控制,并且可以调用其它任务和函数。基本格式:具体设计请参考例8-9,任务名可以有参数,也可以没有参数。任务通过output声明输出任务值。调用任务:,8.4.5 函数,函数与任务很相似,它也可以在模块不同位置执行共同代码,它们之间的不同之处在于函数只能返回一个值,而且不能有任何时延或者时延控制。它必须有一个输入,但是可以没有输出

14、和输入声明。函数可以调用其它函数,但是不可以调用任务。基本格式:具体设计请参考例8-10,8.4.6 事件,事件是Verilog的另外一类数据类型,它必须在使用前被声明。基本格式:即声明了两个事件Start和Ready。如果要触发这两个事件,则采用如下格式:具体设计请参考例8-11,8.4.7 并行激励,两个或者两个以上的任务需要同时执行时,可以采用并行激励的方式:forkjoin如需要同时启动读写数据的任务:,8.4.8 系统任务和系统函数,请参考第三章第十节,8.5 Testbench结构化,初级的Testbench往往喜欢把测试用例和测试套具写在一起,不仅可读性不强,而且维护性也比较麻烦

15、,测试用例不能得到重用。图 825 初级仿真模型示意图,将Testbench结构化的好处在于能够解决上述的这些问题,它不仅可以提高测试用例的重用率,使整个设计的结构清晰,而且可以提高代码的抽象程度,适合复杂的设计。,图 826 结构化Testbench模型图,在这个模型里面顶层模块对仿真模块和设计模块都例化,仿真模块与设计模块之间通过接口相互影响,仿真模块直接调用复杂的任务和函数来进行仿真。这样整个顶层模块就是一个封闭的系统,仿真模块和设计模块之际相互影响,又相互独立。,图 827 BFM模型示意图这个模型和上一个仿真模型之所以不同在于这个模型增加一级行为级模块,这样被测模块与仿真模块和行为模

16、块之间同时作用。,8.6 实例 9:基于Modelsim的I2C SlaveTestbench设计,在此设计中,RTL代码为一个最简单的I2C从机,里面包含一个器件识别数据。因此相应的Testbench只要模拟I2C主机读出从机的识别数据并且认为正确就可以。为了更简单,我们假定从机的地址和识别数据是一致的。具体设计源代码请参考实例9,8.7 实例 10:基于Modelsim的LPC Slave接口仿真设计,本例我们充分使用task语句来实现测试平台,具体源代码请参考实例10图 828 LPC Slave仿真波形图,8.8 实例 11:基于Modelsim的信号消抖程序仿真设计,采用时延实现测试

17、信号的生成,具体源代码设计请参考实例11图 829 采用Modelsim PE 6.3c实现信号消抖仿真波形图,8.9 本章小结,本章主要讲述了怎样采用Verilog HDL语言来进行Testbench设计,怎样采用modelsim来实现功能和时序仿真。要设计一个优秀的仿真和测试平台,其基本原则是:每一行、每一个语句、每一个条件都必须覆盖到并有判断,因此测试平台和测试用例必须完整,需要花费大量的时间、精力并且有一定的经验来做出判断,尽量在仿真阶段发现并解决问题,实现代码覆盖的最大化。,8.10 思考与练习,仿真器有哪几种类型?它们的基本原理是什么?怎样使用Verilog HDL产生一个有限的时钟和一个无限的时钟?怎样采用Verilog HDL语言实现一个同步复位逻辑和异步复位逻辑?函数和任务各是什么意思?它们之间有什么区别?$stop与$finish有什么区别?试用for语句实现对一个存取器的初始化。功能仿真与时序仿真有什么区别与联系?什么是Testbench结构化?为什么要采用Testbench结构化设计?beginend与forkjoin之间有什么样的区别与联系?什么是事件?采用什么样的关键字来表示事件?一般由于什么场合?试用Verilog HDL语言实现对PCI Slave的仿真。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号