EazyChange

导航

 
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的变量不要轻易放入之内。

posted on 2015-04-07 21:23  EazyChange  阅读(1345)  评论(0编辑  收藏  举报