module DS(
input CLK,
input [3:0] key,
output reg[3:0] led
);

reg[3:0] key_r;
wire[3:0] key_p;

always @ (posedge CLK)
begin
   key_r<={key[3],key[2],key[1],key[0]};
end

assign key_p=key & ~key_r;


always @ (posedge CLK)
begin
   case(key_p)
       4'b0001:led=4'b0001;
        4'b0010:led=4'b0010;
        4'b0100:led=4'b0100;
        4'b1000:led=4'b1000;
    endcase
end

endmodule

核心在assign key_p=key & ~key_r;一旦有变化,key_p就为1,只检测下降沿。

key_r与key差一个时钟周期。

千万不要直接把key放进always里,always最好只放clk或者reg的变量,其他wire的变量不要轻易放入之内。

相关文章:

  • 2022-12-23
  • 2021-12-04
  • 2022-12-23
  • 2022-01-22
  • 2022-12-23
  • 2021-05-10
  • 2022-02-05
  • 2022-12-23
猜你喜欢
  • 2021-08-12
  • 2021-12-08
  • 2022-12-23
  • 2021-08-07
  • 2021-11-30
相关资源
相似解决方案