You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.3 KiB
49 lines
1.3 KiB
module zutils_edge_detecter (
|
|
input clk, //clock input
|
|
input rst_n, //asynchronous reset input, low active
|
|
input wire in_signal,
|
|
output reg in_signal_last,
|
|
output reg in_signal_rising_edge,
|
|
output reg in_signal_falling_edge,
|
|
output reg in_signal_edge
|
|
);
|
|
|
|
initial begin
|
|
in_signal_last = 0;
|
|
in_signal_rising_edge = 0;
|
|
in_signal_falling_edge = 0;
|
|
in_signal_edge = 0;
|
|
end
|
|
|
|
|
|
|
|
always @(posedge clk or negedge rst_n) begin
|
|
if (!rst_n) begin
|
|
in_signal_last <= 0;
|
|
end else begin
|
|
in_signal_last <= in_signal;
|
|
end
|
|
end
|
|
|
|
always @(posedge clk or negedge rst_n) begin
|
|
if (!rst_n) begin
|
|
in_signal_rising_edge <= 0;
|
|
in_signal_falling_edge <= 0;
|
|
in_signal_edge <= 0;
|
|
end else begin
|
|
if (in_signal_last == 0 && in_signal == 1) begin
|
|
in_signal_rising_edge <= 1;
|
|
in_signal_falling_edge <= 0;
|
|
in_signal_edge <= 1;
|
|
end else if (in_signal_last == 1 && in_signal == 0) begin
|
|
in_signal_rising_edge <= 0;
|
|
in_signal_falling_edge <= 1;
|
|
in_signal_edge <= 1;
|
|
end else begin
|
|
in_signal_rising_edge <= 0;
|
|
in_signal_falling_edge <= 0;
|
|
in_signal_edge <= 0;
|
|
end
|
|
end
|
|
end
|
|
endmodule
|