modelsim保存波形操作方法解析

嵌入式设计应用

132人已加入

描述

  在数字电路设计中(Verilog or VHDL),ModelSim是常用的仿真工具。当我们仿真大型的工程时,往往需要保留仿真波形,以便分析和以后查看。这就需要学习在ModelSim里面如何保存仿真波形及调用波形。

  为了方便以后察看仿真结果,可以将仿真波形保存在.Wlf文件中:

  一。保存过程:

  1.完成仿真波形

  2.切换到sim视窗

  3.点击保存图标,可以直接保存为.wlf文件

  二。打开过程

  1.打开modelsim

  2 file菜单打开.wlf文件(要在文件类型中选择.wlf类型)

  3.确定之后出现sim视窗

  4.选中窗口中的测试文件名右击————add wave即可在wave窗口打开该测试坡形。

  三。也可以将波形保存为.do文件

  do文件记录了仿真的过程和加载的各种库。

  do文件的保存过程:

  file——》save format——》D:/modeltech_6.5b/examples/wave.do 可以更改do文件名称和存放目录

  2.do文件的加载:

  file——》load(注意要在sim视窗下)。打开之后貌似只显示出仿真过程代码,没法显示波形。

  modelsim保存仿真结果,以及打开保存的仿真结果的波形wlf文件(经过实验,真实可用)

  1、在wave界面,将仿真波形保存为 .do文件(信号列表文件)。

  2、切换左边任务栏至“sim”,,点击保存,给将要保存的 .wlf文件(波形文件)命名为自己想要的名字,默认为vsim.wlf。

  (wlf文件为modelsim的wave log file文件格式)

  3、保存,OK,关闭modelsim(注意,必须关闭modelsim,否则打开wlf文件的时候,会提示未正常关闭,无法打开)。

  4、重启modelsim,open 之前保存的 .wlf文件,然后 load 对应的 .do文件。

  也可以使用命令行的格式打开此波形文件,举例如下:vsim -view wave.wlf -do run.do。

  do文件记录了仿真的过程和加载的各种库。

  do文件的保存过程:

  file——》save format——》D:/modeltech_6.5b/examples/run_wave.do 可以更改do文件名称和存放目录,一般保存在仿真目录中。

  2.在仿真路径中找到文件vsim.wlf打开,再命令窗口输入:do run_wave.do

  具体操作:

  1.打开modelsim se :切换目录到仿真工程下。

  2.命令行输入:OpenFile vsim.wlf

  3.命令行输入:do run_wave.do(上次保存的wave.do文件)

  参考:

  保留仿真后的波形,步骤如下:

  1.点击file菜单下的save format,保存为.do格式文件

  2.下次打开Modelsim后,在控制台输入do wave.do命令后,即可看到上次仿真的波形图

  此外,点击向上箭头的按键可以重复输入上次命令。

  怎么样保存仿真的完整波形(不是printScreen),File》export》image好象和截屏的功能一样,只能保存一部分波形,怎么样保存成modelsim认识的波形,下次看的时候只需要打开这个波形图,不需要重新仿真,这个在vcs中可以的,用vcd文件,好像modelsim也支持dump vcd的,不知道具体怎么做,怎样保存,怎么样打开?

  使用“dataset save sim filename.wlf ”保存仿真波形,

  filename.wlf文件的名字可以自己任意取。打开时候直接,open filename.wlf文件就可以了。

  直接通过OPEN找到.WLF文件,打开就可以了。

  保存wlf,下一次只要直接打开它就可以了。但是有这样的情况出现,如果在保存wlf前,你改动了某些信号的位置,下一次打开是会回到原先的位置,此时你可以把do文件一起保存,在下一次打开wlf文件后,再打开do文件,你先前的顺序就会回来

  波形信号的保存:有时,在波形窗口内拖放了较多的信号,可以保存起来以后调入。在wave窗口,File -》 Save format,保存成*.do文件。以后需要调入时,在modelsim主窗口命令行内执行:do *.do即可

  ModelSim中寄存器组值查看工具

  在ModelSim中,当定义了寄存器数组(例如:reg [7:0] ram [0:127]),可以通过Memory List工具查看仿真时的值。步骤:

  1.定义Reg类型,例如RAM

  module ram_1024Byte

  #(parameter DATA_WIDTH = 16, parameter ADDR_WIDTH = 8)

  (

  input [(DATA_WIDTH-1):0] data,

  input [(ADDR_WIDTH-1):0] read_addr, write_addr,

  input we, clk,

  output reg [(DATA_WIDTH-1):0] q

  );

  // Declare the RAM variable

  reg [DATA_WIDTH-1:0] ram[0:(2**ADDR_WIDTH-1)];

  // Initiation

  initial

  begin

  $readmemh(“。。/dev/ram_init.dat”, ram);

  end

  // Read and Write Operation

  always @ (posedge clk)

  begin

  // Write

  if (we)

  ram[write_addr] 《= data;

  // Read (if read_addr == write_addr, return OLD data)。 To return

  // NEW data, use = (blocking write) rather than 《= (non-blocking write)

  // in the write assignment. NOTE: NEW data may require extra bypass

  // logic around the RAM.

  q 《= ram[read_addr];

  end

  endmodule

  2.仿真

  新建工程-》编译-》仿真(without optimization)

  View-》Memory List,便可以查看RAM中寄存器的值

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分