ModelSim入门教程和两个典型例子

1 ModelSim入门教程

在这里插入图片描述
在这里插入图片描述

  1. 使用LiberoSoc+ModelSim进行FPGA设计的前仿真
  2. 使用ModelSim进行FPGA设计的功能仿真

ModelSim是Model Technology(Mentor
Graphics的子公司)的HDL硬件描述语言的仿真软件,该软件可以用来实现对设计的VHDL、Verilog HDL
或是两种语言混合的程序进行仿真,同时也支持IEEE常见的各种硬件描述语言标准。
无论是从使用界面和调试环境,还是从仿真速度和效果上看,ModelSim都可以算的上是业界比较优秀的HDL语言仿真软件。它是唯一的单内核支持VHDL和Verilog
HDL混合仿真的仿真器,是做FPGA/ASIC设计的RTL级和门级电路仿真的好选择,它采用直接优化的编译技术,Tcl/Tk技术和单一内核仿真技术,具有仿真速度快,编译的代码与仿真平台无关,便于IP核的保护和加快错误程序定位等优点。

ModelSim不仅可以用于数字电路系统设计的功能仿真,还能用于时序仿真。一般在ModelSim创建工程的步骤包括创建工程、编写或者添加源代码、编译、启动仿真器、debug与分析。

2 组合逻辑电路的功能验证

本部分和第三部分分别是 ModelSim-TestBench完整设计方法及实例4.1和4.2部分功能验证和时序验证的实例,顺便通过两个实例练习ModelSim的基本使用。

2.1 两位二进制全加器

要求:设计一个两位二进制全加器,全加器的A和B两个是1位二进制加数的输入端,CI是低位来的进位输入端,CO是向高位进位的输出端,SO是全加器的本位和值。

全加器Verilog代码:adder.v

module adder( so, co,a, b, ci );
input a, b, ci;
output so, co;
wire a, b, c, co,so;
assign {co, so} = a + b + ci;

endmodule

代码中co是进位,so是相加之后的本位值。 input、output、inout预设值都是wire型,因此第四行代码可以省略。

全加器TestBench代码:adder_tb.v

`timescale 1ns/1ns
module adder_tb;
wire so,co;
reg a,b,ci;

adder U(.so(so),.co(co),.a(a),.b(b),.ci(ci));

initial // initializes the register variable to a definite value of one 

begin 
    #20 a=0;b=0;ci=0;
    #20 a=0;b=0;ci=1;
    #20 a=0;b=1;ci=0;
    #20 a=0;b=1;ci=1;
    #20 a=1;b=0;ci=0;
    #20 a=1;b=0;ci=1;
    #20 a=1;b=1;ci=0;
    #20 a=1;b=1;ci=1;
    #20 $stop;
end
endmodule

仿真结果及分析
二位加法器的组合逻辑仿真结果如下:
仿真结果
分析:从上图可以看出a+b+ci确实是等于co+so的,而且上述仿真结果可以看出a,b,c的八种输入均以真值表的形式输入,输出也是符合预期的。

程序解读
第一次看代码,务必尽量看懂每一行。这样后续再看其他代码就会发现只需要补充记忆,而且补充记忆的会越来越少。

    1. 首先看程序第二行的
`timescale1ns/1ns

这句代码,这个是时间尺度指令,它是用来定义模块的仿真时间单位和时间精度的,其使用格式为:`timescale 仿真时间单位/时间精度,一般新建文件的模板也会有提示。

//`timescale <time_units> / <precision>

用于说明仿真时间单位和时间精度的数字只能是1、10或100,不能为其它的数字,单位可以是s、ms、us、ns、ps和fs。单位换算关系为:1 s = 10e3 ms = 10e6 us = 10e9 ns = 10e12 ps。

