文档库 最新最全的文档下载
当前位置:文档库 › 时序仿真和功能仿真

时序仿真和功能仿真

时序仿真和功能仿真

时序仿真和功能仿真

时序计算和Cadence 仿真结果的运用

时序计算和Cadence仿真结果的运用 中兴通讯康讯研究所EDA设计部余昌盛刘忠亮 摘要:本文通过对源同步时序公式的推导,结合对SPECCTRAQuest时序仿真方法的分析,推导出了使用SPECCTRAQuest进行时序仿真时的计算公式,并对公式的使用进行了说明。 关键词:时序仿真源同步时序电路时序公式 一.前言 通常我们在时序仿真中,首先通过时序计算公式得到数据信号与时钟信号的理论关系,在Cadence仿真中,我们也获得了一系列的仿真结果,怎样把仿真结果正确的运用到公式中,仿真结果的具体含义是什么,是我们正确使用Cadence仿真工具的关键。下面对时序计算公式和仿真结果进行详细分析。 二.时序关系的计算 电路设计中的时序计算,就是根据信号驱动器件的输出信号与时钟的关系(Tco——时钟到数据输出有效时间)和信号与时钟在PCB上的传输时间(Tflytime)同时考虑信号驱动的负载效应、时钟的抖动(Tjitter)、共同时钟的相位偏移(Tskew)等,从而在接收端满足接收器件的建立时间(Tsetup)和保持时间(Thold)要求。通过这些参数,我们可以推导出满足建立时间和保持时间的计算公式。 时序电路根据时钟的同步方式的不同,通常分为源同步时序电路(Source-synchronous timing)和共同时钟同步电路(common-clock timing)。这两者在时序分析方法上是类似的,下面以源同步电路来说明。 源同步时序电路也就是同步时钟由发送数据或接收数据的芯片提供。图1中,时钟信号是由CPU驱动到SDRAM方向的单向时钟,数据线Data是双向的。 图1

图2是信号由CPU 向SDRAM 驱动时的时序图,也就是数据与时钟的传输方向相同时 的情况。 Tsetup ’ Thold ’ CPU CLK OUT SDRAM CLK IN CPU Signals OUT SDRAM Signals IN Tco_min Tco_max T ft_clk T ft_data T cycle SDRAM ’S inputs Setup time SDRAM ’S inputs Hold time 图2 图中参数解释如下: ■ Tft_clk :时钟信号在PCB 板上的传输时间; ■ Tft_data :数据信号在PCB 板上的传输时间; ■ Tcycle :时钟周期 ■ Tsetup’:数据到达接收缓冲器端口时实际的建立时间; ■ Thold’:数据到达接收缓冲器端口时实际的保持时间; ■ Tco_max/Tco_min :时钟到数据的输出有效时间。 由图2的时序图,我们可以推导出,为了满足接收芯片的Tsetup 和Thold 时序要求,即 Tsetup’>Tsetup 和Thold’>Thold ,所以Tft_clk 和Tft_data 应满足如下等式: Tft_data_min > Thold – Tco_min + Tft_clk (公式1) Tft_data_max < Tcycle - Tsetup – Tco_max + Tft_clk (公式2) 当信号与时钟传输方向相反时,也就是图1中数据由SDRAM 向CPU 芯片驱动时,可 以推导出类似的公式: Tft_data_min > Thold – Tco_min - Tft_clk (公式3) Tft_data_max < Tcycle - Tsetup – Tco_max - Tft_clk (公式4) 如果我们把时钟的传输延时Tft_clk 看成是一个带符号的数,当时钟的驱动方向与数据 驱动方向相同时,定义Tft_clk 为正数,当时钟驱动方向与数据驱动方向相反时,定义Tft_clk 为负数,则公式3和公式4可以统一到公式1和公式2中。 三.Cadence 的时序仿真 在上面推导出了时序的计算公式, 在公式中用到了器件手册中的Tco 参数,器件手册中Tco 参数的获得,实际上是在某一种测试条件下的测量值,而在实际使用上,驱动器的实际 负载并不是手册上给出的负载条件,因此,我们有必要使用一种工具仿真在实际负载条件下 的信号延时。Cadence 提供了这种工具,它通过仿真提供了实际负载条件下和测试负载条件 下的延时相对值。 我们先来回顾一下CADENCE 的仿真报告形式。仿真报告中涉及到三个参数:FTSmode 、

Modelsim的功能仿真和时序仿真

