FPGA之边沿检测设计(上升沿,下降沿,双边沿)

记录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 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[2\]中的Verilog代码,可以实现多位寄存器检测上升下降沿的功能。在该代码中,使用了两级寄存器来检测下降沿。每个寄存器都会在时钟上升沿时更新,并将前一级寄存器的值存储在当前级寄存器中。通过对两级寄存器的值进行逻辑运算,可以得到下降沿指示信号。具体的代码如下: ```verilog module detect_multi ( input sys_clk, // 时钟(设定为 50MHz) input sys_rst_n, // 复位信号(n 表示低电平有效) input \[N-1:0\] in, // 需要进行上升下降沿检测的输入信号(N为位宽) output \[N-1:0\] in_pos, // 输出的上升沿指示信号 output \[N-1:0\] in_neg // 输出的下降沿指示信号 ); reg \[N-1:0\] in_d1; // 一级寄存器 reg \[N-1:0\] in_d2; // 二级寄存器 assign in_neg = ~in_d1 & in_d2; // 组合逻辑得到下降沿 assign in_pos = in & ~in_d1; // 组合逻辑得到上升沿 always @(posedge sys_clk or negedge sys_rst_n) begin if (!sys_rst_n) begin in_d1 <= {N{1'b0}}; // 复位清零 in_d2 <= {N{1'b0}}; end else begin in_d1 <= in; // 寄存一拍 in_d2 <= in_d1; // 寄存二拍 end end endmodule ``` 在这个代码中,`N`表示输入信号的位宽。通过使用多级寄存器,我们可以同时检测多位输入信号的上升和下降沿。 #### 引用[.reference_title] - *1* *2* *3* [FPGA实现边沿检测电路(上升沿下降沿)](https://blog.csdn.net/wuzhikaidetb/article/details/112187021)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值