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 , 对于Verilog 代码用vlog-work.v.v,文件按出现的先后顺序编译,且支持增量编译。编译后的文件会放在缺省当前work 库中。
(3)启动仿真器
该步骤主要是把所有仿真的文件加载到当前的仿真环境中。实现的方法两种,一是通过菜单Design→Load Design,出现加载对话框,选择要仿真的程序即可;二是通过命令行的形式vsim-lib , 这条命令对于VHDL 和Verilog 都一样。
(4)执行仿真
该步骤是正式执行仿真了,在仿真前最重要的一个步骤就是加载激励,如要对下面的加法器进行仿真,加法器实体说明如下:
entityAdd is
port(D1: in std_logic_vector(7 downto 0);--输入
D2: in std_logic_vector(7 downto 0);--输入
D0: out std_logic_vector(7 downto 0);--输出
CE: in std_logic;-使能,低有效
Clk: in std_logic);--时钟
endAdd;
测试激励的加载
激励的加载有四种方法:
(1)命令行方式
这种方法是通过在命令行下直接输入命令给信号加载激励,然后进行仿真。如要对上面的加法器进行仿真,则输入如下命令:
Vsim –t ps work.add
//加载work 库中的实体add,时间分辨率为ps
Add wave –hex D1
Add wave –hex D2
Add wave –hex D0
Add wave ce
Add wave clk
//把信号加载到波形窗口,hex 表示以16进制显示
Force ce 0 //对ce 加激励为0
Force clk 0 0,1 25 –r 50 //对clk 加载激励
Force D1 16#2 //对D1 加载16 进制数2
Force D2 16#1 //对D2 加载16 进制数1
Run 100 //运行100 个时间单位
如果要仿真其它数据,在命令行中改变激励
就可以了,仿真的结果如图2 所示。
(2)宏文件法
这种方法相当于DOS 的批处理。它把所有的命令保存为以do 为后缀名的文件中,称为宏文件。执行仿真时只要选择菜单Marco → ExecuteMarco,然
- 全数字三相晶闸管触发器IP软核设计(06-22)
- 一种AES密码算法的硬件实现(10-29)
- 可重组多功能大数运算器的小规模硬件实现(12-08)
- 基于IP核的FIR低通滤波器的设计与实现(11-10)
- ModelSim功能及使用入门(03-26)
- 易懂的modelsim学习笔记(11-02)