功能仿真与时序仿真,及Modelsim的使用

功能仿真和时序仿真
1
推荐
仿真过程是正确实现设计的关键环节,用来验证设计者的设计思想是否正确,及在设计实现过程中各种分布参数引入后,其设计的功能是否依然正确无误。仿真主要分为功能仿真和时序仿真。功能仿真是在设计输入后进行; 时序仿真是在逻辑综合后或布局布线后进行。
  1. 功能仿真 ( 前仿真 ) 
   功能仿真是指在一个设计中, 在设计实现前对所创建的逻辑进行的验证其功能是否正确的过程。 布局布线以前的仿真都称作功能仿真, 它包括综合前仿真( Pre-Synthesis Simulation )和综合后仿真( Post-Synthesis Simulation )。 综合前仿真主要针对基于原理框图的设计 ; 综合后仿真既适合原理图设计 , 也适合基于 HDL 语言的设计。
  2. 时序仿真(后仿真) 
   时序仿真使用布局布线后器件给出的模块和连线的延时信息, 在最坏的情况下对电路的行为作出实际地估价。 时序仿真使用的仿真器和功能仿真使用的仿真器是相同的, 所需的流程和激励也是相同的; 惟一的差别是为时序仿真加载到仿真器的设计包括基于实际布局布线设计的最坏情况的布局布线延时, 并且在仿真结果波形图中,时序仿真后的信号加载了时延, 而功能仿真没有。

3.2.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 的所有功能连同附加功能。
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)、 波形窗口(wave) 和列表窗口(list)。这些窗口可以通过主窗口中的视窗(View)菜单来打开。由于大部分窗口只是对设计仿真起一个辅助的作用,不是经常用到的, 因 此下面主要介绍的是 main 主窗口和 wave 波形窗口。 ModelSim 的 完整用户界面如图3-6 所示。
4) ModelSim 窗口模块介绍 
  Main 主窗口 —— 在主窗口中, 可以通过 ModelSim> 提示符来浏览帮助文件、 编辑库、 编辑源代码, 而不用调用一个设计。 启动窗口 Design Menu → Load New Design 可用于选择要加载的设计和其他用于仿真的选项。   Wave 窗口 —— 在波形窗口中, 可通过波形浏览仿真结果的图形记录。 多个波形窗口可用于更多的逻辑信号观察; 可改变信号和向量的数 量, 以改善波形的显示; 可打印波形等。 
   Structure 窗口 —— 可实现设计的结构多层浏览, 使源窗口( Source )和信号窗口( Signals )等成为当前层。
   Source 窗口 —— 可从 Structure 窗口选择, 进行注释、 关键字、 字符串、 数字、 执行行、 标识符、 系统任务、 文本等完全的编辑; 显示所选的 HDL 项的信息; 检查显示所选 HDL 项当前仿真值。 
   Process 窗口 —— 显示外部和内部的处理功能。
   Signals 窗口 —— 紧接结构窗口( Structure ), 显示 Structure 窗口的当前层 HDL 项的名称和值等。 
   Dataflow 窗口 —— VHDL 信号或 Verilog 信号网络的图形描绘。
   List 窗口 —— 用表格显示仿真结果。
   Variables 窗口 —— 列出 HDL 项的名称, 显示到当前过程的路径等。
       
           图 3-6 ModelSim 完整用户界面

3.2.3 ModelSim 仿真过程 
   前面是对ModelSim的一个整体介绍,下面将通过一个具体实例来介绍 ModelSim 的具体使用方法和仿真的过程。

 1. 创建一个项目
   (1) 启动 ModelSim
      
         图 3-7 项目设立对话框

  (2) 在主窗口通过选择 File → New → Project → Create a Project 打开项目对话框。

  (3) 在项目对话框中键入 test 作为项目的名字, 并选择一个 项目存储的目录位置, 如 Actelprj , 并且缺省的库名设置为 work 。 设置完后的项目对话框如图 4-85 所示。

  (4) 点击 OK 按键, 将会看到带有空白 Project 和 Library 标签 的主窗口, 以及 Add itemsto the Project 对话框, 同时项目名称 也在工作空间下面的状态栏中出现。 项目选择页面如图 3-8 所示。
      
              图 3-8 项目选择页面