FPGA 设计流程包括设计输入,仿真,综合,生成,板级验证等很多阶段。在整个设计流程中,完成设计输入并成功进行编译仅能说明设计符合一定的语法规范,并不能说明设计功能的正确性,这时就需要通过仿真对设计进行验证。在FPGA 设计中,仿真一般分为功能仿真(前仿真)和时序仿真(后仿真)。功能仿真又叫逻辑仿真,是指在不考虑器件延时和布线延时的理想情况下对源代码进行逻辑功能的验证;而时序仿真是在布局布线后进行,它与特定的器件有关,又包含了器件和布线的延时信息,主要验证程序在目标器件中的时序关系。在有些开发环境中,如Xilinx ISE 中,除了上述的两种基本仿真外,还包括综合后仿真,转换(post-translate)仿真,映射后(post-map)仿真等,这样做完每一步都可进行仿真验证,从而保证设计的正确性。 ModelSim 是Mentor Graphics 子公司MentorTechnology 的产品,是当今最通用的FPGA 仿真器之一。ModelSim 功能强大,它支持FPGA 设计的各个阶段的仿真,不仅支持VHDL 仿真,Verilog仿真,而且支持VHDL 和Verilog 混合仿真。它不仅能做仿真,还能够对程序进行调试,测试代码覆盖率,对波形进行比较等。ModelSim 有很多版本,像ModelSim/SE 是首要版本,除此之外还有ModelSim/XE 和ModelSim/AE,分别是为Xilinx 公司和Altera 公司提供的OEM 版,其中已包含各公司的库文件,故用特定公司OEM 版进行仿真时就不需编译该公司的库了。 用ModelSim 进行功能仿真 进行功能仿真首先要检查设计的语法是否正确;其次检查代码是否达到设计的功能要求。下文主要介绍仿真步骤和测试激励的加载。 仿真步骤 (1)建立库并映射库到物理目录 因为用ModelSim 进行仿真是建立在仿真库的基础上的(此处进行的是功能仿真,因而不用编译特定厂商的库),所以首先要建立库并把库映射到实际的物理路径。通常用户编译的文件都放在work库中,所以必须先建立work 库。有两种方法建立并映射库,第一种方法是通过图形界面,在菜单Design→Create a New Library 弹出对话框,如图1 所示。在Library Name 中输入work,如果建立其它库,可以输入其它名字。Library Map to 是映射的物理路径。第二种方法是用命令行的形式,建立库用ModelSim>vlib<库名>,映射库用ModelSim> vmap ,如建立并映射库work,就可以在ModelSim 主窗口命令提示符下输入 vlib work vmap work work (2)编译源代码 该步骤主要检查源文件的语法错误。实现方法有两种,一是通过菜单Design→Compile,出现选择源文件对话框,选择要编译的源文件,编译即可;二是通过命令行方式,这一步对于VHDL 和Verilog 所使用的命令是不一样的,对于VHDL 代码用vcom-work.vhd.vhd ,

时序计算和Cadence仿真结果的运用

字体大小: 小中大作者:余昌盛刘忠亮来源:日期:2007-06-25 点击:558 摘要:本文通过对源同步时序公式的推导,结合对SPECCTRAQuest时序仿真方法的分析,推导出了使用SPECCTRAQuest进行时序仿真时的计算公式,并对公式的使用进行了说明。 一、前言 通常我们在时序仿真中,首先通过时序计算公式得到数据信号与时钟信号的理论关系,在cadence仿真中,我们也获得了一系列的仿真结果,怎样把仿真结果正确的运用到公式中,仿真结果的具体含义是什么,是我们正确使用Cadence仿真工具的关键。下面对时序计算公式和仿真结果进行详细分析。 二.时序关系的计算 电路设计中的时序计算,就是根据信号驱动器件的输出信号与时钟的关系(Tco——时钟到数据输出有效时间)和信号与时钟在PCB上的传输时间(Tflytime)同时考虑信号驱动的负载效应、时钟的抖动(Tiitter)、共同时钟的相位偏移(Tskew)等,从而在接收端满足接收器件的建立时间(Tsetup)和保持时间(Thold)要求。通过这些参数,我们可以推导出满足建立时间和保持时间的计算公式。 时序电路根据时钟的同步方式的不同,通常分为源同步时序电路(Source-synchronous timing)和共同时钟同步电路(common-clock timing)。这两者在时序分析方法上是类似的,下面以源同步电路来说明。 源同步时序电路也就是同步时钟由发送数据或接收数据的芯片提供。图1中,时钟信号是由CPU驱动到SDRAM方向的单向时钟,数据线Data是双向的。 图2是信号由CPU向SDRAM驱动时的时序图,也就是数据与时钟的传输方向相同时的情况。

用ModelSimSE进行功能仿真和时序仿真的方法(ALTERA篇)

