module edge_det( input sys_clk, input sys_rst_n, input i_btn, output posedge_flag, output negedge_flag );设计一个边沿检测电路,对输入信号i_btn进行上升沿和下降沿检测。每当检测出上升沿或下降沿,则相应的标志信号被拉高1个周期的高电平。电路采用低电平同步复位信号。
时间: 2024-03-12 12:49:16 浏览: 88
获取电平或者时钟信号上升或者下降沿的程序
以下是基于Verilog语言的边沿检测电路设计:
```
module edge_det(
input sys_clk,
input sys_rst_n,
input i_btn,
output reg posedge_flag,
output reg negedge_flag
);
reg i_btn_last;
always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n) begin
i_btn_last <= 1'b0;
posedge_flag <= 1'b0;
negedge_flag <= 1'b0;
end else begin
i_btn_last <= i_btn;
if (i_btn && !i_btn_last) begin
posedge_flag <= 1'b1;
negedge_flag <= 1'b0;
end else if (!i_btn && i_btn_last) begin
posedge_flag <= 1'b0;
negedge_flag <= 1'b1;
end else begin
posedge_flag <= 1'b0;
negedge_flag <= 1'b0;
end
end
end
endmodule
```
在该电路中,使用一个寄存器i_btn_last来记录上一个时刻的i_btn输入信号。当i_btn信号发生变化并且从低电平变为高电平时,posedge_flag输出信号拉高1个周期的高电平,表示检测到了上升沿。当i_btn信号发生变化并且从高电平变为低电平时,negedge_flag输出信号拉高1个周期的高电平,表示检测到了下降沿。
阅读全文