(5) 加设包含设计内容的源文件到项目中。 在 Add items to the Project 对话框中点击 Add Existing File , 在此以加一个VHDL文件为例。 点击 Browse 按键, 打开 ModelSim 安装目录下的实例目录, 从中选择 counter.vhd , 然后选中 Reference from current location 选项并且点击 OK 按键, 如图3-9所示。
         
          图 3-9 选择文件至当前项目栏
   (6) 在工具栏点击编译按键或在项目页面点击鼠标右键并选择 Compile → Compile All , 如图3-10 所示。 
   (7) 加入的文件被编译后, 点击 Library 标签,并且通过点击 “ + ” 图标展开 work 库, 将会看到被编译的设计例举单元(如图3-11 所示)。
   (8) 最后, 在 Library 页双击 counter ,将看到在工作空间中出现了一个新的页面,并且该页面显示了 counter 设计单元的结构。在此基础之上, 就可以开始运行仿真, 并可以分析调试该设计了。 至此, 项目创建完成。
         
           图 3 - 10 选择编译栏目

图 3-11 目标文件的显示

2. 设计的仿真过程 
   前面创建了一个项目, 在创建时它自动执行了创建并映射工作库(work)等操作。 下面介绍如何进行设计的仿真及其操作过程。
   1) 仿真前的准备工作 —— 设计文件的装载 
   (1) 通过选择 Simulate → Simulate 来装载设计单元, 接着出现了仿真对话框, 点击 “ work ” 下面的 “ + ” 扩展符号, 可以看到 counter 设计单元目录, 如图3-12所示。


          
图3- 12选择 Simulate 装载设计单元


图 3 -13 信号窗口菜单

  如果设计单元是空的, 则可以扩展它,以便浏览任何相关的结构。 选中 counter , 然后点击 Load 按钮来装载设计。
   (2) 从主窗口菜单中选择View →All Window来打开ModelSim的所有窗口。
   (3) 在信号窗口菜单中通过选择 Add → Wave → Signals in Region 来加载顶层信号到波形窗口中, 如图 3-13 所示。

2) 运行仿真 
   对于该计数器的仿真, 可通过加载激励信号到时钟信号输入端口, 开始运行仿真, 并通过观察相应端口的跟踪信号, 来判断电路的时序特性。 激励信号的加载主要有两种方式: ① 用 force 命令的人机交互式; ② 建立测试平台程序的方式。 
   (1) 点击仿真器主窗口, 并在主窗口的 VSIM 提示符下键入如下命令:
force clk 1 50 , 0 100 -repeat 100 ModelSim 会解释 force 命令如下:

  • 在当前时间 50 ns 后给时钟信号赋值为 1 ;
  • 在当前时间 100 ns 后给时钟信号赋值为 0 ;
  • 每间隔 100 ns 重复循环此操作。

  也可以在信号窗口菜单中选择 Edit → Clock , 进行信号的编辑。 该窗口如图 3-14 所示。
        
           图 3-14 信号窗口

  (2) 先选择 Run 按钮, 等运行完成后再选择 Run -All 。 
   Run 的功能是只执行仿真 100 ns 便停止仿真。 和此操作相同的功能的命令是 “ PROMPT: run 100 ” 或是 “ Main MENU: Simulate → Run → Run 100 ns ”。 
   Run -All 的功能是持续不断地运行仿真。 和此操作相同的功能的命令是 “PROMPT: run -all”或是“Main MENU: Simulate → Run → Run -All”。 为了停止运行仿真, 需执行下一步骤。
   (3) 在主或是波形窗口中选择 Break 按键终止仿真的运行。 只要仿真器到达了一个可接受的终止点, 它便停止运行。 和此操作相同功能的命令是 “ Main MENU: Simulate → Break ”。

3) 仿真结果的调试 
   (1) 声明调试方式。 为了查找错误所在, 可执行如下几步操作来追踪所声明的信息 : 
   ① 首先, 改变仿真声明选项。 从主窗口菜单中选择 Simulate → Simulation Options , 出现的画面如图 3-15 所示。 
         
       图3-15 仿真可选项( Simulation Options )菜单 
   ② 选择插入( Assertions )标签, 改变 Break on Assertion 的选项为 Error ,并且点击 OK 。这将使仿真器运行到 HDL 声明语句处便停止运行。
   ③ 用 restart -f 命令重新运行仿真。 -f 选项要求 ModelSim 重新运行时不弹出确认对话框。 通过 run 1000 命令再运行仿真1000 ns。
   ④ 如果观察变量窗口,可能看到i=6 ,这意味着仿真在test_patterns循环的第六次迭代时停止。
   ⑤ 通过点击 test_patterns 前面的 + 来展开变量名 test_patterns ; 通过点击 + 也展开了阵列 test_patterns (6)里的 第六个记录。 如果声明表明信号 sum 和变量窗口中的 sum 是不相 等的(注意输入 a 、 b 和 cin 的和应当与输出 sum 是相等的), 则 可判断在测试向量处存在一个错误。 为了改正此错误, 必须重 新运行仿真并调整测试向量的初始值。
   ⑥ 用 restart -f 命令重新运行仿真。
   ⑦ 通过选择过程窗口中的 test 过程来更新变量窗口。 在变量窗口中, 再展开 test_patterns 和 test_pattern (6)。 然后通过点击变量名来加亮和记录, 并从菜单处选择 Edit → Change 。
   ⑧ 改变值到 0000011 , 如图3-16 所示, 然后点击 Change 。 
     
           图3-16 改变所选变量 
   ⑨ 再运行仿真 run 1000 , 若显示如图 3-22 所示的结果, 则仿真被正确运行。  

 

