引子:ModelSim是HDL仿真软件,Debussy是波形查看软件;搭配使用,相当爽。此处所谓快速查看前仿真波形仅为抛砖引玉,大家不要拘泥于此。两款软件的功能都很强大,请自行研究。

注:本篇博文的软件环境为:Debussy 5.3v9 + Modelsim SE 6.5

配置篇

1 安装、和谐软件。略。

2 拷贝文件..\Novas\Debussy\share\PLI\modelsim_pli\WINNT\novas.dll至文件夹..\modeltech_6.5\win32

3 取消文件..\modeltech_6.5\modelsim.ini的只读属性后,打开。

找到

1
; Veriuser = veriuser.sl

替换为

1
Veriuser = novas.dll

保存;关闭;设为只读。

配置完,以后就一劳永逸了。

实战篇

此处以一简单分频器为例。文件地图如下:

1
2
3
4
5
6
7
8
│  rtl.f
│  run.bat
│  sim.do
│ 
└─rtl
        clk_rst.v
        divider.v
        divider_tb.v

1 编写欲仿真的HDL文件:RTL级代码+Testbench代码。保存在文件夹rtl中。

(1)divider.v  // RTL级代码模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
`timescale 1ns/10ps
module divider(
  input  i_clk,
  input  i_rst_n,
   
  output o_clk
);
  
parameter U_DLY = 1;
// log2(5) = 2.3219 <= 3 
reg [2:0] cnt_p;                        // 上升沿计数子
  
// 5位上升沿计数器: 0 ~ 4
// 4 = 5 - 1
always @ (posedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    cnt_p <= 0;
  else
    begin
    if (cnt_p == 4)
      cnt_p <= 0;
    else
      cnt_p <= #U_DLY cnt_p + 1'b1;
    end
end
// log2(5) = 2.3219 <= 3 
reg [2:0] cnt_n;                        // 下降沿计数子
// 5位下降沿计数器: 0 ~ 4
// 4 = 5 - 1
always @ (negedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    cnt_n <= 0;
  else
  begin
    if (cnt_n == 4)
      cnt_n <= 0;
    else
      cnt_n <= #U_DLY cnt_n + 1'b1;
  end
end
  
reg o_clk_p;                            // 上升沿时钟输出寄存器
// 输出上升沿时钟
// 0     ~ 2 ↑-> 1
// (2+1) ~ 4 ↑-> 0
// 2 = 5>>1
// 4 = 5 - 1
always @ (posedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    o_clk_p <= 0;
  else
  begin
    if (cnt_p <= 2)                     // 2 = 5>>1
      o_clk_p <= 1;
    else
      o_clk_p <= 0;
  end
end
  
reg o_clk_n;                            // 下降沿时钟输出寄存器
// 输出下降沿时钟
// 0     ~ 2 ↓-> 1
// (2+1) ~ 4 ↓-> 0
// 2 = 5>>1
// 4 = 5 - 1
always @ (negedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    o_clk_n <= 0;
  else
  begin
    if (cnt_n <= 2)                     // 2 = 5>>1
      o_clk_n <= 1;
    else
      o_clk_n <= 0;
  end
end
assign o_clk = o_clk_n & o_clk_p;       // 按位与(作用:掩码)
  
endmodule

(2)clk_rst.v // Testbench的时钟及复位模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
`timescale 1ns/10ps
module clk_rst(
  output reg i_clk,
  output reg i_rst_n
);
parameter CLK_PERIOD = 20;
parameter MULT_RATIO = 10;
parameter RESET_TIME = MULT_RATIO * CLK_PERIOD + 1;
initial
begin
  i_rst_n <= 1'b0;
  #RESET_TIME i_rst_n <= 1'b1;
end
initial
begin
  i_clk <= 1'b0;
  forever
    #(CLK_PERIOD / 2) i_clk <= ~i_clk;
end
endmodule

把时钟及复位单独剥出来,便于移植到其他平台。

