verilog HDL问题

2024-12-03 12:52:57
推荐回答(3个)
回答1:

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

回答2:

or negedge set or negedge reset 你可以把这句去掉,做成同步复位的,然后你在编译复位,这样子应该可以了

回答3:

你是想在set下降沿的时候让Q自减1吗?