(3) 在波形窗口中组合信号。
   在波形窗口中, 允许组合单一信号到总线形式。 通过选择 Tools → Combine Signals 打开组合选择信号对话框, 如图 3-17 所示。 总线信号是用专门顺序创建的带有专门值的虚拟信号的链接组合。 在下述实例的波形图里 4 个数据信号已经被组合形成了一个新的总线 Bus1 (如图 3-18 所示)。 虚拟目标被一个桔色的菱形方块指示着。

 图 3-27 组合选择信号对话框


图 3-28 仿真实例的波形图示意

  (4) 创建并浏览数据表( datasets ) 
   创建数据表可以允许浏览以前的仿真结果或是对比仿真结果。 为了浏览一个数据表, 必须以 WLF 文件的形式(使用 vsim -wlf 命令 ) 先保存ModelSim 仿真结果, 然后再打开它作为一个浏览模式数据表。

4) 波形窗口及波形显示

   (1) 光标的使用
   当波形窗口第一次打开时, 光标出现在时间 0 处。 在波形窗口处点击哪里, 光标将跟到哪里。 也可以通过选择 Insert → Cursor 来把光标添加到波形面板上。 被选中的光标以黑体实线显示, 所有其他光标以虚线显示。 为了 删除光标, 可首先选中它们, 再通过选择 Edit → Delete Cursor 完成。
   光标值对应于光标的仿真时间。 通过选择 View → Cursors 可以指定一个特殊的光标浏览; 也可以通过在光标值处双击光 标值来选择并且滚动到光标处。 每个光标下面的时间框里显 示 了仿真的精确时间。
   ModelSim 在相邻的光标位置处也加了一个增量显示, 表明 了这两个光标位置的时间差。如果在波形窗口中点击鼠标, 那么离鼠标最近的光标被选中, 并且移动到鼠标处。 确定多个光 标位置的另一种方法是在时间框中使用鼠标点击时间框轨迹的 任意处来选中光标, 并固定该光标到鼠标的位置。 如果在波形 边缘 10 个像素内点击或是拖动光标, 光标将被粘贴到波形边 缘。 也可以在窗口中的优选对话框中设置粘贴距离 (选择 Tools → Window Preferences )。 在波形底部的区域, 也可以不 采用拖动粘贴的方式来确定光标的位置。

    (2) 改变波形的显示范围。
   在波形显示窗口, 可以通过 Zoom 菜单、 工具栏按钮、 鼠标、 键盘来改变波形的显示范围。
   在 Zoom 菜单中, 如果选择 Zoom In , 则增加了波形的分辨率, 但减少了波形的可见范围 ; 选择 Zoom Out 则正好与之相反 ; 选择 Zoom Full 显示从 0 到目前时间的整个仿真波形; 选择 Zoom Last 重复上次缩放显示 ; 选择 Zoom Range 打开一个对话框, 允许确定波形显示的起始时间和结束时间。 也可以用图 3-26 所示的工具栏按钮来做相同的工作。

(3) 在波形窗口中组合信号。
   在波形窗口中, 允许组合单一信号到总线形式。 通过选择 Tools → Combine Signals 打开组合选择信号对话框, 如图 3-17 所示。 总线信号是用专门顺序创建的带有专门值的虚拟信号的链接组合。 在下述实例的波形图里 4 个数据信号已经被组合形成了一个新的总线 Bus1 (如图 3-18 所示)。 虚拟目标被一个桔色的菱形方块指示着。

 图 3-27 组合选择信号对话框


图 3-28 仿真实例的波形图示意

  (4) 创建并浏览数据表( datasets ) 
   创建数据表可以允许浏览以前的仿真结果或是对比仿真结果。 为了浏览一个数据表, 必须以 WLF 文件的形式(使用 vsim -wlf 命令 ) 先保存ModelSim 仿真结果, 然后再打开它作为一个浏览模式数据表。

你可能感兴趣的:(功能仿真与时序仿真,及Modelsim的使用)