ResetFilter.v 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. module ResetFilter (
  2. clk_i,
  3. rst_i,
  4. perm_i,
  5. filtered_rst_o
  6. );
  7. parameter STAGE_NUM = 1;
  8. parameter RESET_FRONT = "RISING"; // FALLING
  9. input clk_i;
  10. input rst_i;
  11. input perm_i;
  12. output filtered_rst_o;
  13. reg [STAGE_NUM-1:0] rst_filter;
  14. assign filtered_rst_o = rst_filter[STAGE_NUM-1];
  15. generate
  16. if (RESET_FRONT == "RISING") begin
  17. if (STAGE_NUM < 2) begin
  18. always @(posedge clk_i or posedge rst_i) begin
  19. if (rst_i) begin
  20. rst_filter <= 1'b1;
  21. end else begin
  22. rst_filter <= perm_i;
  23. end
  24. end
  25. end else begin
  26. always @(posedge clk_i or posedge rst_i) begin
  27. if (rst_i) begin
  28. rst_filter <= {STAGE_NUM{1'b1}};
  29. end else begin
  30. rst_filter <= {rst_filter[STAGE_NUM-2:0], perm_i};
  31. end
  32. end
  33. end
  34. end else begin
  35. if (STAGE_NUM < 2) begin
  36. always @(posedge clk_i or negedge rst_i) begin
  37. if (!rst_i) begin
  38. rst_filter <= 1'b1;
  39. end else begin
  40. rst_filter <= perm_i;
  41. end
  42. end
  43. end else begin
  44. always @(posedge clk_i or negedge rst_i) begin
  45. if (!rst_i) begin
  46. rst_filter <= {STAGE_NUM{1'b1}};
  47. end else begin
  48. rst_filter <= {rst_filter[STAGE_NUM-2:0], perm_i};
  49. end
  50. end
  51. end
  52. end
  53. endgenerate
  54. endmodule