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

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. module zutils_edge_detecter (
  2. input clk, //clock input
  3. input rst_n, //asynchronous reset input, low active
  4. input wire in_signal,
  5. output reg in_signal_last,
  6. output reg in_signal_rising_edge,
  7. output reg in_signal_falling_edge,
  8. output reg in_signal_edge
  9. );
  10. initial begin
  11. in_signal_last = 0;
  12. in_signal_rising_edge = 0;
  13. in_signal_falling_edge = 0;
  14. in_signal_edge = 0;
  15. end
  16. always @(posedge clk or negedge rst_n) begin
  17. if (!rst_n) begin
  18. in_signal_last <= 0;
  19. end else begin
  20. in_signal_last <= in_signal;
  21. end
  22. end
  23. always @(posedge clk or negedge rst_n) begin
  24. if (!rst_n) begin
  25. in_signal_rising_edge <= 0;
  26. in_signal_falling_edge <= 0;
  27. in_signal_edge <= 0;
  28. end else begin
  29. if (in_signal_last == 0 && in_signal == 1) begin
  30. in_signal_rising_edge <= 1;
  31. in_signal_falling_edge <= 0;
  32. in_signal_edge <= 1;
  33. end else if (in_signal_last == 1 && in_signal == 0) begin
  34. in_signal_rising_edge <= 0;
  35. in_signal_falling_edge <= 1;
  36. in_signal_edge <= 1;
  37. end else begin
  38. in_signal_rising_edge <= 0;
  39. in_signal_falling_edge <= 0;
  40. in_signal_edge <= 0;
  41. end
  42. end
  43. end
  44. endmodule