zoukankan      html  css  js  c++  java
  • ModelSim 仿真教程

    本教程为结合成都某公司总经理的教导及本人仿真经验所创,希望能对大家有所帮助,错误之处望能指出,不胜感激!

    下图为我们进行ModelSim仿真的步骤框图。在本文中,讲的将是虚线框内的部分,其余部分也有涉及(具体文件已经在示例的工程中)。


    一.ModelSim 软件

    在本教程中,我们使用的 ModelSim 软件版本是“Modelsim 6.2b”。因为涉及到版权问题,本文并不提供软件的下载链接。

    二.工程文件框架介绍

    在本教程中,将以较为简单的工程 “binaryzation”(二值化)为例来讲述:

    (本工程可在百度网盘下载得到。)

    工程 binaryzation 文件总目录:

       

    由上图,工程 Binaryzation 包含了四个子文件bench,doc,matlab,rtl,sim。下边介绍这几个文件夹的作用:

    1.bench 

    用于放置测试文件(testbench)。在本工程中,测试文件为binaryzation_tb.vhd。见下图:

    2.doc 

     用于放置工程的说明文件。在本工程中,说明文件为Binaryzation.doc。见下图:

    3.matlab

    用于放置matlab文件及一些图像。Malab文件主要是用于生成测试数据及分析仿真结果。见下图:

    4.rtl 

    用于放置工程设计文件。见下图:

    5.sim

    用于放置do文件(执行仿真)、仿真中间结果或最后仿真结果。见下图:

    其中 work 及 vsim.wlf 为仿真时自动产生的文件,可以不用管;X.txt为matlab代码产生的图像数据,用于测试输入;Y.txt保存的是仿真结果数据;lanbojini_heibai.jpg为Matlab读入Y.txt数据后以图像的形式展示出来;size.txt存储的是matlab中间数据,只是为了方便matlab展示结果图片。最后的是三个do文件,它们才是真正的执行仿真的文件,下边简单介绍下它们:

    1)“binaryzation_wave.do”

    里边保存的是波形数据。如何生成将在后文进行;

    2)“binaryzation_sim.do”

    里边是对仿真的各项进行设置,详细见工程的文件或下截图:


    红色框内的文件根据自己设计文件的情况进行更改。同时注意编译那部分编译文件的先后顺序,一般是小模块文件在前,大模块文件(引用了小模块)在后。

     

    3)“sim.do”

    放置的是要执行哪个仿真文件(do文件,如 binaryzation_sim.do),非常简单,主要是为了方便后续仿真。举个例子:我刚好想在该文件的基础上再增加一个“binaryzation_wb.vhd”(与binaryzation.vhd一般有一定关系,在实现的时候可能调用了这个早些设计的文件)设计文件,但这个文件又与binaryzation.vhd有关系,那我就可以直接在rtl->vhdl目录下新建一个binaryzation_wb.vhd,同样在bench->vhdl新建binaryzation_wb_tb.vhd, 在sim->rtl_sim新建binaryzation_wb_sim.do、binaryzation_wb_wave.do。这时我在“sim.do”简单的再添加一个“do binaryzation_wb_sim.do”这条语句就可以了,再将“do binaryzation _sim.do”注释掉我就可以进行新设计模块的仿真了。见下图:

     

    关键在于,如果我觉得早些设计的模块binaryzation.vhd有问题,我按下图操作就可以轻易测试这个原先的模块了。

     

    还有另外一点值得说的是,sim.do要比dobinaryzation_sim.do、do binaryzation_wb_sim.do来的好记,容易记忆。

    三.测试文件Testbench(tb)的撰写

    Testbench简单来说是为设计文件(如binaryzation.vhd)提供输入、将仿真结果输出至外部文件(输出至外部文件也可不用,按实际情况来定)的VHDL文件。下边以binaryzation_tb.vhd为便来讲讲怎么写testbench。

    1.  输入

    1)从一个文件X.txt读入用于测试的数据(由matlab代码产生,具体代码见matlab文件夹)。详细注释见原工程,下图读入模块并无注释。

    2)clock、reset、wren信号的产生

    2.  输出

    将仿真结果数据写入一个Y.txt的文件(最后由matlab代码调用以图像形式展示出来)。详细注释见原工程,下图读入模块并无注释。

    3.  与设计文件binaryzation.vhd连接。

    具体连接方法见下图:

    四.ModelSim仿真

    1. 执行DO文件

    执行DO文件的地方,见下图红框

           执行方法,见下图:

    2. Wave文件的生成

    由View->Wave打开波形图,将“binaryzation_sim.do”中的“do binaryzation_wave.do”注释掉,执行do sim.do,可以看到Wave中并没有波形数据产生。此时如下图操作:

    (此时选择显示哪个波形是为展示用的,随便选的,所以大家可以根据自己需要选择显示哪些波形)选中Wave窗口(点击下就行了),再点击保存,按下图保存就可以了:

    然后将“binaryzation_sim.do”中注释掉的“do binaryzation_wave.do”重新添加上,再执行do sim.do就能看到Wave窗口有波形数据了。见下图:

     

    大家还可以更改显示波形数据的属性,具体情况根据自己需要来定,见下图:

    大家修改设置后记得要保存哦...

    五. 仿真结果

    这是仿真之前的灰度图片


    这是仿真(二值化)之后的图片



    本教程到这里就结束了,希望能够帮到你。如果你有问题,我们可以共同探讨。

     

  • 相关阅读:
    Kubernetes Declarative Deployment
    Kubernetes集群如何查看scheduler/controller manager谁是leader
    kubelet 配置管理 (一)
    Kubernetes Ingress
    如何计算Kubernetes容器CPU使用率
    Kubernetes概念
    .NET陷阱之四:事件监听带来的问题与弱监听器
    .NET陷阱之三:“正确”使用控件也会造成内存泄露
    .NET陷阱之五:奇怪的OutOfMemoryException——大对象堆引起的问题与对策
    自己编译得到 arm64v8a 版本的libZBarDecoder.SO文件
  • 原文地址:https://www.cnblogs.com/xiehongfeng100/p/3674271.html
Copyright © 2011-2022 走看看