用ModelSimSE进行 功能仿真和时序仿真的方法 (ALTERA篇) 黄俊 April 2007

用ModelSim SE进行功能仿真和时序仿真的方法 (ALTERA篇) 软件准备 (1) QuartusII,本文截图是QuartusII 6.1界面的。我个人认为,如果是开发StratixII或CycloneII或MAXII,用QuartusII6.0+SP1+SP2比较稳定。 (2) ModelSim SE. ALTERA仿真库要已经装好,安装仿真库的笔记已记录于《在ModelSimSE中添加ALTERA仿真库的详细步骤》中。我电脑上装的是ModelSim SE 6.1b。 例子程序的制作 先在Quartus II里生成一个例子程序,以方便介绍三种仿真的方法。步骤如下: 1、新建一个工程(Project),工程名取lpm_shift, 器件选CycloneII EP2C5Q208C, 第三方 的工具暂时都不选。 2、菜单栏上Tools?MegaWizard Plug-In Manager, 点Next,在storage中选 LPM_SHIFTREG,输出文件格式根据习惯选一种语言,在这里以Verilog的为例,在右边的output file名字中加上lpm_shift。点Next。

3、这个例子是做一个移位寄存器,调用lpm库,和cycloneII元件库,也正好可以作为对 前面建好的ALTERA库的一个验证。点可以查到该模块的使用说明和详细介绍。移位寄存器比较简单,就不用细看了。如下图设置.点Next.

4、加上一个异步清零端,点Next,再点Next,最后点Finish. Add/Remove Files in Project…,

利用ModelSim进行的功能仿真,综合后仿真,时序仿真

利用ModelSim进行的功能仿真,综合后仿真,时序仿真 功能仿真,就是在理想状态下(不考虑延迟),验证电路的功能是否符合设计的要求。 功能仿真需要: 1.TestBench或者其他形式的输入激励 2.设计代码(HDL源程序) 3.调用器件的模块定义(供应商提供,如FIFO,RAM等等) 值得一提的是,可以在ModelSim直接编写TestBench,使用View->Source->Show language templates. 综合后仿真(门级仿真),实际上就是将对综合后的门级网表进行仿真,只考虑门延迟,而没有加入时延文件。在功能仿真之后检验综合的结果是否满足功能要求。 综合后仿真需要: 1.综合后的门级网表,注意这里变成了*.vo文件,而不是原来功能仿真中所需要的HDL源代码. 2.测试激励 3.元件库Altera的仿真库位置为 *:\altera\quartus\eda\sim_lib 所谓时序仿真,就是在综合后仿真的基础上加上时延文件(sdf文件),综合考虑了路径延迟和门延迟的情况,验证电路是否存在时序违规。 时序仿真需要: 1.综合后的门级网表,注意这里变成了*.vo文件,而不是原来功能仿真中所需要的HDL源代码. 2.测试激励 3.元件库Altera的仿真库位置为 *:\altera\quartus\eda\sim_lib 4.较门级仿真还需要具有包含时延信息的反标记文件*.sdf 可以有两种方法实现门级仿真,或时序仿真。

1.工程编译成功后,自动启用ModelSim来运行门级仿真,前提是要在Quartus II的Options中设置好ModelSim的路径(和有些参考PDF上说的环境变量好像无关,至少我用的Quartus II 9.0 Web Edtion是这样的)具体方法是,进入Quartus9.0->Tools->Options,在Categroy里选中General 下的EDA Tool Options,在ModelSim右边的Location of Executable中双击来改变路径,就并且在工程中设置了自动启动ModelSim,就可以自动启用了。 1.在EDA Tool Settings,首先将仿真工具设置为ModelSim,然后点击让它自动启动。 2.NativeLink settings中选择testbench,完成相关的设置,例如test bench name,top level module in test bench,Design instance name in test bench,仿真时间,然后编译时会自动启动ModelSim然后完成所有操作,大概这就是Altera所指的和很多EDA工具的无缝连接。 另外一种方法,则是现在quartus ii中生成门级网表和延时文件,然后调用ModelSim进行仿真 1.在quartus ii设置仿真工具为ModelSim,这样设置完成后,在当前目录下会生成一个simulation的目录,该目录下有一个simulation文件夹,里面包含了网标文件和时延反标文件,vhdl语言对应的是网表文件为*.vho,时延文件为*.sdo。Verilog则为*.vo,*.sdo。 2.建立库并映射到物理目录,编译TestBench,执行仿真。 对库的理解: 我想所谓库,实际上就是一个代替文件夹的符号,区别就是,库中的文件的表述皆是经过了编译的实体或者module,一切操作都在库中进行。 ModelSim有两种库,一种是资源库,一种是工作库(默认名为work,保存当前工程下已通过编译的所有文件,资源库放置work库已编译文件所要调用的资源)。所以编译前,一定要有work库,而且只能有一个。

