Sync1bit.v 813 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. module Sync1bit #(
  2. parameter WIDTH = 1,
  3. parameter STAGES = 3
  4. )
  5. (
  6. input ClkFast_i,
  7. input ClkSlow_i,
  8. input TxEn_i,
  9. input RstReg_i,
  10. output [WIDTH-1:0] TxEn_o,
  11. output [WIDTH-1:0] RstReg_o
  12. );
  13. //lauch registers
  14. reg spiTxEnReg;
  15. reg rstReg;
  16. // capture registers
  17. (* ASYNC_REG = "TRUE" *) reg [STAGES*WIDTH-1:0] spiTxEnReg_c;
  18. (* ASYNC_REG = "TRUE" *) reg [STAGES*WIDTH-1:0] rstReg_c;
  19. assign TxEn_o = spiTxEnReg_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  20. assign RstReg_o = rstReg_c[STAGES*WIDTH-1:(STAGES-1)*WIDTH];
  21. always @(posedge ClkFast_i) begin
  22. spiTxEnReg <= TxEn_i;
  23. rstReg <= RstReg_i;
  24. end
  25. always @(posedge ClkSlow_i) begin
  26. spiTxEnReg_c <= {spiTxEnReg_c[(STAGES-1)*WIDTH-1:0], spiTxEnReg};
  27. rstReg_c <= {rstReg_c[(STAGES-1)*WIDTH-1:0], rstReg};
  28. end
  29. endmodule