TI

为什么我的计数器不计数呢modelsim仿真

2019-11-21 13:43发布

module LED1(clk,rst,led);

input clk,rst;
output led;

parameter time_1 = 27'd5000_0000;

reg[26:0] cnt;
reg led;

always @(posedge clk or negedge rst)
                        IF(!rst)
                                cnt <= 27'd0;
                        else if(cnt == time_1)
                                cnt <= 27'd0;
                        else 
                                cnt <= cnt + 1'b1;
                                
always @(posedge clk or negedge rst)
                        if(!rst)
                                led <= 1'b1;
                        else if(cnt == time_1)
                                led <= ~led;
                        
endmodule 

`timescale 1 ns/ 1 ns
module led1_vlg_tst();
reg eachvec;
reg clk;
reg rst;
reg cnt;                                               
wire led;
                         
led1 i1 (  
        .clk(clk),
        .led(led),
        .rst(rst)
);
initial                                                
begin                                                  
                     
clk = 0;
rst = 0;
#100 
rst = 1;                                           
end  
always #1 clk = ~clk;                                                  
endmodule


cnt 一直为 x 不计数
QQ图片20190923155543.png


module LED1(clk,rst,led);

input clk,rst;
output led;

parameter time_1 = 27'd5000_0000;

reg[26:0] cnt;
reg led;

always @(posedge clk or negedge rst)
                        IF(!rst)
                                cnt <= 27'd0;
                        else if(cnt == time_1)
                                cnt <= 27'd0;
                        else 
                                cnt <= cnt + 1'b1;
                                
always @(posedge clk or negedge rst)
                        if(!rst)
                                led <= 1'b1;
                        else if(cnt == time_1)
                                led <= ~led;
                        
endmodule 

`timescale 1 ns/ 1 ns
module led1_vlg_tst();
reg eachvec;
reg clk;
reg rst;
reg cnt;                                               
wire led;
                         
led1 i1 (  
        .clk(clk),
        .led(led),
        .rst(rst)
);
initial                                                
begin                                                  
                     
clk = 0;
rst = 0;
#100 
rst = 1;                                           
end  
always #1 clk = ~clk;                                                  
endmodule


cnt 一直为 x 不计数
QQ图片20190923155543.png


6条回答
看不懂,只能帮顶了~
查看更多
你为啥第一个if要大写呢
查看更多
你在initial begin 中都没有给你的LED进行一个初值赋值
查看更多
在tb里面的cnt必然不会计数了,你LED1模块的cnt都没有输出给tb
查看更多
修改一下if,initial begin 中LED进行一个初值赋值,然后就是你的仿真的东西错了,你仿真的是tb,这应该不是你想看的。你应该在modelsim的sim中tb下找到LED1进行仿真
查看更多
你的代码没有问题,我复制后直接仿真可以正常运行。
问题出在你的观察窗口,你观察的是激励文件led1_vlg_tst.v的计数器cnt,它没有逻辑操作,也没有initial初始化,所以一直是x。你把逻辑代码led1.v里的端口添加到仿真窗口,可以正常观察里面计数器cnt的变化。
补充一点,time_1 = 27'd5000_0000有点大,仿真时间有点长,适当改小可以更快观察仿真结果。
time_1=5000_0000代码仿真OK.png
time_1=5000代码仿真OK.png
查看更多