modelsim时序仿真

利用ModelSim SE6.0C实现时序仿真 时间:2007-04-05 来源: 作者: 点击:2743 字体大小:【大中小】 1) 打开一个工程文件。 2) 打开Settings设置栏,选择EDA Tools Settings下的Simulation栏。在右边出现的设置栏中将“Tool name”的下拉菜单选择“ModelSim(Verilog)”(如果工程用VHDL语言实现,则可以选择“ModelSim(VHDL)”;如果ModelSim使用的是for Altera的专用版本,则可以选择“ModelSim-Altera(Verilog)”或“ModelSim-Altera(VHDL)”)。 另外在设置栏中还有其他的核选框。 1.如果选中“Maintain hierarchy”,则表示在做时序仿真时就能看到像在功能仿真的工 程文件层次结构,可以找到定义的内部信号。因为在做后仿时,源文件中的信号名 称已经没有了,被映射为软件综合后自己生成的信号名,观察起来很不方便。这个 设置与ISE里综合右键属性的Keep Hierarchy选择YES的功能是一样的。 2.如果选中“Generate netlist for functional simulation only”,则表示只能做功能仿真。 3) 点击“Start Compilation”按钮编译工程,完成之后在当前的工程目录下可以看到一个名为“Simulation”的新文件夹,下面的“ModelSim”文件夹下包括仿真需要的.vo网表文件和包含延迟信息的.sdo文件。 4) 打开ModelSim软件(或者在Quartus下“Settings->EDA Tools Setting->Simulation”出现的设置栏中选中“Run this tool automatically after compilation”,直接从Quartus下调用ModelSim软件),可以在当前工程目录下新建一个Project。在Project标签栏内点击右键,出现在快捷菜单中选择“Add to Project->Existing File…”。加入当前工程目录的 “\Simulation\ModelSim\”路径下的.vo文件、TestBench文件和对应当前工程所选择器件的网表文件。 比如:当前工程选择的器件是Cyclone系列,Quartus安装目录在“C:\altera”路径下。因此需要在“C:\altera\quartus50\eda\sim_lib”路径下找到“cyclone_atom.v”的网表文件导入到ModelSim下的Project。如果是其他器件亦是如此,只要在此目录下找到对应有“_atom”后缀的.v文件。当然整个大前提是ModelSim SE版本已经加入了Alterta的仿真库,不过ModelSim-Altera版本就不会存在这样的问题。

FPGA仿真流程

QuartusII的设计流程 QuartusII软件的使用方法 一、设计输入 1.建立工程 任何一项设计都是一项工程(Project),都必须首先为此工程建立一个放置与此工程相关的所有设计文件的文件夹。此文件夹将被EDA软件默认为工作库(Work Library)。一般,不同的设计项目最好放在不同的文件夹中,而同一工程的所有文件都必须放在同一文件夹中。 首先建立工作库目录,以便存储工程项目设计文件。在D盘下新建文件夹并取名Mydesign。双击QuartusII软件启动图标,即可启动QuartusII软件,启动界面如图1-2所示。 使用New Project Wizard 可以为工程指定工作目录、分配工程名称以及指定最高层设计实体的名称,还可以指定要在工程中使用的设计文件、其他源文件、用户库和EDA 工具,以及目标器件系列和具体器件等。在此要利用“New Preject

Wizard”工具选项创建此设计工程,并设定此工程的一些相关的信息,如工程名、目标器件、综合器、仿真器等。(1)打开建立新工程管理窗。选择菜单File→New Preject Wizard 命令,即弹出“工程设置”对话框(图1-3),以此来建立新的工程。 (2)在单击图1-3后,出现了设置工程的基本信息,如图1-4所示。单击此对话框最上一栏右侧的“… ”按钮,可以选择工程存放在硬盘上的位置,此例中将工程放在D盘Mydesign文件夹下。这三行的第一行的d:\Mydesign表示工程所在的工作库文件夹;第二行的half_add 表示此项工程的工程名,工程名可以取任何其他的名,也可直接用顶层文件的实体名作为工程名,在此就是按这种方式取的名;第三行是当前工程顶层文件的实体名,这里即为half_add。 (2)将设计文件加入工程中。单击图1-4中的Next 按钮,弹出对话框如图1-5所示,在对话框中单击File name 右侧的“… ”按钮,可以将与工程相关的所有VHDL 文件(如果有的话)加入进此工程,此工程文件加入的方法有两种:第1 种方法是单击“Add … ”按钮,从工程目录中选出相关的VHDL 文件;第2 种方法是单击Add All 按钮,将设定

