CmdSync.v 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. module CmdSync #(
  2. parameter WIDTH = 4,
  3. parameter STAGES = 3
  4. )
  5. (
  6. input ClkFast_i,
  7. input ClkSlow_i,
  8. input [WIDTH-1:0] ClkDiv_i,
  9. output [WIDTH-1:0] ClkDiv_o
  10. );
  11. //================================================================================
  12. // REG/WIRE
  13. //================================================================================
  14. //lauch registers
  15. reg [WIDTH-1:0] clkDivReg;
  16. // capture registers
  17. (* ASYNC_REG = "TRUE" *) reg [STAGES*WIDTH-1:0] clkDivReg_c;
  18. //================================================================================
  19. // ASSIGNMENTS
  20. //===============================================================================
  21. assign ClkDiv_o = clkDivReg_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  22. //================================================================================
  23. // CODING
  24. //================================================================================
  25. always @(posedge ClkFast_i) begin
  26. clkDivReg <= ClkDiv_i;
  27. end
  28. always @(posedge ClkSlow_i) begin
  29. clkDivReg_c <= {clkDivReg_c[(STAGES-1)*WIDTH-1:0], clkDivReg};
  30. end
  31. endmodule