FPGA 中的上升沿和下降沿的判断,原理都是buffer 进行缓存。要分清楚的是,信号是先通过buffer0 或者 reg1,最后是通过 buffer1 和 reg2 , reg_x ,一定是先通过数值小的,再通过数值大的。
方法1: 采用拼接的方式
reg [1:0] r_Key;
always@(posedge Clk)
r_Key <= {r_Key[0],Key};
wire pedge_key;
assign pedge_key = r_Key == 2'b01;
wire nedge_key;
assign nedge_key = r_Key == 2'b10;
方法2:
always@(posedge clk or negedge reset_n)
if(!reset_n)begin
key_in_reg1 <= 1'b0;
key_in_reg2 <= 1'b1;
end
else begin
key_in_reg1 <= key_in;
key_in_reg2 <= key_in_reg1;
end
assign key_pedge = key_in_reg1&(!key_in_reg2);
assign key_nedge = (!key_in_reg1)&key_in_reg2;