功能仿真与时序仿真

功能仿真和时序仿真 章节:第3 章第2节 功能仿真与时序仿真 概述 仿真过程是正确实现设计的关键环节,用来验证设计者的设计思想是否正确,及在设计实现过程中各种分布参数引入后,其设计的功能是否依然正确无误。仿真主要分为功能仿真和时序仿真。功能仿真是在设计输入后进行;时序仿真是在逻辑综合后或布局布线后进行。 1. 功能仿真 ( 前仿真 ) 功能仿真是指在一个设计中,在设计实现前对所创建的逻辑进行的验证其功能是否正确的过程。布局布线以前的仿真都称作功能仿真,它包括综合前仿真( Pre-Synthesis Simulation )和综合后仿真( Post-Synthesis Simulation )。综合前仿真主要针对基于原理框图的设计 ; 综合后仿真既适合原理图设计 , 也适合基于 HDL 语言的设计。 2. 时序仿真(后仿真) 时序仿真使用布局布线后器件给出的模块和连线的延时信息,在最坏的情况下对电路的行为作出实际地估价。时序仿真使用的仿真器和功能仿真使用的仿真器是相同的,所需的流程和激励也是相同的;惟一的差别是为时序仿真加载到仿真器的设计包括基于实际布局布线设计的最坏情况的布局布线延时,并且在仿真结果波形图中,时序仿真后的信号加载了时延,而功能仿真没有。 仿真工具 1. ModelSim 总体概览 ModelSim 仿真工具是工业上最流行、最通用的仿真器之一,可支持Verilog 、 VHDL 或是 VHDL/ Verilog 混合输入的仿真,它的 OEM 版本允许Verilog 仿真或 VHDL 仿真。Model 技术公司共开发了 ModelSim/VHDL 和ModelSim/Verilog 两种 ModelSim 产品,但它又分为不同的版本: OEM 版本—— ModelSim/LNL 支持 Verilog 或者 VHDL ,但是不同时支持; ModelSim/PLUS 版本支持混合仿真 Verilog 和 VHDL ; ModelSim/SE 版本支持 PLUS 的所有功能连同附加功能。

ModelSim的前后仿真(Quartus)

利用Quartus5.0实现功能仿真 1)打开一个工程文件。 2)打开Settings设置栏,选择Fitting Settings下的Simulator栏。在右边出现的设置栏中将 “Simulation Mode”的下拉菜单选择“Functional”,即可以实现软件下的功能仿真。(下拉菜单中有“Functional”、“Timing”和“Timing using Fast Timing Model”,分别代表可以在Quartus软件下实现功能仿真,时序仿真和快速时序仿真。最后一项一般不选,如果在Settings->Timing Requirement->More Settings下“Report Combined Fast/Slow Timing” 选项设为“On”,就可以选择最后一项。编译的报告里也会分别列出最快和最慢的时序报告。) 3)选择“Processing”菜单下的“Generate Functional Simulation Netlist”命令,否则将无法 启动仿真。 4)新建一个波形仿真文件,文件后缀名为.vwf。选择File菜单下的New->Other Files->Vector Waveform File。如下图所示,左边空白栏处是节点名的列表区,右边空白栏处是仿真波形的显示区。波形编辑窗口默认时间为1us,如果想改变仿真时间,可以选择Edit菜单下End Time,在弹出的对话框中选择需要的时间。将新建的波形仿真文件保存下来。

5)将需要仿真的信号加入波形编辑窗口。在列表区任一位置双击或者点击右键选择“Insert Node or Bus…”,弹出的对话框点击“Node Finder”按钮。在“Node Finder”界面中点击“List”按钮,有关信号的列表会出现在界面的左边,双击需要观察的信号加入至界面右边。如果工程中用到了很多信号,在左边列表中也会显示很多(Named编辑框默认的是*通配符),可以在Named编辑框中添加需要的信号名称实现模糊查找。界面中“Filter”下拉框中默认的是“Pins: all”,也就是说将要列出的信号都是IO管脚。如果需要观察一些内部信号,可以改变下拉框的参数,比如“Registers: Pre-Synthesis”。下图显示了仿真信号加入波形编辑窗口的情况。对于有些总线信号可以改变其显示的进制格式,比如二进制、八进制、十进制和十六进制。在列表中对应信号点击右键选择 “Properties”,弹出的对话框中选择“Radix”下拉框实现进制的转换。

利用ModelSim进行的功能,综合后,时序仿真

