安德鲁

[笔记].怎样使用Debussy+ModelSim快速查看前仿真波形.[Debussy][ModelSim][Verilog]

0
阅读(2664)

引子: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 │  rtl.f
2 │  run.bat
3 │  sim.do
4 │  
5 └─rtl
6         clk_rst.v
7         divider.v
8         divider_tb.v

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

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

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

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

01 `timescale 1ns/10ps
02  
03 module clk_rst(
04   output reg i_clk,
05   output reg i_rst_n
06 );
07  
08 parameter CLK_PERIOD = 20;
09 parameter MULT_RATIO = 10;
10 parameter RESET_TIME = MULT_RATIO * CLK_PERIOD + 1;
11  
12 initial
13 begin
14   i_rst_n <= 1'b0;
15   #RESET_TIME i_rst_n <= 1'b1;
16 end
17  
18 initial
19 begin
20   i_clk <= 1'b0;
21   forever
22     #(CLK_PERIOD / 2) i_clk <= ~i_clk;
23 end
24  
25 endmodule

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

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

01 `timescale 1ns/10ps
02  
03 module divider_tb();
04  
05 wire i_clk;
06 wire i_rst_n;
07 wire o_clk;
08  
09 // genrate clock
10 clk_rst clk_rst_inst(
11   .i_clk(i_clk),
12   .i_rst_n(i_rst_n)
13 );
14  
15 // user logic
16 divider divider_inst(
17   .i_clk(i_clk),
18   .i_rst_n(i_rst_n),
19   .o_clk(o_clk)
20 );
21  
22 // dump fsdb file for debussy
23 initial
24 begin
25   $fsdbDumpfile("wave.fsdb");
26   $fsdbDumpvars;
27 end
28  
29 endmodule

 

 

 

 

注意第22行到第27行

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

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

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

rtl.f

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

3 编写ModelSim命令行脚本文件

sim.do

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

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

run.bat

01 ::关闭回显
02 @ECHO OFF
03 ::设置软件路径
04 SET debussy=C:\Novas\Debussy\bin\Debussy.exe
05 SET vsim=C:\modeltech_6.5\win32\vsim.exe
06 ::ModelSim Command
07 %vsim% -c -do sim.do
08 ::删除ModelSim生成的相关文件
09 RD work /s /q
10 DEL transcript vsim.wlf /q
11 ::Debussy Command
12 %debussy% -f rtl.f -ssf wave.fsdb -2001
13 ::删除波形文件
14 DEL wave.fsdb /q
15 ::删除Debussy生成的相关文件
16 RD Debussy.exeLog  /s /q
17 DEL debussy.rc /q
18 ::退出命令行
19 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的仿真流程