You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

31 lines
863 B

2 years ago
  1. /*
  2. * Hacky baud rate generator to divide a 50MHz clock into a 115200 baud
  3. * rx/tx pair where the rx clcken oversamples by 16x.
  4. */
  5. module baud_rate_gen (
  6. input wire clk_50m,
  7. output wire rxclk_en,
  8. output wire txclk_en
  9. );
  10. parameter RX_ACC_MAX = 50000000 / (115200 * 16);
  11. parameter TX_ACC_MAX = 50000000 / 115200;
  12. parameter RX_ACC_WIDTH = $clog2(RX_ACC_MAX);
  13. parameter TX_ACC_WIDTH = $clog2(TX_ACC_MAX);
  14. reg [RX_ACC_WIDTH - 1:0] rx_acc = 0;
  15. reg [TX_ACC_WIDTH - 1:0] tx_acc = 0;
  16. assign rxclk_en = (rx_acc == 5'd0);
  17. assign txclk_en = (tx_acc == 9'd0);
  18. always @(posedge clk_50m) begin
  19. if (rx_acc == RX_ACC_MAX[RX_ACC_WIDTH-1:0]) rx_acc <= 0;
  20. else rx_acc <= rx_acc + 5'b1;
  21. end
  22. always @(posedge clk_50m) begin
  23. if (tx_acc == TX_ACC_MAX[TX_ACC_WIDTH-1:0]) tx_acc <= 0;
  24. else tx_acc <= tx_acc + 9'b1;
  25. end
  26. endmodule