利用ModelSim 进行的功能仿真,综合后仿真,时序仿真 功能仿真,就是在理想状态下(不考虑延迟),验证电路的功能是否符合设计的要求。 功能仿真需要: I. TestBe nch或者其他形式的输入激励 2?设计代码(HDL源程序) 3?调用器件的模块定义(供应商提供,如FIFO, RAM等等) 值得一提的是,可以在ModelSim直接编写TestBench,使用 View->Source->Show language templates. 综合后仿真(门级仿真),实际上就是将对综合后的门级网表进行仿真, 只考虑门延迟,而没有加入时延文件。在功能仿真之后检验综合的结果是否满足功能要求。 综合后仿真需要: 1. 综合后的门级网表,注意这里变成了*.vo 文件,而不是原来功能仿真中所需要的HDL源代码. 2. 测试激励 3. 元件库Altera 的仿真库位置为*: \altera\quartus\eda\sim_lib 所谓时序仿真,就是在综合后仿真的基础上加上时延文件(sdf 文件),综合考虑了路径延迟和门延迟的情况,验证电路是否存在时序违规。 时序仿真需要: 1. 综合后的门级网表,注意这里变成了*.vo 文件,而不是原来功能仿真中所需要的HDL源代码. 2. 测试激励

3. 元件库Altera 的仿真库位置为*: \altera\quartus\eda\sim_lib 4 .较门级仿真还需要具有包含时延信息的反标记文件*.sdf 可以有两种方法实现门级仿真,或时序仿真。 1. 工程编译成功后,自动启用ModelSim 来运行门级仿真,前提是要在 Quartus II的Options中设置好ModelSim的路径 (和有些参考PDF上说的环境变量好像无关,至少我用的Quartus II 9.0 Web Edtion 是这样的)具体方法是,进入 Quartus 9.0->Tools->Options,在Categroy里选中General 下的EDA Tool Options 在ModelSim 右边的Location of Executable中双击来改变路径,就并且在工程中设置了自动启动ModelSim,就可以自动启用了。 1. 在EDA Tool Settings首先将仿真工具设置为ModelSim,然后点击让它自动启动。 2. NativeLinksettings中选择testbench,完成相关的设置,例如test bench n ame,top level module in test ben ch,Desig n in sta nee n ame in test bench 仿真时间,然后编译时会自动启动ModelSim 然后完成所有操作,大概这就是Altera 所指的和很多EDA工具的无缝连接。 另外一种方法,则是现在quartus ii 中生成门级网表和延时文件,然后调用ModelSim 进行仿真 1?在quartus ii设置仿真工具为ModelSim,这样设置完成后,在当前目录下会生成一个simulation 的目录,该目录下有 一个simulation 文件夹,里面包含了网标文件和时延反标文件,vhdl 语言对应的是网表文件为*vho,时延文件为

第13章 时序仿真(timing simulation)

第13章 时序仿真(Timing Simulation) 一般的place&route工具在做完FPGA或CPLD的place&route后,都可选择是 否要做timing simulation,在前一章我们曾经介绍过,如何在Foundation中选 择产生timing simulation所要的文件,在产生供timing simulation的VHDL netlist文件时,不同的开发系统产生的文件也有不同的格式,大约可以分成两 大类,有些厂商的place&route工具所产生的VHDL netlist文件已包含了timing delay的数据,比如其component的声明中有generic,在component instantiation时可以用generic map将器件的setup time或delay time等数据传 入器件中,这时只要用simulator将此VHDL netlist文件compile,后面的做法就 与做function simulation没有两样了,只是其结果已反映出了timing delay, 有些厂商的place&route工具所产生的VHDL netlist文件并不包含timing delay 的数据,仅是单纯的netlist数据。在做simulation时除了要compile VHDL netlist数据外,还需配合SDF文件使用,这一部分会在后面再讨论。 IEEE在1995年扩充IEEE-1076,增加了IEEE-1076.4,这一增订主要是在 VITAL(VHDL Initiative Towards ASIC Libraries)上,其在VHDL上对ASIC提供 了高精确度及高效率的仿真模型。此规范定义了三个1evels的模型,分别是VITAL level0、VITAL level1及VITAL level 1Memory,在此并不是要介绍这三个模型 的内容,而是要介绍三个定义的标准packages,分别是VITAL_Timing、 VITAL_Primitives及VITAL_Memory,VITAL_Timing package定义了一些标准的数 据类型、属性、常数及一些基本类型、次要类型、常数及一些用来发展ASIC模型 的子程序,此package是架构在VITAL_Timing package之上的,也就是其使用了 一些VITAL_Timing package所声明的数据类型或常数。至于VITAL_Memory package则定义了一些数据类型及用来支持开发内存模型的子程序,一般在做 timing simulation所需要的是VITAL_Timing package及VITAL_Primitives package,VITAL_Memory package较少使用。 13-1编译VHDL Netlist File VHDL netlist file是由place&route工具经back-annotate所产生的,Foundation所产生的netlist并不包含timing的数据,所以会有一个SDF文件来存 储timing数据,在compile这个VHDL文件之前,我们先来看看它是否要声明一些 特别的1ibrary或是packages。 Foundation产生的VHDL netlist文件,其默认的文件名称是time_sim.vhd。在这个文件的一开始是一些相关的注释内容,之后便是1ibrary声明。我们可以 看到除了Library IEEE的声明外,还有另一个1ibrary SIMPRIM,若是读者前面完 全没有做过timing simulation的话,可以肯定在你的ModelSim系统中一定没有 这个1ibrary的存在,但要是你不能确定的话,可以到ModolSim的目录下,打开modelsim.ini这个文件,看是否有simprim这个1ibrary的存在。 检查完modelsim.ini这个文件后,我们再来看看这个VHDL文件与自己设计 的VHDL文件有什么不同。 Post layout的VHDL netlist文件大多都会有一个厂商制定的library,其 中包含一些VITAL的变量声明、特殊function及procedure的声明、厂商提供的各 种component的声明等。当你看到VHDL netlist文件开始处有声明新的1ibrary,但是你还没有建立该1ibrary时,就要在ModelSim系统中先建立一个新的library 了。 Foundation在做完place & route之后可以产生做timing simulation的文件,若是依照前一章的设定,在做place&route之后会产生的文件是一VHDL的netlist文件time_sim.vhd及一个标明timing delay及timing check的SDF文件

