微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > modelsim 仿真小小小小小小问题

modelsim 仿真小小小小小小问题

时间:10-02 整理:3721RD 点击:
为什吗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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top