warning里面提示你if的结构用的不对,形成loop,并且要保证每一个if都要对应合理的else,你这个设计可能就是这方面没有对应好,形成锁存了吧,我把你的程序改了一下,用三元运算符?:代替if-else,程序如下:
module test(cp,set,reset,Q);
input cp,set,reset;
output reg[4:0]Q;
always@(posedge cp or negedge set or negedge reset)
if(reset==0)
Q <= 5'd0;
else
Q <= (set == 1'b0) ? Q - 5'd1 : (Q == 5'd23) ? 5'd0 : Q + 5'd1;
endmodule
or negedge set or negedge reset 你可以把这句去掉,做成同步复位的,然后你在编译复位,这样子应该可以了
你是想在set下降沿的时候让Q自减1吗?