前仿真和后仿真

功能仿真和时序仿真 1 推荐 仿真过程是正确实现设计的关键环节,用来验证设计者的设计思想是否正确,及在设计实现过程中各种分布参数引入后,其设计的功能是否依然正确无误。仿真主要分为功能仿真和时序仿真。功能仿真是在设计输入后进行;时序仿真是在逻辑综合后或布局布线后进行。 1. 功能仿真( 前仿真) 功能仿真是指在一个设计中,在设计实现前对所创建的逻辑进行的验证其功能是否正确的过程。布局布线以前的仿真都称作功能仿真,它包括综合前仿真(Pre-Synthesis Simulation )和综合后仿真(Post-Synthesis Simulation )。综合前仿真主要针对基于原理框图的设计; 综合后仿真既适合原理图设计,也适合基于HDL 语言的设计。 2. 时序仿真(后仿真) 时序仿真使用布局布线后器件给出的模块和连线的延时信息,在最坏的情况下对电路的行为作出实际地估价。时序仿真使用的仿真器和功能仿真使用的仿真器是相同的,所需的流程和激励也是相同的;惟一的差别是为时序仿真加载到仿真器的设计包括基于实际布局布线设计的最坏情况的布局布线延时,并且在仿真结果波形图中,时序仿真后的信号加载了时延,而功能仿真没有。 3.2.2 仿真工具 1. ModelSim 总体概览 ModelSim 仿真工具是工业上最流行、最通用的仿真器之一,可支持Verilog 、VHDL 或是VH DL/ Verilog 混合输入的仿真,它的OEM 版本允许Verilog 仿真或VHDL 仿真。Model 技术公司共开发了ModelSim/VHDL 和ModelSim/Verilog 两种ModelSim 产品,但它又分为不同的版本:OEM 版本——ModelSim/LNL 支持Verilog 或者VHDL ,但是不同时支持;ModelSim/PLUS 版本支持混合仿真Verilog 和VHDL ;ModelSim/SE 版本支持PLUS 的所有功能连同附加功能。 1)ModelSim 的仿真实现方式 (1) 交互式的命令行(Cmd)的方式——惟一的界面是控制台的命令行, 没有用户界面。 (2) 用户界面UI的方式——可以接受菜单输入和命令行输入的仿真方式。 (3) 批处理模式——从DOS 或UNIX 命令行运行批处理文件的仿真方式。 2)ModelSim 基本仿真步骤 (1)建立数据库。 (2)映射数据库到物理层目录。 (3)编译源代码——所有的HDL 代码必须被编译;Verilog 和VHDL 必须有不同的编译器支持。 (4)启动仿真器,执行仿真。也可以从其他软件上直接调用,启动内 嵌的仿真器执行仿真。 3)ModelSim 的用户界面 ModelSim 仿真器有9 个窗口: 窗口(main)、结构窗口(structure)、源窗口(source)、信号窗口(signals)、处理窗口(process)、变量窗口(variables)、数据流窗口(dataflow)、波形窗口(w ave) 和列表窗口(list)。这些窗口可以通过主窗口中的视窗(View)菜单来打开。由于大部分窗口只是对设计仿真起一个辅助的作用,不是经常用到的,因此下面主要介绍的是main 主窗口和wave 波形窗口。ModelSim 的完整用户界面如图3-6 所示。 4)ModelSim 窗口模块介绍

