zoukankan      html  css  js  c++  java
  • [Craftor原创]精通ModelSim脚本(1)

    ModelSim之强大是毋庸置疑的。而ModelSim脚本语言的强大,也同样让人佩服得五体投地。在此文中,Craftor将一步一步教大家如何编写Modelsim的脚本,让仿真变得更容易些!

    这里先推荐一个代码编辑器,Crimson Editor,支持所有常见的源代码编辑,功能非常强大,完全可按自己喜好定制。以下文章的内容也会基于于这个文本编辑器。

    下载地址:http://myfpga.googlecode.com/files/cedt.rar

    一、在D:\mydocuments\fpga_proj\test\ 目录下新建一个test.vhd文件,内容如下。代码没有任何物理意义,仅是用来测试的。

    image

    二、编写一个sim.do文件,放在同一个目录下。内容如下:

    image

    解释:

    1:新建work库

    2:映射work库

    3:编译test.vhd文件,默认编译到work库中。(如果是verilog文件,用vlog *.v来编译)

    4:仿真work库中名为test的模块,时间单位为1ns。(因为我的代码中entity的名称为test)

    -L work  是表示仿真的时候包含work库中所有模块。

    如果是仿真Xilinx或者Altera的IP核,需要将其IP核的库包含进来,如 –L xilinxcorelib 。

    -t 1ns是仿真时序图上最小的时间单位,如果不加-t 1ns,默认的是ps。

    5:将test里所有的信号都添加到波形图里。(这行代码会自动将波形图调用出来)

    r 表示 region。

    7:将clk信号赋予时钟,周期为10ns(因为第4行指定时间单位为ns)。

    0 0,1 5 特别解释一下。第一个0表示低电平,逗号后的1表示高电平。第二个0默认不修改,否则生成的不是占空比为50%的时钟,有兴趣的朋友可以自己修改为其它值看下结果。5表示高电平1占整个周期的时间5ns。

    所以,如果要产生周期为20ns的时钟,应该写成 force -repeat  20 clk 0 0,1 10。

    -repeat是关键字,表示重复产生。

    同样,如果要产生差分时钟,应该写两行:

    force –repeat 20 clk_p 0 0,1 10

    force –repeat 20 clk_n 1 0,0 10

    8:运行10ns,就是仿真图上的波形向前运行10ns,很容易理解。

    9:将a1置为高电平1,force是给信号量赋值的意思。

    11:将b1赋值为2进制01011100

    13:将c1赋值为16进制FFAA

    三、在CrimsonEditor下,按F10,或者选择Tools –> MS-DOS Shell

    image

    则会出现命令提示行并且目录会自动指定到D:\mydocuments\fpga_proj\test下,这就是CrimsonEditor的强大之处。^_^

    如果用其它编辑器,则需要自己运行命令提示符,并将工作目录切换到当前代码所在目录下,比较麻烦一些。如下图。

    http://craftor.cnblogs.com 

    此时在命令提示符下输入 vsim ,则会启动Modelsim。(前提是电脑里已正确安装Modelsim)

    有人会问,干嘛启动个Modelsim都这么麻烦?

    答:因为这样启动Modelsim后,Modelsim的工作目录会自动切换到D:\mydocuments\fpga_proj\test下。当然,如果你对Modelsim的工作环境了解的话,从桌面上启动Modelsim后,File –> Change Directory ,也同样可以。

    随后在Modelsim的命令行里输入 do sim.do ,回车。自动运行过程如下图:

    image

    如果编译没有错,会自动跳出仿真波形,结果应该如下图所示:

    image

    有的朋友会问,图上是按2进制显示的,有时候位数太多,看不清楚,要换16进制显示怎么做?

    答案很简单,在sim.do文件结尾再加一行:

    radix hex

    如果加在代码最后,表示将波形图上显示的数据按16进制显示。与在波形图上右键选择信号,Radix->Hexadecimal是等价的。

    image

    同样,如果换成:

    radix unsigned

    表示将数据按无符号整数形式显示。

    这里再说明一下,如果使用radix unsigned 并加在第6行,即force命令之前。那么在下面使用force命令给信号赋值的时候,可以按无符号整数给信号量赋值,比如:

    force c1 243

    那么给c1赋的值就应该是整数243对应的二进制值。

    补充:

    如果在仿真的时候要修改sim.do文件,需要先在Modelsim里运行

    quit –sim

    退出仿真,然后修改sim.do文件,再保存。

    本节就介绍这么多,下一节将讲解for循环和文件读写,对于仿真也是非常有用的。

  • 相关阅读:
    a标签跳转新页面
    js或jquery实现页面打印(局部打印)
    js实现点击定位最顶端
    js实现pdf对页面的打印
    js动态创建input
    sha1加密算法
    JsonHelper修改4.0
    List<T>做数据源绑定的问题
    VS2013智能提示
    Newtonsoft.Json(Json.Net)学习笔记
  • 原文地址:https://www.cnblogs.com/craftor/p/1818023.html
Copyright © 2011-2022 走看看