|
版主: 51FPGA |
|
周红标
最后登陆时间:2012-04-05 08:30:22 |
ModelSim是HDL仿真软件,Debussy是波形查看软件;搭配使用,相当爽 配置篇1 安装、和谐软件。略。 2 拷贝文件..\Novas\Debussy\share\PLI\modelsim_pli\WINNT\novas.dll至文件夹..\modeltech_6.5\win32。 3 取消文件..\modeltech_6.5\modelsim.ini的只读属性后,打开。 找到 ; Veriuser = veriuser.sl 替换为 Veriuser = novas.dll 保存;关闭;设为只读。 配置完,以后就一劳永逸了。 实战篇此处以一简单分频器为例。文件地图如下: │ rtl.f
│ run.bat
│ sim.do
│
└─rtl
clk_rst.v
divider.v
divider_tb.v
1 编写欲仿真的HDL文件:RTL级代码+Testbench代码。保存在文件夹rtl中。 (1)divider.v // RTL级代码模块 `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的时钟及复位模块 `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顶层例化模块 `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行 // dump fsdb file for debussy
initial
begin
$fsdbDumpfile("wave.fsdb");
$fsdbDumpvars;
end
这段语句的意思,就是调用ModelSim生成波形文件,并保存为wave.fsdb,供Debussy查看。 2 编写HDL文件列表文件,供ModelSim和Debussy使用。 rtl.f rtl/divider.v rtl/clk_rst.v rtl/divider_tb.v 3 编写ModelSim命令行脚本文件。 sim.do vlib work vlog -f rtl.f vsim work.divider_tb run 10us q 4 编写批处理脚步文件,调用命令行ModelSim生成波形文件,再调用Debusyy查看。 run.bat ::关闭回显 @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 显示命令行画面 关键词:modelsim debussy 联合 真的 实现 |
|
jackwang
最后登陆时间:2015-01-29 08:45:11 |
这个还真的不懂 |
![]() http://weibo.com/dolphinjetta。 |
|
|
dreamjsc
最后登陆时间:2012-06-04 16:42:28 |
Debussy没有用过,觉得modelsim用起来方便
|
![]() 大山里的娃儿。 |
|
|
yanyoudf
最后登陆时间:2014-05-04 22:22:06 |
^_^ 谢谢楼主分享
|
![]() 嘻嘻哈哈。 |
|
|
xie0jing0
最后登陆时间:2014-11-14 00:56:50 |
有了Debussy还真是方便了不少
|
|
dreamjsc
最后登陆时间:2012-06-04 16:42:28 |
啥时候也来没有一下 |
![]() 大山里的娃儿。 |
|
|
勇仔
最后登陆时间:2014-07-15 20:33:01 |
楼主,你好。我按照你的方法来设置。但是最后运行run.bat后出来命令行操作。但后面debussy里没有出现仿真波形。 我用的是win764位的modelisim10.0c 在test文件中加入 initial
begin |
| 共7条 1/1 1 |