(3)divider_tb.v // Testbench顶层例化模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
`timescale 1ns/10ps
module divider_tb();
wire i_clk;
wire i_rst_n;
wire o_clk;
// genrate clock
clk_rst clk_rst_inst(
  .i_clk(i_clk),
  .i_rst_n(i_rst_n)
);
// user logic
divider divider_inst(
  .i_clk(i_clk),
  .i_rst_n(i_rst_n),
  .o_clk(o_clk)
);
// dump fsdb file for debussy
initial
begin
  $fsdbDumpfile("wave.fsdb");
  $fsdbDumpvars;
end
endmodule

 

注意第22行到第27行

1
2
3
4
5
6
// dump fsdb file for debussy
initial
begin
  $fsdbDumpfile("wave.fsdb");
  $fsdbDumpvars;
end

这段语句的意思,就是调用ModelSim生成波形文件,并保存为wave.fsdb,供Debussy查看。

2 编写HDL文件列表文件,供ModelSim和Debussy使用。

rtl.f

1
2
3
rtl/divider.v
rtl/clk_rst.v
rtl/divider_tb.v

3 编写ModelSim命令行脚本文件。

sim.do

1
2
3
4
5
vlib work
vlog -f rtl.f
vsim work.divider_tb
run 10us
q

4 编写批处理脚步文件,调用命令行ModelSim生成波形文件,再调用Debusyy查看。

run.bat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
::关闭回显
@ECHO OFF
::设置软件路径
SET debussy=C:\Novas\Debussy\bin\Debussy.exe
SET vsim=C:\modeltech_6.5\win32\vsim.exe
::ModelSim Command
%vsim% -c -do sim.do
::删除ModelSim生成的相关文件
RD work /s /q
DEL transcript vsim.wlf /q
::Debussy Command
%debussy% -f rtl.f -ssf wave.fsdb -2001
::删除波形文件
DEL wave.fsdb /q
::删除Debussy生成的相关文件
RD Debussy.exeLog  /s /q
DEL debussy.rc /q
::退出命令行
EXIT

注意:请适当修改相关路径,本处仅以我个人的配置为例。

5 双击运行run.bat

显示命令行画面

图1 运行run.bat画面

弹出Debussy及Debussy波形查看组件。

图2 Debussy及Debussy波形查看组件

我CALL,波形在哪里。小样竟敢唬我。

呵呵,别着急,慢慢来。

(6)添加欲观察信号。

单击 或Signal-Get Signals…添加信号;或者偷懒一点,单击Signal-Get All Signals。此处我就一懒到底,就添加全部信号吧。

弹出警告,告知我们添加所有信号需要花费一段时间,是否要确认。确认OK。

图3 警告

看,波形出来了。

图4 devider前仿真波形

结语

正如引子所言,ModelSim的功能太强大了,于是就有点繁琐。和Debussy协同仿真,我们就省却了许多不必要,何乐而不为呢。当然,还有许多的功能,由于水平有限,就写到这里吧。

参考

1 袁秋春.用modelsim和debussy协同仿真VHDL Verilog的流程

2 cmf3887299.debussy+modelsim的仿真流程

怎样使用Debussy+ModelSim快速查看前仿真波形相关推荐

  1. Modelsim保存与打开仿真波形的方式

    在使用modelsim进行仿真时,对于一些很耗时间的仿真,可以保存仿真波形结果,下次可以直接打开查看. 1 保存波形 1.1 图形界面方式 第1步 保存dataset sim 打开sim窗口 file ...

  2. (筆記) 如何使用Debussy與ModelSim做Co-Simulation? (SOC) (Verilog) (VHDL) (Debussy) (ModelSim)

    Abstract 本文介紹如何使用Debussy與ModelSim做Co-Simulation,並使用Verilog.VHDL以及Verilog搭配VHDL交叉一起simulation. Introd ...

  3. 如何使用ModelSim作前仿真與後仿真? (真oo无双前辈)

    Abstract 本文介紹使用ModelSim做前仿真,並搭配Quartus II與ModelSim作後仿真. Introduction 使用環境:Quartus II 8.1 + ModelSim- ...

  4. (筆記) 如何使用ModelSim作前仿真與後仿真? (SOC) (Quartus II) (ModelSim)

    Abstract 本文介紹使用ModelSim做前仿真,並搭配Quartus II與ModelSim作後仿真. Introduction 使用環境:Quartus II 8.1 + ModelSim- ...

  5. 利用FPGA仿真软件modelsim仿真波形显示图片

    之前参考过几篇博文介绍如何使用仿真软件(比如modelsim)产生字符效果波形的,但是发现在进行具体修改时还是挺麻烦的,且无法产生图片这种更加直观的效果. 所以本次打算重新设计代码,升级为显示效果更好 ...

  6. ModelSim之命令行仿真入门 (step 2)

    简单得modelsim命令行仿真 PART ONE ModelSim之命令行仿真入门 用do文件进行仿真真得很方便,比写testbench方便多了,采用do文件没有那么多信号定义,管理也比较方便. 1 ...

  7. Modelsim 后仿真操作步骤之二——用Modelsim单独进行后仿真

    后仿就是时序仿真,因为时序仿真是在综合之后故称后仿真.现将综合到后仿的简单步骤细列如下(并附图): 一,综合(所用工具是quartus) 1,建立工程,其他不变,只是在选择仿真工具时留意下图红圈处. ...

  8. FPGA仿真--前仿真和后仿真

    初学者学习FPGA,必定会被它的各种仿真弄的晕头转向.比如,前仿真.后仿真.功能仿真.时序仿真.行为级仿真.RTL级仿真.综合后仿真.门级仿真.布局布线后仿真等. Quartus和Modelsim软件 ...

  9. 怎么快速搜索linux的日志,如何快速查看Linux日志?

    因为在生产环境会遇到很多问题,那么最快的定位方式莫过于去看日志,我们都知道服务器每天会产生大量的日志,那么如何快速的定位也就是最关键的. 本文介绍六种查看日志的命令:tail.head.cat.mor ...

最新文章

  1. restful api_将Spring MVC RESTful Web服务迁移到Spring 4
  2. item的常用类型上
  3. 学习Kotlin(一)为什么使用Kotlin
  4. 24点游戏java_24点游戏动态规划解法(java)
  5. php中什么时候用传值,php中传值与传引用的区别。什么时候传值什么时候传引用?...
  6. 使用 github + jekyll 搭建个人博客
  7. 日语整理之 自五 他五
  8. android微信打不开怎么办,微信打不开怎么回事 微信打不开怎么办
  9. 【云计算学习教程】云应用是什么?典型的云应用有哪些?
  10. package.json 文件详解
  11. python爬虫——校花网
  12. Libero逻辑分析仪的使用(基本篇)
  13. Alkyne-PEG-COOH 炔烃PEG羧基
  14. 杭电校赛(油菜花王国)
  15. 本地搭建SIP服务器
  16. 仿QQ点赞吹泡泡效果
  17. 数组下标越界解析(以C语言为例)
  18. 对超短脉冲的色散效应的研究
  19. JPEG图像压缩探索_zigzag扫描(原创)
  20. 信号与槽的Connect详解

热门文章

  1. 几个关于噪声测量的实验
  2. 这些建议需要竞赛组委会酌情考虑
  3. go interface类型转换_Go: Understand the Empty Interface
  4. java excel导入前台_java上传excel表格并读取数据返回到前台
  5. 软件开发详细设计说明书_汽车软件开发之ASPICE系统需求过程组
  6. 学php还是日语,如何使用PHP检查该词是日语还是英文
  7. centos7 安装php nts,centos7安装php7,亲测可行
  8. mysql union 后 sum_mysql:多表查询
  9. 以array开头的php函数,PHP函数、数组
  10. 【 Linux 】常用命令总结(更新)