CmdSync.v 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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: This module synchronize command that determines output clock
  12. // frequency to the respective clock domain
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 1.0 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module CmdSync #(
  22. parameter WIDTH = 4,
  23. parameter STAGES = 3
  24. )
  25. (
  26. input ClkFast_i,
  27. input ClkSlow_i,
  28. input [WIDTH-1:0] ClkDiv_i,
  29. output [WIDTH-1:0] ClkDiv_o
  30. );
  31. //================================================================================
  32. // REG/WIRE
  33. //================================================================================
  34. //lauch registers
  35. reg [WIDTH-1:0] clkDivReg;
  36. // capture registers
  37. (* ASYNC_REG = "TRUE" *) reg [STAGES*WIDTH-1:0] clkDivReg_c;
  38. //================================================================================
  39. // ASSIGNMENTS
  40. //===============================================================================
  41. assign ClkDiv_o = clkDivReg_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  42. //================================================================================
  43. // CODING
  44. //================================================================================
  45. always @(posedge ClkFast_i) begin
  46. clkDivReg <= ClkDiv_i;
  47. end
  48. always @(posedge ClkSlow_i) begin
  49. clkDivReg_c <= {clkDivReg_c[(STAGES-1)*WIDTH-1:0], clkDivReg};
  50. end
  51. endmodule