modelsim入门--从安装到第一个程序

由于数电实验课程,需要使用modelsim这个古老的软件,用verilog语言实现数字电路逻辑,初步要求实现仿真即可。


1、下载与安装

Modelsim软件安装及高云库编译--小梅哥 本人根据视频前九分钟内容下载modelsim安装包(10.7版本)并破解,涉及链接--【软件工具合集2】 Powered by Discuz!;注意,视频中添加library等内容无需操作。

注:唯一的困难可能是百度网盘无敌的下载速度问题。

2、新建工程

复制代码
练习 3:MinMax 电路  
需要设计并编码一个计算最小值和最大值的组合电路。这个电路要符合下面实体声明。  
  
module MinMax(  
   input Min0Max1,  
   input [3:0] X,  
   input [3:0] Y,  
   output reg [3:0] Z  
);  
endmodule  
  
1. 当 Min0Max1 为 0 时,Z 是 X 和 Y 中的最小值(Min),当 Min0Max1 为 1 时,Z 是 X 和 Y 中的最大值(Max)。注意,我们将 X、Y 和 Z 视为无符号二进制数向量。  

2.你也可以在minmax_tb.v 中找到testbench,将下面的minmax_tb.v文件和你的编写的.v程序一起编译,可以获得电路的仿真结果。

3.请提交你编写代码的全屏截图和仿真结果的全屏截图。

接下来我们来完成这个任务。

首先,手动在资源管理器中新建一个文件夹,名字最好用英文,且不要数字开头,比如我新建一个code3的文件夹在桌面。

打开我们的modelsim,左上角file--new--Project...,如果有已经打开的工程,会提示你直接关掉这个工程,按需求确认即可。

之后,输入Project Name--MinMax,Project location--刚才新建的code3路径,其余保持默认即可,然后点击OK。

之后弹出Add界面,选择Create New File,不妨取名字t3,选择类型Verilog,然后同理新建一个t3_test,前者用于定义用到的module,后者写测试程序。

之后左键双击t3.v文件,打开右边的编辑页面。

3、第一个程序(compile/simulate)

verilog 复制代码
// t3.v
module MinMax(
    input Min0Max1,
    input [3:0] X,
    input [3:0] Y,
    output reg [3:0] Z
);

    always @(*) begin
        if (Min0Max1 == 0) begin
            // 求最小值
            if (X < Y)
                Z = X;
            else
                Z = Y;
        end
        else begin
            // 求最大值
            if (X > Y)
                Z = X;
            else
                Z = Y;
        end
    end

endmodule

该文件定义了MinMax的module,包含了MinMax 的端口声明以及数据流(DATAFLOW)架构,后者其实就是always寻找最大最小值的那部分代码,即标志位Min0Max1为0时求最小值,为1返回最大值Z。数据都是4bit的数。

verilog 复制代码
//t3_test.v
`timescale 1ns/1ps

module MinMax_tb;
    reg Min0Max1;
    reg [3:0] X, Y;
    wire [3:0] Z;

    MinMax uut (
        .Min0Max1(Min0Max1),
        .X(X), .Y(Y), .Z(Z)
    );

    initial begin
        // 测试最小值模式
        Min0Max1 = 0; X = 4'd3;  Y = 4'd7;  #10;  // Z 应为 3
        Min0Max1 = 0; X = 4'd12; Y = 4'd5;  #10;  // Z 应为 5
        Min0Max1 = 0; X = 4'd9;  Y = 4'd9;  #10;  // Z 应为 9
        Min0Max1 = 0; X = 4'd0;  Y = 4'd15; #10;  // Z 应为 0

        // 测试最大值模式
        Min0Max1 = 1; X = 4'd3;  Y = 4'd7;  #10;  // Z 应为 7
        Min0Max1 = 1; X = 4'd12; Y = 4'd5;  #10;  // Z 应为 12
        Min0Max1 = 1; X = 4'd9;  Y = 4'd9;  #10;  // Z 应为 9
        Min0Max1 = 1; X = 4'd0;  Y = 4'd15; #10;  // Z 应为 15

        $stop;
    end
endmodule

这个verilog文件使用了MinMax的module,然后编写了测试逻辑,即通过编辑激励来仿真;之后我们就simulate这个文件。

细节1:一定要先ctrl+s先保存两个文件,然后再compile编译,不然编译的是空文件,导致后面的work没有可以simulate的文件。

可以在上边栏选择编译选项,也可以右键文件选择编译,也可以最本质的命令行编译,之后文件上的红色问号变成了绿色对号。

编译完成后,点击上栏的Simulate--Start Simulation

首先点击左下角的Optimization Option选项,确保选择的Apply full visibility...而不是No design object visibility,不然下一步向wave中添加object却发现没有。

之后在刚才的simulate页面选择work中的MinMax_tb文件(这个文件只有成功编译才会生成,如果没保存就编译则无),点击OK。

4、查看波形

然后尝试查看波形,点击上栏View--wave

然后按图中操作,向wave中添加object,

之后在上栏中直接点击run,或者根据代码要求,手动在终端输入命令,比如run 100ns,因为我的测试程序波形跑了80ns,但是直接run只会跑100ps。

通过波形图黄色线所在时刻可以看到,Min0Max1=0挑选最小值;而X=4'hc,即4bit的十六进制数c,即十进制数12,而Y=5,则选择较小值幅值给Z,Z=5符合代码逻辑。成功了!

ctrl+鼠标滑轮可以条件时间轴缩放。

相关推荐
坏孩子的诺亚方舟6 天前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
FPGA小徐6 天前
入门 CNN 结构全解析|从流程图理论到 FPGA Verilog 硬件实现(含习题带讲解)
fpga开发
FPGA小徐6 天前
FPGA 数字信号处理:并行 FIR 与串行滤波器设计原理、对比与完整 Verilog 实现
fpga开发
Saniffer_SH7 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
zlinear数据采集卡7 天前
双核架构深度解析:ARM+FPGA如何让数据采集卡实现500Ksps高性能?
arm开发·fpga开发·架构
9527华安7 天前
FPGA实现GTH Transceivers Wizard传输2路视频,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持
fpga开发·gth·aurora 8b10b·transceivers
FPGA小徐8 天前
FPGA 数字信号处理(二):并行 FIR 滤波器的 Verilog 全流程设计与实现
fpga开发
国科安芯8 天前
基于AS32S601ZIT2型抗辐照MCU的商业航天卫星姿态确定与控制系统研究
单片机·嵌入式硬件·安全·fpga开发·架构·risc-v
ALINX技术博客8 天前
【黑金云课堂】FPGA技术教程FPGA基础:I2C 总线通信技术
fpga开发·i2c
Hello-FPGA8 天前
Xilinx KU040 FPGA Camera Link 图像采集
c++·fpga开发