记录FPGA的小知识点,不断积累自己的技能,想要工作顺利,就得成为大牛。
顺便记录一个边沿检测的口诀,方便记忆,我自己瞎编的^-^。
后反前正是上升,后正前反是下降 ; 就是两个寄存器的前后顺序不一样。
边沿检测的方法都很不相同,是最基础的一部分,可以用打两拍实现,也可以用移位寄存器实现,还有的打三拍,其实两拍就已经足够用,用到的地方也很多,检测脉冲,检测SPI接口的时钟上升沿和下降沿,按键消抖等等都会用到,在此记录一下。
module pos_neg(
input i_sys_clk ,
input i_sys_rst_n ,
input i_pulse ,//输入脉冲
output o_pos ,//输出下降沿
output o_neg //输出上升沿
);
reg pulse_reg0 ;
reg pulse_reg1 ;
wire data_edge ;
//2022 0126 Mr li
always @(posedge i_sys_clk or negedge i_sys_rst_n)
begin
if(!i_sys_rst_n)
begin
pulse_reg0 <= 1'b0;
pulse_reg1 <= 1'b0;
end
else
begin
pulse_reg0 <= i_pulse ;
pulse_reg1 <= pulse_reg0;
end
end
//后反前正是上升,后正前反是下降,两个向或得双边;
assign o_pos = ~pulse_reg1 && pulse_reg0;//上升沿
assign o_neg = ~pulse_reg0 && pulse_reg1;//下降沿
assign data_edge = o_pos | o_neg ;//双边沿
endmodule
。