Modelsim功能仿真流程

常高嘉 Version 1A,2010-10-7 ModelsimSE 的功能仿真流程 本文档首先简要介绍了Modelsim 软件,然后对Modelsim 的功能仿真流程做了详细说明。 Abstract 摘要目录 一、Modelsim 软件介绍 (2) 二、Modelsim 的仿真方法 (2) 2.1前端仿真流程 (2) 2.1.1文件准备 (2) 2.1.2新建工程 (2) 2.1.3编译设计文件 (5) 2.1.4启动仿真 (6) 2.1.5查看仿真结果并保存 (8) 三、总结 (9)

一、Modelsim软件介绍 Modelsim是Mentor公司开发的专业仿真软件,支持VHDL、Verilog HDL和混合仿真的全系列流程。作为目前最流行的仿真工具之一,Modelsim提供了图形界面和命令行两种工作模式,既可以方便地使用鼠标和对话框完成大部分的仿真操作,也可以通过编写宏指令执行由文件驱动的工作流程以提高效率。 二、Modelsim的仿真方法 Modelsim的仿真分为前端仿真和后端仿真,下面简单介绍一下两者的区别。 前端仿真:也称为功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致。 后端仿真:也称为时序仿真或者布局布线后仿真,是指电路已经映射到特定的工艺环境以后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,是否存在时序违规。其输入文件为从布局布线结果中抽象出来的门级网表、Testbench和扩展名为SDO或SDF的标准时延文件。SDO或SDF的标准时延文件不仅包含门延迟,还包括实际布线延迟,能较好地反映芯片的实际工作情况。一般来说后仿真是必做的。 下面对Modelsim的前端仿真(功能仿真)流程做详细的介绍。 2.1前端仿真流程 2.1.1文件准备 1.HDL源文件;可以使VHDL语言或Verilog语言。 2.测试激励文件(testbench):根据设计要求输入/输出的激励程序,由于不需要进行综合,书写具有很大的灵活性。 3.仿真模型/库:根据设计内调用的器件供应商提供的模块而定,如:FIFO(Altera常用的FIFO有:LPM_FIFO/LPM_FIFO_DC等)、DPRAM等。 2.1.2新建工程 ①新建一个文件夹(文件夹的地方可以自己确定)。然后启动Modelsim将当前路径修改到该文件夹下,后面的所有操作在此文件下进行,以防止文件间的误操作。 修改方法:File→Change directory

关于状态机时序与功能仿真中存在的问题

关于状态机时序与功能仿真中存在的问题 下图是一个状态机的状态转移图(黄色圆圈中的数字为该状态下的输出,曲线上方的等式为状态转移条件) 图1 由s0、s1、s2、s3四种状态构成的状态机 下面的代码实现了上图所示的状态机(出自《VHDL经典实例》——黄任), library ieee; use ieee.std_logic_1164.all; entity moore is port ( reset :in std_logic; clock : in std_logic; din : in std_logic; dout : out std_logic_vector(2 downto 0) ); end; architecture mooremachine of moore is type state_type is (s0,s1,s2,s3); signal presentstate:state_type; signal nextstate :state_type; begin state_reg: process(reset,clock) /*综合成时序逻辑,很可能是一个D触发器*/ begin if reset='1' then /*这里的nextstate信号即是该D触发器的输入, presentstate<=s0; presentstate信号即是D触发器的输出*/ elsif rising_edge(clock) then

presentstate<=nextstate; end if; end process; change_state: process(presentstate,din) /*综合成组合逻辑,输出即是nextstate信号, 故存在延时*/ begin case presentstate is when s0=> if din='1' then nextstate<=s1; else nextstate<=s0; end if; dout<="001"; when s1=> if din='1' then nextstate<=s2; else nextstate<=s1; end if; dout<="011"; when s2=> if din='1' then nextstate<=s3; else nextstate<=s2; end if; dout<="101"; when s3=> if din='1' then nextstate<=s0; else nextstate<=s1; end if; dout<="111"; end case; end process; end; 将上面的代码在quartus 6.0中编译后可以得到一些它的功能仿真图。(设定复位后presentstate的初始状态为:s0 ) 首先看如下输入波形时的功能仿真图形,其结果很容易分析,与预期的一致。

相关文档
相关文档 最新文档