CmdSync.v 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. //////////////////////////////////////////////////////////////////////////////////
  2. // Company: TAIR
  3. // Engineer:
  4. //
  5. // Create Date: 10/30/2023 11:24:31 AM
  6. // Design Name:
  7. // Module Name: CmdSync
  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 CmdSync #(
  21. parameter WIDTH = 4,
  22. parameter STAGES = 3
  23. )
  24. (
  25. input ClkFast_i,
  26. input ClkSlow_i,
  27. input [WIDTH-1:0] ClkDiv_i,
  28. output [WIDTH-1:0] ClkDiv_o
  29. );
  30. //================================================================================
  31. // REG/WIRE
  32. //================================================================================
  33. //lauch registers
  34. reg [WIDTH-1:0] clkDivReg;
  35. // capture registers
  36. (* ASYNC_REG = "TRUE" *) reg [STAGES*WIDTH-1:0] clkDivReg_c;
  37. //================================================================================
  38. // ASSIGNMENTS
  39. //===============================================================================
  40. assign ClkDiv_o = clkDivReg_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  41. //================================================================================
  42. // CODING
  43. //================================================================================
  44. always @(posedge ClkFast_i) begin
  45. clkDivReg <= ClkDiv_i;
  46. end
  47. always @(posedge ClkSlow_i) begin
  48. clkDivReg_c <= {clkDivReg_c[(STAGES-1)*WIDTH-1:0], clkDivReg};
  49. end
  50. endmodule