上面是数字跑表计数器模块
仿真图,分十位MH计时到5后仍然继续计数,请大神指点这个问题怎么解决。
下面是程序:
module jishuqi(clk_100hz,reset,pause,MH,ML,SH,SL,MSH,MSL);
input clk_100hz,reset,pause;
output reg [3:0]MH;
output reg [3:0]ML;
output reg [3:0]SL;
output reg [3:0]SH;
output reg [3:0]MSL;
output reg [3:0]MSH;
reg cnt_ms;
reg cnt_s;
always@(posedge clk_100hz or negedge reset)
begin
if(!reset)
begin
MSL<=4'd0;
MSH<=4'd0;
cnt_ms<=1'b0;
end
else
begin
if(!pause)
begin
if(MSL==9)
begin
if(MSH==9)
begin
MSL<=4'd0;
MSH<=4'd0;
cnt_ms<=1'b1;
end
else
begin
MSL<=0;
MSH<=MSH+1'b1;
cnt_ms<=1'b0;
end
end
else
begin
MSL<=MSL+1'b1;
cnt_ms<=1'b0;
end
end
end
end
always@(posedge cnt_ms or negedge reset)
begin
if(!reset)
begin
SL<=4'd0;
SH<=4'd0;
cnt_s<=1'b0;
end
else
begin
if(!pause)
begin
if(SL==9)
begin
if(SH==5)
begin
cnt_s<=1'b1;
SH<=4'd0;
SL<=4'd0;
end
else
begin
cnt_s<=1'b0;
SH<=SH+1'b1;
SL<=4'd0;
end
end
else
begin
SL<=SL+1'b1;
cnt_s<=1'b0;
end
end
end
end
always@(posedge cnt_s or negedge reset)
begin
if(!reset)
begin
ML<=4'd0;
MH<=4'd0;
end
else
begin
if(!pause)
begin
if(ML==9)
begin
if(MH==5)
begin
MH<=4'd0;
ML<=4'd0;
end
else
ML<=4'd0;
MH<=MH+1'b1;
end
else
begin
ML<=ML+1'b1;
end
end
end
end
endmodule
是不是频率有偏差?或者没清零,可能不能每次正好都是5
评分
查看全部评分
我是定义了四位MH 这是为了给下一个模块输入的信号ML MSL等位宽一样 而且这个计数到5就应该执行MH<=0的语句了呀 怎么还继续计数呢 begin那个问题已经解决了 这个模块仿真对了 就是不太明白这个MH计数超范围的原因
是不是MH==5的语句。在前仿真的时候没有问题。但是在后仿真的时候会跑到15?
然后改成MH>6的时候,就前后仿真都没问题?-
如果是的话,就是时序约束的问题了。建立时间,保持时间不满足。
ML<=4'd0;
MH<=MH+1'b1;
end
这段代码 else中有多个语句,加上一个begin 后跟一个end,目前你的程序的end不是对应的else中的end
一周热门 更多>