Advertisement
AtomSoft

UART TX Verilog (115200bps)

Dec 4th, 2012
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module UART0 (CLOCK_50, UART_RXD, UART_TXD);
  2.  
  3. input CLOCK_50;
  4.  
  5. input UART_RXD;
  6. output UART_TXD;
  7.  
  8. reg [7:0]   COUNT;
  9. reg [7:0]   MAX = 8'b11011001;      //USED for 115200 CLOCK (217)
  10. reg [7:0]   TXtemp = 8'b01001010;   //USED for TX Register Temp
  11. reg [7:0]   RXtemp = 8'b00000000;   //USED for RX Register Temp
  12. reg [3:0]   tx_cnt = 4'b0000;                       //USED for TX Register Count
  13. reg             tx_enable = 1;              //USED to Enable Transmission
  14. reg         tx_out = 1;
  15.  
  16. reg UART_CLK = 1'b0;
  17.  
  18. always @ (posedge CLOCK_50)
  19. begin
  20.     if(COUNT == MAX)
  21.     begin
  22.         COUNT <= 0;
  23.         UART_CLK <= ~UART_CLK;
  24.     end
  25.     else
  26.     begin
  27.         COUNT = COUNT + 1;
  28.     end
  29. end
  30.  
  31.  
  32. always @ (posedge UART_CLK)
  33. begin
  34.  
  35.    if (tx_enable) begin
  36.      
  37.       if (tx_cnt == 0) begin
  38.        tx_out <= 0;
  39.      end
  40.      
  41.       if (tx_cnt > 0 && tx_cnt < 9) begin
  42.         tx_out <= TXtemp[tx_cnt -1];
  43.      end
  44.      
  45.       if (tx_cnt == 9) begin
  46.        tx_out <= 1;
  47.        tx_cnt <= 0;
  48.      end
  49.      
  50.       tx_cnt <= tx_cnt + 1;
  51.    end
  52.  
  53. end
  54.  
  55. assign UART_TXD = tx_out;
  56.  
  57. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement