怎样使用Debussy+ModelSim快速查看前仿真波形
引子: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/10psmodule 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 - 1always @ (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; endend// log2(5) = 2.3219 <= 3 reg [2:0] cnt_n; // 下降沿计数子// 5位下降沿计数器: 0 ~ 4// 4 = 5 - 1always @ (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; endend reg o_clk_p; // 上升沿时钟输出寄存器// 输出上升沿时钟// 0 ~ 2 ↑-> 1// (2+1) ~ 4 ↑-> 0// 2 = 5>>1// 4 = 5 - 1always @ (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; endend reg o_clk_n; // 下降沿时钟输出寄存器// 输出下降沿时钟// 0 ~ 2 ↓-> 1// (2+1) ~ 4 ↓-> 0// 2 = 5>>1// 4 = 5 - 1always @ (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; endendassign 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/10psmodule 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;initialbegin i_rst_n <= 1'b0; #RESET_TIME i_rst_n <= 1'b1;endinitialbegin i_clk <= 1'b0; forever #(CLK_PERIOD / 2) i_clk <= ~i_clk;endendmodule |
把时钟及复位单独剥出来,便于移植到其他平台。
(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/10psmodule divider_tb();wire i_clk;wire i_rst_n;wire o_clk;// genrate clockclk_rst clk_rst_inst( .i_clk(i_clk), .i_rst_n(i_rst_n));// user logicdivider divider_inst( .i_clk(i_clk), .i_rst_n(i_rst_n), .o_clk(o_clk));// dump fsdb file for debussyinitialbegin $fsdbDumpfile("wave.fsdb"); $fsdbDumpvars;endendmodule |
注意第22行到第27行
|
1
2
3
4
5
6
|
// dump fsdb file for debussyinitialbegin $fsdbDumpfile("wave.fsdb"); $fsdbDumpvars;end |
这段语句的意思,就是调用ModelSim生成波形文件,并保存为wave.fsdb,供Debussy查看。
2 编写HDL文件列表文件,供ModelSim和Debussy使用。
rtl.f
|
1
2
3
|
rtl/divider.vrtl/clk_rst.vrtl/divider_tb.v |
3 编写ModelSim命令行脚本文件。
sim.do
|
1
2
3
4
5
|
vlib workvlog -f rtl.fvsim work.divider_tbrun 10usq |
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.exeSET vsim=C:\modeltech_6.5\win32\vsim.exe::ModelSim Command%vsim% -c -do sim.do::删除ModelSim生成的相关文件RD work /s /qDEL transcript vsim.wlf /q::Debussy Command%debussy% -f rtl.f -ssf wave.fsdb -2001::删除波形文件DEL wave.fsdb /q::删除Debussy生成的相关文件RD Debussy.exeLog /s /qDEL 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的仿真流程
转载自:http://www.cnblogs.com/yuphone/archive/2010/05/31/1747871.html
怎样使用Debussy+ModelSim快速查看前仿真波形的更多相关文章
- 使用Debussy+ModelSim快速查看前仿真波形
sim.do文件 quit -sim set PATH1 D:/Program/modelsim/vivado_lib set PATH2 D:/Program/Vivado/Vivado/2014. ...
- EBS R12.2快速安装前没有配置Global Inventory报错
EBS R12.2快速安装前没有配置Global Inventory,导致验证时"file systems"这一项没有通过,被标记了"X": (本图其它两个验证 ...
- FPGA前仿真后仿真
前仿真 后仿真 时序(综合后)仿真 时序仿真将时延考虑进去,包括综合后产生的(与.或.非)门时延,还有布局布线产生的时延. 综合(Synthesize),就是将HDL语言设计输入翻译成由与.或.非门和 ...
- sp_help 快速查看表结构、视图信息
sp_helptext: 是MS SQL Server的一个系统存储过程,可以通过它来查看存储过程或者视图.函数源码 示例:sp_helptext viewName (viewName 即要查询的存 ...
- MSSql使用SQL语句快速查看表对的就说明,及表字段描述及字段类型
--表描述 SELECT tbs.name 表名,ds.value 描述 FROM sys.extended_properties ds LEFT JOIN sysobjects tbs ON ds. ...
- 推荐一款非常棒的谷歌插件---快速查看HTML页面元素的CSS样式
一.下载地址 http://chromecj.com/web-development/2015-05/456/download.html 二.简介 CssViewer是一款快速查看当前页面元素的CSS ...
- 快速查看SQL Server 中各表的数据量以及占用空间大小
快速查看SQL Server 中各表的数据量以及占用空间大小. CREATE TABLE #T (NAME nvarchar(100),ROWS char(20),reserved varchar(1 ...
- QuartusII 中使用Modelsim对子程序进行仿真
QuartusII 中使用Modelsim对子程序进行仿真 如果采用RTL级仿真那么就没有任何问题,但是如果对子程序采用门级仿真就会出错 解决办法:在Project Navigator中右键需要进行门 ...
- Mac小技巧:快速查看指定应用程序的所有窗口
我们知道在Mac中快速在系统所有程序中切换得快捷键为: cmd + tab 不过有时我们需要快速查看某一个程序的所有窗口,那又该如何呢? 以下方法在MacOS 10.12中测试成功! Mac默认该功能 ...
随机推荐
- js禁止复制粘贴
1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键,其实是禁止快捷菜单,因为不光右键可以弹出这个菜单,键盘上空格 ...
- Eclipse使用maven创建struct2项目及遇到的各种坑
参考创建教程:http://www.jb51.net/article/45138.htm 坑一: Eclipse创建maven项目报错:Could not resolve archetype or ...
- easyui datagrid 表格动态隐藏部分列的展示
1.一套代码中,可能不同的项目情况都在用,但是可能不同的项目要求展示的datagrid列的内容并不一致,所以能够动态的显示部分datagrid列的内容. 即datagrid的中的某一列,这个项目要求显 ...
- 003java面试笔记——【java基础篇】从团八百失败面试总结的java面试题(未完待续)
8.java 线程 1)线程概念,线程与进程 线程:线程是“进程”中某个单一顺序的控制流.也被称为轻量进程.线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程.线 ...
- vue组件属性中字符串如何拼接变量?
不得不说,对于水平只有jquery的vue初学者来说,vue的图片加载实现确实挺坑的,在文档中也没有看到说明.经过百度之后终于知道了什么情况. 首先: 这样是没问题的: <img src=&qu ...
- 爪哇国新游记之二----用于计算三角形面积的Point类和TAngle类
这次尝试用两个类完成一个面积计算任务: Point类代表平面上的点: public class Point { private float x; private float y; public Poi ...
- 关于jquery的on,你怎么绑定就怎么解除
打开jquery3.0一看,竟然把一大半的时间绑定的东西都废弃了 基本上绑定时间可以统一成了on,不管你是不是动态进来的dom节点 live我们知道1.7的时候就已经废弃了,还在觉得live很好用的同 ...
- unity3d中布娃娃系统
原地址:http://blog.csdn.net/pizi0475/article/details/9771941 转自: http://forum.mirax.com.tw/unity/viewto ...
- 算法笔记_056:蓝桥杯练习 未名湖边的烦恼(Java)
目录 1 问题描述 2 解决方案 2.1 递归法 2.2 递推法 1 问题描述 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰 ...
- ES6 set 应用场景
1.数组去重 let arr = [3, 5, 2, 2, 5, 5]; let unique = [...new Set(arr)]; // [3, 5, 2] 2.并集(Union).交集(Int ...