1 / 77

ModelSim —— 仿真验证工具

ModelSim —— 仿真验证工具. Liu Dahai Catherineliu@acconsys.com. 典型的设计流程. 内容提要. ModelSim 简介 用户界面 用 ModelSim 进行仿真 基本仿真步骤 添加激励 使用宏文件 保存和恢复仿真状态 Modelsim.ini 文件 Startup.do 文件 先进功能. ModelSim 仿真器. 业界使用最广泛的 HDL 语言仿真器之一 能够进行 VHDL 仿真和 Verilog 仿真,以及这两种语言的混合仿真 OEM 版不支持两种语言的混合仿真.

Download Presentation

ModelSim —— 仿真验证工具

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ModelSim ——仿真验证工具 Liu Dahai Catherineliu@acconsys.com

  2. 典型的设计流程

  3. 内容提要 • ModelSim简介 • 用户界面 • 用ModelSim进行仿真 • 基本仿真步骤 • 添加激励 • 使用宏文件 • 保存和恢复仿真状态 • Modelsim.ini文件 • Startup.do文件 • 先进功能

  4. ModelSim 仿真器 • 业界使用最广泛的HDL语言仿真器之一 • 能够进行VHDL仿真和Verilog仿真,以及这两种语言的混合仿真 • OEM版不支持两种语言的混合仿真

  5. Complete Standard Support • Verilog • IEEE 1364-1995, 1364-2001, System Verilog • PLI 1.0 & 2.0 • VCD, Extended VCD • VHDL • IEEE 1076-1987, 1076-1993 • 1164-1993 • 1076.2-1996 • VITAL • 2.2b • IEEE 1076.4-1995, 1076.4-2000 • SDF • 1.0 to 3.0

  6. PE versus SE ModelSim PE ModelSim SE ModelSim SE Kernel ModelSim PE Kernel Performance Analyzer C Debugger* *Beta in 5.6 Enhanced Dataflow Window Enhanced Dataflow Window Code Coverage Code Coverage Optional Waveform Compare Waveform Compare GUI Viewer GUI Viewer

  7. 源代码窗口 (source) 主窗口 (main) 结构窗口 (structure) 波形和列表窗口 (wave & list) 进程窗口 (process) 信号和变量窗口 (signals & variables) 数据流窗口 (dataflow) ModelSim的用户界面 Vsim>View *

  8. 用户界面的特点 • 有九种窗口:main, structure, source, signals, process, variables, dataflow, wave, list • 选择菜单view • 每个窗口都可以有多个副本 • 支持拖放操作 • 在一个窗口中选中HDL条目,运用鼠标器左键,可以把这些条目从一个窗口拖放到另一个窗口 • HDL条目可从下列窗口中拖出:Dataflow, List, Signals, Source, Structure, Variables,Wave • 它们可以被拖进List或Wave窗口中 • 例如:可以在Structure窗口中选中指定信号,然后将其拖进Wave窗口中进行观察

  9. 主窗口 • 设计加载以前,提示符为ModelSim> • 无需加载设计,可以查看帮助,编辑库,编辑源代码 • 设计加载以后,提示符为VSIM> • 记录仿真器动作 • 命令 • 消息 • 断言声明

  10. 主窗口:库 • 添加新库 • 选择菜单File > New > Library • 查看和编辑已存在的库

  11. 主窗口:启动窗口 • 用于选择要加载的设计 • 可以选择: • 时间精度 • 对于每个时间单位都支持1,10和100乘积因子 • 含有顶层设计单元的库 • 顶层设计单元 • Entity/Architecture • Configuration • Module • 选择菜单Simulate > Simulate… Cmd) vsim <library_name> <top_level_design_unit>

  12. 主窗口:选项窗口 • 选择菜单 Simulate > Simulation Options …

  13. 结构(structure)窗口 • 设计结构的层次化视图 • VHDL(方)- Package,component实例,generate和block声明 • Verilog(圆)- module实例,命名的fork,命名的begin,task和function • 实例标号, entity/module, architecture • 作为source和signals窗口的当前区域,更新process和variables窗口 Cmd) viewstructure

  14. 源代码(source)窗口 • 显示的代码对应于structure窗口 • 提供Options菜单,可控制源代码的显示方式 • 代码分色显示 • 提供完善的编辑功能 • 支持拖放操作 • 可设置断点 • 可单步运行代码 • 提供Discribe/Examine功能(见下页) Cmd) viewsource

  15. 1) 高亮选中signal, variable, constant, wire, 或reg 2)用鼠标器右键点击 或者 选择菜单Object -> Examine/Description 源代码(source)窗口 • Describe • 显示所选HDL条目的信息 • Examine • 显示所选HDL条目的当前仿真值

  16. 进程(process)窗口 • 显示明显的和隐含的进程 • 选择菜单View -> • Active • 显示当前仿真周期要执行的所有进程 • 选择菜单View -> • In Region • 显示在structure窗口中选定范围内的所有进程 Cmd) viewprocess

  17. 进程(process)窗口 • 指示符 • <Ready> • 进程准备执行 • <Wait> • 进程正在等待VHDL信号或Verilog网线发生改变,或者一段指定时间 • <Done> • 进程执行了VHDL无时限等待语句,或者没有敏感量列表

  18. 信号(signals)窗口 • 内容可随structure窗口选定内容改变 • 显示structure窗口当前范围内HDL条目的名称和值 • 排序 -升序排列,降序排列或按声明顺序排列 • 层次化 - (+)可扩展, (-)已扩展 • VHDL信号 • Verilog网线,寄存器变量和命名事件 • 支持拖放操作 • Wave和List窗口 • 强制赋值(Force) • 添加激励 • 过滤器 • 选择要查看的信号类型(输入,输出,内部信号等等) Cmd) viewsignals

  19. 变量(variables)窗口 • 列出HDL条目的名称 • VHDL - constants, generics和variables • Verilog - register variables • 当前进程的路径显示在左下角 • 树型结构 - (+)可扩展, (-)已扩展 • 排序-升序排列,降序排列或按声明顺序排列 • 可查看或改变所选HDL条目的值 Cmd) viewvariables

  20. 数据流(dataflow)窗口 • 对VHDL信号或Verilog网线进行图示化的跟踪 • 驱动信号或网线的进程位于左边 • 读取信号的进程或被网线触发进程在右边 • 进程 • 被读取的信号或触发该进程的网线在左边 • 被进程驱动的信号或网线在右边 • 内嵌波形窗口 Cmd) viewdataflow

  21. Enhanced Dataflow Window Find Cause of Unknown with ChaseX Processes Linked to Source Window Selecting Process Updates Source & Signals Window Values Linked to Active Cursor Embedded Waveform Window

  22. 波形(wave)窗口 • 查看仿真结果的波形 • VHDL - 信号和进程变量 • Verilog -网线,寄存器变量,命名事件 • 支持拖放功能 • 支持多窗口,便于更好地对信号进行逻辑分组 • 可改变信号和向量的基数,提高可读性 • 波形可打印 Cmd) viewwave

  23. 列表(list)窗口 • 以表格形式显示仿真结果 • VHDL - 信号和进程变量 • Verilog -网线和寄存器变量 • 支持拖放功能 • 编辑功能-查找和搜索 • 创建用户定义的总线 • 选择菜单 Edit -> Combine • 可设置触发和选通属性 • 可选择保存列表格式-表格,事件或TSSI格式 • 标记功能-添加,删除或跳转 Cmd) viewlist

  24. 演 示 在 FPGA Advantage中 调用ModelSim进行仿真

  25. 用 ModelSim 进行仿真

  26. ModelSim的运行方法 • 交互式命令行(Cmd) • 命令行控制台是唯一的接口,没有图形界面 • 图形界面(UI) • 可以接受菜单输入和命令行输入 • 本教程主要讨论这种方式 • 批处理模式 • 在DOS或UNIX提示符下运行批处理文件 • 不在本教程讨论范围内

  27. 基本仿真步骤 • 1 建库(物理库) • 2 将逻辑库映射到物理库 • 3 编译源代码 -所有HDL代码必须经过编译才能进行仿真 -Verilog和VHDL的编译命令不同 • 4 启动仿真器 • 5 运行仿真器

  28. 1 建库 UI)选择主窗口中的菜单: File -> New >Library Cmd)在主窗口命令提示符(Modemsim>)下键入: vlib <library name>

  29. 建库(图形界面) 选择a new library only并键入库名 该命令在当前路径下创建一个库子目录 -> vlib lpm_sim

  30. ModelSim的库 • 库是含有已编译设计单元的目录 • VHDL和Verilog都会编译到库中 • 库有两种类型 • 工作库 (缺省为work) • 含有经过编译的当前设计单元 • 执行编译操作以前必须创建工作库 • 每次编译只需一个工作库 • 资源库 • 含有当前设计所引用的设计单元 • 每次编译可以有多个资源库 • VHDL库可以通过LIBRARY和USE语句进行引用

  31. 主单元 • 在同一个库中必须具有唯一的名称 • VHDL • Entities • Package Declarations • Configurations • Verilog • User Defined Primitives • Modules • 从单元 • 在同一个库中可以有相同的名称 • VHDL • Architectures • Package bodies • Verilog • 没有从单元 ModelSim的设计单元

  32. VHDL预定义的库 • VHDL • std库含有standard包和textio包 • 对于新手来说,不要去修改这些包 • IEEEpure • 只含有IEEE批准的std_logic_1164包 • 已为仿真作了优化加速 • IEEE • 含有预编译的Synopsys和IEEE算术包 • 基于std_logic类型 • 已为仿真作了优化加速

  33. 映射逻辑库名 • 必须将逻辑库名映射到库的路径上 • 库的路径中所含文件必须已经过编译 • 支持相对路径,绝对路径和软路径名 • 所有不在工作目录中的库都需要这样做 • 使用vmap命令

  34. 2 映射逻辑库名 • 语法:vmap <logical_name> <directory_path> • Cmd)在主窗口命令提示符(Modemsim>)下键入: • vmapmy_work c:/my_design/my_lib • UI)选择结构窗口中的库: • 弹出菜单-> Edit 浏览库目录

  35. 映射已存在的库(UI) 选择a new library and a logical mapping to it 并键入库名 该命令在当前路径下创建一个库子目录,然后对它进行映射 ->vlib my_lib ->vmap my_lib my_lib

  36. 其他与库相关的命令 • vdel • 可将一个库完全删除,或从一个库中删除一个设计单元 • UI)Design -> Library Browser(删除库或映射) • UI)Design -> View Library Contents(删除设计单元) • Cmd)vdel -lib <library_name> <design_unit> • vdir • 显示所制定的库中的内容 • UI)Design -> View Library Contents • Cmd)vdir -lib <library_name>

  37. 3 编译源代码(VHDL) • UI)Compile -> Compile • Cmd)vcom -work <library_name> <file1>.vhd <file2>.vhd • 文件按列出的顺序编译 • 编译顺序/依赖关系(见下页) • 默认规则为‘87 VHDL • UI)使用Default Options按钮可设置为‘93 • Cmd)使用 –93 选项(必须为第一个参数) • 缺省编译到work库中 • 例:vcom -93 my_design.vhd

  38. VHDL设计单元之间的依赖关系 • Entity要在Architecture之前编译 • Package Declaration要在Package Body之前编译 • 设计单元必须在被引用之前编译 • Packages要在Entity/Architectures使用它们之前编译 • Entities/Configurations要在Architectures引用它们之前编译 • 最后编译Configurations

  39. 3 编译源代码(Verilog) • UI)Compile -> Compile • Cmd)vlog -work <library_name> <file1>.v <file2>.v • 文件按列出的顺序编译 • 编译顺序无关紧要 • 支持渐进式编译 • 缺省编译到work库中 • 例:vlog my_design.v

  40. Verilog渐进式编译 • 只编译发生改变的设计单元 • 自动编译或手动编译 • 手动编译更高效 • 自动编译在命令行使用 –incr 选项 • Module和UDP的实例化,以及层次化的引用将在仿真的时候解决 • 有些错误可能不能在编译的时候发现 • 被引用的Modules没有编译 • 错误的端口连接 • 错误的层次化的引用

  41. 编译 选中一个或多个文件,然后按 Compile 按钮

  42. 出错信息 出错信息出现在主窗口中 双击出错信息,源代码窗口中将高亮显示造成错误的代码 verror 675

  43. 4 启动仿真器 • UI)Simulate -> Simulate • Cmd)vsim -lib <library_name> <top_level_design> • VHDL • vsim top_entity top_architecture • 仿真Entity/Architecture对 • 也可以选择一个Configuration • Verilog • vsim top_level1 top_level2 • 仿真多个顶层Modules

  44. 启动仿真器(UI) 选择库 选择顶层module或entity/architecture 选择仿真精度

  45. 启动仿真器(UI) 指定SDF文件 键入需应用定时信息的设计层次(如果不是顶层设计的话)

  46. vsim命令参数 • 参数 • -t<time_unit> • 指定仿真时间精度 • 单位可以是 {fs, ps, ns, ms, sec, min, hr} • 如果使用了 Verilog中的‘timescale编译指令,仿真将使用所有设计文件中最小的时间精度 • 该参数是可选的 (默认值是ns) • -sdfmin | -sdftyp | -sdfmax <instance>=<sdf_filename> • 标注SDF文件 • 该参数是可选的 • 实例名也是可选的;如果没有指定,SDF将用于顶层设计

  47. 5 运行仿真器 • UI)Run • Cmd)run <time_step> <time_units> • 可按指定时间步长运行仿真器

  48. 运行仿真器 选择时间步长,然后运行仿真器 Restart -重新装载任何已改变的设计元素,并重置仿真时间为0 Cmd) restart

  49. run命令参数 • 可选参数 • -<timesteps><time_unit> • 指定运行的时间步长 • 单位可以是{fs, ps, ns, ms, sec} • -step • 执行到下一个HDL表达式 • -continue • 在–step或断点之后继续执行余下的仿真 • -all • 运行仿真器,直到不再有事件发生

  50. run命令例子 • run1000 • 从当前位置开始,仿真器运行1000个时间单位 • run 2500 ns • 从当前位置开始,仿真器运行2500ns • run @3000 • 仿真器运行到3000个时间单位的时刻停止

More Related