仿真时间单位是指的模块仿真时间和延时的基准单位,也就是说只有定义了仿真时间单位,程序中的延时符号"#"才有意义,如程序中的一行 #20 a = 0; b = 0; c = 0; 前面的 #20 就是延时20个时间基准单位,按照程序中的1ns这个基准,就延时了20个ns。需要说明的是该行程序的下一行 #20 a =0; b = 0; c = 1; 前面的延时20个ns是相对于前一个的延时来说的,也就是第二行在第一行完了之后延时20ns执行。这时候再看看仿真的波形图就不难理解最开始的线为什么是红色而不是正常的绿色的原因了,因为我们在程序中begin的下一行就是 #20 a =0; b = 0; c = 0; 它前面的延时20个ns是相对于begin的延时,也就是说程序开始的时候是什么都不做的,输出为不确定的值,过了20个ns才将全0赋给了a、b和ci,这个时候才是最开始的绿线的部分。

因此,如果我们把begin……end模块的最后一行

#20 $stop;

中的“#20”去掉,就观察不到仿真结果的最后一个输入的结果,就是下图蓝色圈中的部分。
在这里插入图片描述

    1. 用元件例化语句
adder U(.so(so),.co(co),.a(a),.b(b),.ci(ci));

把全加器设计电路嵌入到Test Bench程序中。引用模块时端口可以通过以下两种方式连接。
(1)adder U(so, co, a, b, c);
这种方式U(so, co, a, b, c)严格按照adder模块中的端口顺序连接,好处是不用标明原模块的端口名,但是必须严格对应。
(2)adder U(.a(a),.b(b),.ci(ci),.so(so),.co(co));
这种方式不要求严格对应,直接用“.端口(连接信号)”的形式表示,好处是提高了程序的可移植性和可读性。

    1. 程序的后面有一句
 #20 $stop; 

这个是一个系统任务,用来暂停仿真过程的,将控制权交还给用户,用户在取得控制权以后可以输入其它的控制命令或者查看仿真结果等,之后可以从暂停的地方恢复仿真过程。$stop有两种表达形式,带参数的和不带参数的:

$stop;
$stop(n); //n可以取0、1或2

  • 不带参数的$stop等同于$stop(0),在暂停时不输出任何信息;
  • $stop(1)在暂停时输出当前仿真时刻和暂停处在程序中的位置;
  • $stop(2)不仅有$stop(1)的作用,还能输出仿真时占用内存大小和CPU时间。

为了测试$stop指令,将TestBench代码增加了几个stop断点,每次运行到stop断点时,在Transcript中输入run,运行的过程如下图示。
stop断点测试通过设置断点和$stop(0)可以发现,两个是一模一样的,即$stop(0\1\2)指令是采用Breakpoint的方式暂停的,不同的是$stop指令能输出运行时间、占用内存等更多的消息。

而用于退出仿真过程的系统任务是$finish,我们在点击Run(开始运行)的时候,系统会询问我们是否要结束仿真,假如我们选"是",这个系统任务会把ModelSim软件在完成仿真后关闭,假如我们选"否",则可以继续留在仿真界面。

3 时序逻辑电路的功能验证

3.1 八位加法器

源程序

module adder8(clk,aclr,load,load_din,dout);
// Portdeclarations
input clk;
input aclr;
input load;
input [7:0] load_din;
output [7:0] dout;

//InternalVariables
wire  clk,aclr,load; 
wire [7:0] load_din;
wire [7:0] dout;
reg [7:0] counter = 0;
   
//CodeStarts Here
always @(posedge clk or negedge aclr)
    if(!aclr)
          counter <= 0;
    else if(load == 1)
          counter <= load_din;
    else
          counter <= counter + 1;  
    assign dout = counter;
endmodule

TestBench代码

