ModelSim仿真实例教程

       ModelSim是Mentor的子公司Medel Technology的一个出色的Verilog HDL/VHDL 混合仿真软件,它属于编译型仿真器(进行仿真前必须对HDL源码进行编译),方针速度快,功能强。

       下面简单介绍一下ModelSim仿真实例教程。以BCD码加法器为例。


1、 启动ModelSim


ModelSim仿真实例教程_第1张图片


2、首次运行ModelSim时,在建立project 前,需要先建立一个工作库(library),一般将这个library命名为work,project一般都是在这个work下面工作的。

      File\new\library,弹出对话框是否创建work library,点击OK创建成功。


ModelSim仿真实例教程_第2张图片


创建界面如下图:


ModelSim仿真实例教程_第3张图片


3、新建工程 File\new\project ,点击OK创建成功。


ModelSim仿真实例教程_第4张图片


创建界面如下图:


ModelSim仿真实例教程_第5张图片


注意 ProjectLocation 为项目存储位置,自定义创建项目存储位置文件夹为  ModelSim_workSpace ,若文件夹已存在则直接保存,若不存在,则按提示 creat 目标文件夹即可。


ModelSim仿真实例教程_第6张图片


4、创建工程。


4.1 导入工程测试文件。以BCD码加法器源码为方针文件,直接从quartus II 的workspace中导入代码,即Add Existing File(添加已存在文件)


ModelSim仿真实例教程_第7张图片


如下图:


ModelSim仿真实例教程_第8张图片


注意:界面中Reference... & Copy... 两项,前者便于修改和调试代码,老司机可选;后者是直接将BCD.v 复制到 ModelSim_workSpace(ModelSim工作区)里面,初学者可选


ModelSim仿真实例教程_第9张图片


BCD码加法器源码如下: 分别使用assign 和 always 语句描述。


module BCD(A,B,Sum,Cout);
	input [3:0]A,B;
	output [3:0]Sum; 
	output Cout;
//	reg [3:0]Sum;
//	reg Cout;
	wire [4:0]Temp;
	
	assign Temp = A + B;
	assign {Cout , Sum} = (Temp > 9 )? Temp +6 : Temp;
	
/*	always@(A or B)
		begin
		{Cout , Sum} = A + B;
		if({Cout , Sum} > 9 )
			{Cout , Sum} = {Cout , Sum} + 6;
		end
*/
	
endmodule
	

4.2 创建工程中的被测试文件。

ModelSim仿真实例教程_第10张图片

被测试文件代码如下:

`timescale 1ns/1ns    //时间标尺定义 ·timescale <时间单位>/<时间精度>
module BCD_tb;        //BCD_TB、BCD_tb、BCD_TB1 名称可不相同
  reg [3:0]addend1,addend2;   //输入激励信号定义为reg型
  wire [3:0]sum;
  wire C;                     //输出信号定义为wire型
  
  parameter DELAY = 100;      //
  integer i,j;
  
  BCD U1( .A(addend1),
          .B(addend2),
          .Cout(C),
          .Sum(sum)
          );    // BCD UI(addend1,addend2,sum,C);  该调用方法注意顺序不能颠倒
                //调用测试对象
          
  initial       //激励波形设定(初始化)
  begin
    addend1 = 0;  
    addend2 = 0;
    for(i = 0;i < 10;i = i + 1)
    for(j = 0;j < 10;j = j + 1)
    begin
      #DELAY addend1 = i;
             addend2 = j;
    end
  end
  
  initial
  $monitor($time,,,"%d + %d = %d , carry = %d ",addend1,addend2,sum,C);
  //输出格式定义
  //$monitor("格式控制符“,输出变量名列表);   
  /* ===>每次信号的值发生变化,都会激活该语句,并显示当前仿真时间
   可看作一个持续监控器,可在transcript下查看wave的仿真结果。 */

endmodule


将被测试文件保存至 ModelSim_workSpace 自定义工作区内,此处文件名可不同与工程名,如BCD_TB1。

ModelSim仿真实例教程_第11张图片

4.3 在project区单击右键,如下图, 将被测试文件 BCD_TB1 添加至工程 project 中。

ModelSim仿真实例教程_第12张图片

在ModelSim_workSpace中选择被测试文件点击 OK 添加

ModelSim仿真实例教程_第13张图片

添加成功界面如下:

ModelSim仿真实例教程_第14张图片/

project区中BCD_TB1.v & BCD.v 两个文件的位置也可以调换

ModelSim仿真实例教程_第15张图片

如下图:

ModelSim仿真实例教程_第16张图片

5、 编译仿真文件,右键单击Compile/Compile All

ModelSim仿真实例教程_第17张图片

若编译成功,则project区 BCD.v & BCD_TB1.v 的状态 (status) 显示为  

ModelSim仿真实例教程_第18张图片

6、开始仿真

ModelSim仿真实例教程_第19张图片

在start simulation /work 选择被测试文件 BCD_tb 进行仿真

ModelSim仿真实例教程_第20张图片

在仿真界面中,将输入输出添加至wave中以观察仿真结果。

ModelSim仿真实例教程_第21张图片

将输入输出信号转换为无符号数便于观察

ModelSim仿真实例教程_第22张图片

7、一切准备就绪,,,运行工程

ModelSim仿真实例教程_第23张图片

运行结果在wave中可查看 view/wave

ModelSim仿真实例教程_第24张图片

结果如下图:

ModelSim仿真实例教程_第25张图片

另外,任何操作都可以用命令实现。如在 transcript 区中 输入命令 run -all 运行,$monitor的持续监控功能使得输出结果可以文本形式在transcript中查看

ModelSim仿真实例教程_第26张图片

ModelSim仿真实例教程_第27张图片


8、一个完整的仿真过程需要有头有尾,仿真完成后结束仿真,同样也可以使用命令 quit -sim 结束仿真,事实上在鼠标操作的过程中 在 transcript 区也会显示相应的命令

    不信你可以试试啊!


ModelSim仿真实例教程_第28张图片


============================================================================================================
*****************************************************************************************************************************************************************
============================================================================================================

                                                                                                         OVER!!!


你可能感兴趣的:(仿真软件)