程序如下:
module chuangxinjijin(
clk_50M,rst_n,
count1,count2,
SP
);
input clk_50M,rst_n;
output reg [16:0] count1;
output reg [14:0] count2;
output reg SP;
//-----------------------------SP-------------------------------------
reg clear;
always @(negedge clk_50M or negedge rst_n)
if(!rst_n)
count1 <= 1'b0;
else if(count1==59996 )
begin
clear <= 1;
count1 <= 1'b0;
end
else
begin
count1 <= count1 + 1'b1;
clear <= 0;
end
//--------------------------------------------------------------
always @(negedge clk_50M or negedge rst_n)
if(!rst_n)
count2 <= 1'b0;
else if(coun2>=0 && count2<281)
begin
SP <= 1'b0;
count2 <= count2 + 1'b1;
end
else if(count2>=281 && count2<286 )
begin
SP <= 1'b1;
count2 <= count2 + 1'b1;
end
else if(count2>=286 && count2<330)
begin
SP <= 1'b0;
count2 <= count2 + 1'b1;
end
else if (count2 == 330)
count2 <= 281;
else if (clear == 1)
count2 <= 0;
else
count2 <= count2 + 1'b1;
endmodule
问题如下,为什么在clear为1,也就四count1计数到59996时,count2不为0哇
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
要是我想让else if (clear == 1)
count2 <= 0;
这条语句生效怎么改一下?调了好半天了,呼呼
if(!rst_n||clear)
count2 <= 1'b0;
这样应该就可以了
else if (count2 == 330)
count2 <= 281;
这句之后,就返回到刚开始的if语句了,也就是你的clear那一句,一直不会执行。
更正方法:
(1)
else if (clear == 1)
count2 <= 0;
把这一句提前,放到复位后面,如下:
if(!rst_n)
count2 <= 1'b0;else if (clear == 1)
count2 <= 0;
else if(coun2>=0 && count2<281) begin
SP <= 1'b0;
count2 <= count2 + 1'b1;
end
这样的话,就可以先判断clear语句。
(2)像楼上一样,将复位和clear合到一块。
如果你的if else 语句的条件不是一个性质的话(不属于一类),例如clear和 count2的变化,你放到一个if else 中之后,如果不注意顺序就会出现你的问题,部分语句永远不会执行。
一周热门 更多>