Sync1bit.v 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //////////////////////////////////////////////////////////////////////////////////
  2. // Company: TAIR
  3. // Engineer:
  4. //
  5. // Create Date: 10/30/2023 11:24:31 AM
  6. // Design Name:
  7. // Module Name: Sync1bit
  8. // Project Name: S5443_V3_FPGA3
  9. // Target Devices: BOARD: BY5443v3. FPGA: xc7s25csga225-2
  10. // Tool Versions:
  11. // Description:
  12. //
  13. // Dependencies:
  14. //
  15. // Revision:
  16. // Revision 1.0 - File Created
  17. // Additional Comments:
  18. //
  19. //////////////////////////////////////////////////////////////////////////////////
  20. module Sync1bit #(
  21. parameter WIDTH = 1,
  22. parameter STAGES = 3
  23. )
  24. (
  25. input ClkFast_i,
  26. input ClkSlow_i,
  27. input TxEn_i,
  28. input RstReg_i,
  29. output [WIDTH-1:0] TxEn_o,
  30. output [WIDTH-1:0] RstReg_o
  31. );
  32. //================================================================================
  33. // REG/WIRE
  34. //================================================================================
  35. //lauch registers
  36. reg spiTxEnReg;
  37. reg rstReg;
  38. // capture registers
  39. (* ASYNC_REG = "TRUE" *) reg [STAGES*WIDTH-1:0] spiTxEnReg_c;
  40. (* ASYNC_REG = "TRUE" *) reg [STAGES*WIDTH-1:0] rstReg_c;
  41. //================================================================================
  42. // ASSIGNMENTS
  43. //================================================================================
  44. assign TxEn_o = spiTxEnReg_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  45. assign RstReg_o = rstReg_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  46. //================================================================================
  47. // LOCALPARAMS
  48. //================================================================================
  49. //================================================================================
  50. // CODING
  51. //================================================================================
  52. always @(posedge ClkFast_i) begin
  53. spiTxEnReg <= TxEn_i;
  54. rstReg <= RstReg_i;
  55. end
  56. always @(posedge ClkSlow_i) begin
  57. spiTxEnReg_c <= {spiTxEnReg_c[(STAGES-1)*WIDTH-1:0], spiTxEnReg};
  58. rstReg_c <= {rstReg_c[(STAGES-1)*WIDTH-1:0], rstReg};
  59. end
  60. endmodule