`timescale 1ns/1ns
module adder8_tb;
reg clk, aclr, load;
reg [7:0] load_din;
wire [7:0] dout;

initial

begin
    clk = 0;
    aclr = 1;
    load = 0;
    load_din = 0;
    #120 aclr = 0;
    #40  aclr = 1;
    #20  load = 1;
         load_din = 100;
    #20  load = 0;
    #100 $stop(0);
end

always #10 clk = ~clk;
adder8 U(.clk(clk), .aclr(aclr), .load(load), .load_din(load_din), .dout(dout));

endmodule

结果分析

  1. 和组合逻辑不同的是,我们要利用always #10 clk = ~clk; 这个语句来产生周期为20个时间基准单位(1ns)的时钟(方波),即就是20ns的时钟信号。注意:时钟只能用always块才能生成,但要在initial块中赋给时钟的初始值(如clk=0或clk=1),如果不设置时钟初始值,则在仿真的时钟输出端是一个未知x(不变,就是例1中的那段红线了)。

  2. 在initial块中生成复位信号和加载信号,注意:一定要给复位信号和加载信号赋给初始值,否则和不设置时钟初始值一样会出现问题的。

  3. 在initial块的begin语句一开始就设置相关的初始值是一个好习惯。

  4. 和test_counter8.v进行全部的对比后发现和该仿真波形完全一致,仿真结束。load_din和load_out后面是采用16进制。

至于为什么是16进制,我现在也没搞懂????? 搞懂了,双击wave下面的信号,可以弹出radix进制选择。
在这里插入图片描述

4 .v格式源代码和.v格式TestBench代码的3种编写方法

最初不太清楚LiberoSoc与ModelSim之间的关系,也不熟悉ModelSim,只能在LiberoSoc中建立源代码和TestBench,然后通过Simulate打开ModelSim,观察仿真。摸得多了,现在总结了3种编写方法

4.1 LiberoSoc编程+ModelSim仿真

这也是Microsemi LiberoSoc软件自带的方式,是初学者最早接触的方法,方法是在LiberoSoc中建立project,然后添加HDL源代码和HDL TestBench,然后在ModelSim中进行仿真。

操作视频: 使用LiberoSoc+ModelSim进行FPGA设计的前仿真

4.2 ModelSim编程+仿真

直接在ModelSim新建工程,然后添加文件时,选择新建文件,然后完成源代码和TestBench的编程工作,再在TestBench上右键选择compile all,就可以进行仿真。

缺点是软件自带的编辑环境不是很好,而且没有LiberoSoc自带的代码语法检测功能。

操作视频: 使用ModelSim进行FPGA设计的功能仿真

4.3 第三方编程+ModelSim仿真

使用第三方的编辑工具是推荐的方法。建议使用UltraEdit或Notepad++这些专业的代码编辑软件。UltraEdit偏重于功能的强大和丰富的用户可定制化特性,而Notepad++更加注重易用性。两者在普通功能上差异不是特别大,根据自己的喜好选择一款即可。

也可以直接使用text编程,保存的时候注意存成".v"或".vhd"格式即可,然后ModelSim添加文件时加进去,这种方法也可以,但适用于熟练掌握Verilog语法的工程师。

ModelSim入门教程(中文版)
07-31
modelsim软件的使用教程,中文版
modelsim详细使用教程(一看就会)
03-16
modelsim详细使用教程(一看就会)
Libero Soc v11.9使用(一)
最新发布
m0_67832149的博客
03-19 992
旨在帮助有需要完成EDA技术设计实验的同学进行实验的指导,是本人对于课程实验进行的初次笔记记录与总结,希望大家可以学习到!也希望自己可以继续坚持下去做自学的笔记,和大家共同进步!
Modelsim教程及例子
06-26
Crack_ModelSim_SE_6.4a.rar Mentor Graphics ModelSim Support.pdf Modelsim 6.0 使用教程 .pdf Modelsim 6.0 使用教程 (自创) modelsim 6.0 中创建Altera的仿真库方法集萃.doc Modelsim SE 建仿真库的方法how to use modelsim.rar ModelSim SE5.5f简明操作指南.doc modelsim 与matlab联合仿真link for modelsim.rar modelsim_se_install.pdf modelsim_se_user's manual.pdf modelsim_ug.pdf ModelSim的简要使用方法.doc Modelsim入门.doc modelsim使用教程.pdf modelsim使用教程1.pdf modelsim详解(西安交大).pdf Modelsim中文教程.ppt 关于使用modelsim仿真小结.doc 如何在modelsim SE 中指定Altera的仿真库(中文版).rar 如何在Quartus II 里使用Modelsim.pdf 在modelsim SE 创建Altera的仿真库.rar 最简单的modesim后仿真库建立.rar [利用QuartusII和ModelSim对设计进行分析].rar
ModelSim仿真实例教程
xy_z_H的博客
05-17 7247
ModelSim仿真实例教程        ModelSim是Mentor的子公司Medel Technology的一个出色的Verilog HDL/VHDL 混合仿真软件,它属于编译型仿真器(进行仿真前必须对HDL源码进行编译),方针速度快,功能强。       
ModelSim 入门使用教程
naturly的博客
10-27 7217
1、打开软件,进入软件界面如下 2、创建工程 点击左上角File ----&gt;New----&gt;Project 出现如下界面,点击Yes 点击yes后出现如下界面,Project Name和DefaultLibrary Name自己根据需求命名, Project Location也自定义即可,最后点击OK 最后点击OK生成如下界面 3、添加代码文件与测试文件 点击...
Modelsim 快速入门教程
05-08
Modelsim 快速入门教程 Modelsim 快速入门教程
Modelsim 入门教程
04-08
此资源是Modelsim 入门教程,讲述了从新建工程、添加文件、直到编译以及最后的仿真、波形,非常详细。
基于quartusii和modelsim的verilog入门案例源码
04-05
基于quartusii和modelsim的verilog入门案例源码 基础实验_01_多路复用器 :4通道8位带三态输出 基础实验_02_多路解复用器 :4通道8位带三态输出 基础实验_03_编码器 :8位输入3位输出编码器 基础实验_04_优先编码器 ...
modelsim入门教程
11-22
快速掌握modelsim的使用,迅速掌握FPGA开发技术,快速验证你的设计思路。
modelsim新手入门仿真教程.docx
07-09
modelsim新手入门仿真教程,仿真实例,一二分之一分频器为例,采用 verilog HDL语言编写,适合新手入门。免费下载
ModelSim入门实例+源码
08-24
ModelSim入门实例+源码 对clk的16分频
modelsim仿真示例工程
11-24
modelsim仿真示例工程,基于modelsim的ui界面操作。操作步骤参考。 https://blog.csdn.net/cigarliang1/article/details/110039660
整理版 quartusVHDL modelsim 实例 仿真代码
05-15
内容有VHDL语法总结及相应的实例应用,每个程序我都亲自试过,特别适合初学VHDL的同学们。常用的程序有 设计一个M序列发生器,M序列为“11110101”、 设计一个彩灯控制器,彩灯共有16个,每次顺序点亮相邻的四个彩灯,如此循环执行,循环的方向可以控制。设计一个跑马灯控制器。一共有8个彩灯,编号为LED0~LED7,点亮方式为:先从左往右顺序点亮,然后从右往左,如此循环往复等等。这些都是我在考试前熬夜总结的,很有用。如果配合开发板用的话,那就更好了
modelsim教程(包括视频、pdf、word、ppt等)
04-10
其中包含各类modelsim教程(视频(短视频)、pdf、word、ppt等共计120M)
ModelSim入门实例——二分频仿真
07-28
讲解了ModelSim编写激励文件对模块进行仿真,适合初学者。
ModelSim Verilog仿真实例
weixin_30449453的博客
11-10 366
http://www.61ic.com/FPGA/HDL/201104/32267.html 转载于:https://www.cnblogs.com/tureno/articles/2244365.html
ModelSim入门实例(这个博客也不错)
weixin_30660027的博客
11-10 83
http://hi.baidu.com/embedtec/blog/item/132cc8f3564fdecf0a46e0c9.html 转载于:https://www.cnblogs.com/tureno/articles/2244272.html
.ModelSim Verilog仿真实例
weixin_30268921的博客
11-09 252
http://yq000cn.blog.163.com/blog/static/1436907020091221194024/ 转载于:https://www.cnblogs.com/tureno/articles/2242545.html
modelsim安装教程
05-23
以下是在Windows操作系统上安装ModelSim的教程: 1. 下载ModelSim安装文件。可以从ModelSim官方网站或其他可靠网站下载。下载后,将安装文件保存到本地。 2. 安装ModelSim。双击下载好的文件开始安装,按照提示完成安装过程。在安装过程中,需要选择安装路径和许可证文件路径。 3. 配置ModelSim环境变量。打开系统的环境变量设置,在系统变量中添加以下两个变量: - MGLS_LICENSE_FILE:指定许可证文件的路径,通常为ModelSim安装目录下的license文件。 - PATH:将ModelSim的bin目录添加到系统路径中。 4. 启动ModelSim。在命令行中输入vsim命令启动ModelSim。 以上就是在Windows操作系统上安装ModelSim的简单教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • MATLAB常用求导和求偏导函数 191626
  • C语言中动态分配数组 129388
  • c++ string头文件详解 84299
  • matlab数值积分中函数积分的4种方法 80458
  • LIN总线总结 76152

分类专栏

  • HDL与FPGA 付费 77篇
  • 【MatLab/Simulink】 付费 62篇
  • 【Python从入门到进阶全贯通】 付费 114篇
  • 【视频图像处理】 付费 10篇
  • Tcl 3篇
  • MIPI 1篇
  • Verilog/VHDL必刷题集 1篇
  • FPGA之道 8篇
  • 计算机原理 3篇
  • LiberoSoc 2篇
  • Quartus使用总结 1篇
  • 通信协议及通信原理 1篇
  • Unity 1篇
  • 【C++】 53篇
  • C语言项目练习集 5篇
  • C++的STL 7篇
  • C/C++常用函数及头文件 14篇
  • C/C++常用头文件 1篇
  • C/C++ 53篇
  • 【数学/数学建模】 3篇
  • 【思考】 9篇
  • 【总结】 9篇
  • 【Machine Learning】 17篇
  • 【资源工具】 14篇
  • 【数学基础】 4篇
  • 【数据结构】 27篇
  • 【ADAS与ICV】 31篇
  • 【Windows】 4篇
  • 【工程实践经验】 6篇
  • 【AI】 2篇
  • 【算法】 18篇
  • 【PAT_BasicLevel】 97篇
  • Linux 7篇
  • ROS 18篇
  • 【PAT_AdvancedLevel】 1篇
  • 【PAT总结】 11篇
  • 【读书总结】 2篇
  • 【自动驾驶】 3篇
  • 无人驾驶公司与行业发展 4篇
  • PanoSim 1篇
  • PreScan 6篇
  • HD Map 1篇
  • CarSim 2篇
  • VTD 6篇
  • 【控制算法】 9篇
  • 【LeetCode刷题题库】 6篇

最新评论

  • PreScan打开MATLAB时,“Error:Matlab ||和&&运算符的操作数必须能够转换为逻辑标量值”的解决方案

    想学好代码的小鬼: 朋友,我下了2022但不会用,要怎么解决啊

  • 1065 单身狗——c++实现

    一只只会暴力的小宋: 1e8

  • ModelSim入门教程和两个典型例子

    m0_71814521: 请问为什么全加器的仿真结果所有线都是直的蓝线和红线呀,代码都是直接用的博主的,谢谢!

  • 1054 求平均值——c实现

    若安315: 博主这个题用的sscanf和sprintf很巧妙,不然这个题可能逻辑会比较繁琐复杂,不过有一个点似乎有点问题,那就是在把输入的字符串a用sscanf转换为浮点数temp之后,再把精确到两位小数d浮点数temp转为字符串b,然后依次比较字符串a和b,这里只能用strlen(a)作为最大长度进行比较,因为输入如果是个整数,比如a='5',但是b=‘5.00’,那比较就出问题了。

  • puts()函数详解

    长夜钟鼓: 数组名不是指针!

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 如何在windows PowerShell中使用GVIM并增加常用alias
  • Tcl Tutorial(3)-经典教程+代码示例
  • Tcl Tutorial(2)-经典教程+代码示例
2024年1篇
2023年4篇
2022年22篇
2021年49篇
2020年75篇
2019年202篇
2018年308篇
2017年17篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吉大秦少游

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

哆哆女性网许 起名梦见死蛇是什么预兆周公解梦滨鑫福珠宝seo关键词方法周易网名字测试女孩于姓起名网站设计开发网站吗念念不相忘周易中的哲学思想fx8320女新生儿姓程起名高端网站制作价格属猪的起小名大全室内设计公司网站首页食品公司起名有什么好名字大全网络seo推广公司健康养生行业有哪些项目算死命全文免费阅读全文培训软装设计网站新闻网站制作易烊千玺五周年图片冯姓男起名100分回归鸟十字绣周易占卜算卦设计招聘网站上海金码玄机解梦大全家长对孩子的寄语合肥建设网站 公司seo标签设定蝴蝶梦剧情解析淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化