modelsim 仿真小小小小小小问题
刚学,不太会用,用的lattice的软件。
请会的指点一下
多谢
需要simulate一下吧
引用时,在testbench里要将要仿真实体(Entiy)或模块(module)的输出引出
很抽象
原程序:
module demo(
input HCLK,
input S_HRET,
input i_regs,
output Relay_ON
);
reg [1:0] Prescale;
reg [11:0] Dcounter;
parameter Utmost = 12'h800;
always @(posedge HCLK)
begin
if (~S_HRET)
Prescale <= 2'h0;
else
Prescale <= Prescale +1;
end
always @(posedge Prescale[1])
begin
begin
if (~S_HRET)
Dcounter <= 12'hff0;
else if (Dcounter <= Utmost)
Dcounter <= Dcouter+1;
end
assign Relay_ON = (Dcounter < Utmost) || i_regs;
endmodule
仿真程序
module demo;
reg HCLK;
reg S_HRET;
reg i_regs;
wire Relay_ON;
reg [1:0] Prescale ;
reg [11:0] Dcouter;
parameter Utmost =12'h800;
initial
begin
HCLK = 1'b0;
forever #50 HCLK <= ~HCLK;
end
initial
begin
S_HRET <=1'b0;
i_regs <=1'b1;
end
endmodule
仿真出来的波形图,只有HCLK,S_HRET,i_regs.
而没有输出的波形图,如presclae,dcouter,relay_on.
这是为什吗?
请各位指点指点!
testbench的模块名称和demo模块的名称一样了,需要将其中一个模块的名称更改一下。
另外,demo模块要在testbench模块中例化一下
9# AmoiBB
例化是什么意思?
我感觉现在的问题是,仿真程序中的变量没有和源程序中的变量,建立联系关系?
关键还是怎马写仿真程序的问题/
请指教。
对,正是这个原因,你需要在仿真程序中调用你的设计代码,这就是例化,可以查找相关的书籍进一步了解,最好不要找别人直接给你写出来,这样对你才有帮助。
你没在testbench调用你的模块啊?
在modelsim的文本编辑窗口单击鼠标右键,选择show language templates,然后选择create testbench,在弹出的窗口中选择你要仿真的模块。这样软件就帮你生成了一个已经调用了被仿真模块的testbench模板,你自己在往其中加入测试激励就好了。
先感谢楼上的高手,现在输出已经有波形了。
但是程序中的计数器还是没有波形,Dcounter,prescale。还是没有波形?
请再指点一小小下。
不是只有一个输出吗,中间变量一般不会出现在仿真图中
这个可以有吧
需要你自己拉出来看。
一起学习下
仿真程序改了一下:
module demo;
reg HCLK;
reg S_HRET;
reg i_regs;
wire Relay_ON;
reg [1:0] Prescale ;
reg [11:0] Dcouter;
parameter Utmost =12'h800;
demo
DUT(
.HCLK(HCLK),
.S_HRET(S_HRET),
.i_regs(i_regs),
.Relay_ON(Relay_ON)
)
initial
begin
HCLK = 1'b0;
forever #50 HCLK <= ~HCLK;
end
initial
begin
S_HRET <=1'b0;
i_regs <=1'b1;
end
endmodule
这样仿真后,有输出的波形。但是仿真不出没有程序中寄存器的值。还需要增加点什么?
问题基本解决!
可以在MODELSIM中WAVE中增加那些没有的内部寄存器。
看到没有,你的S_HRET 一直为0,结果不可能是对的。
initial
begin
S_HRET <=1'b0;
i_regs <=1'b1;
#1000;
S_HRET <=1'b1;
end
