| // UART transmitter. | 
 | module UART_TX( | 
 |     input rst, clk, baud_edge, data_ready, | 
 |     input [7:0] data, | 
 |     output reg tx, data_accepted | 
 | ); | 
 |     localparam START = (1 << 0), DATA = (1 << 1), END = (1 << 2); | 
 |  | 
 |     reg [7:0] data_reg; | 
 |     reg [2:0] data_counter; | 
 |     reg [3:0] state; | 
 |  | 
 |     initial begin | 
 |         tx <= 1; | 
 |         data_accepted <= 0; | 
 |     end | 
 |  | 
 |     always @(posedge clk) begin | 
 |         if(rst) begin | 
 |             state <= END; | 
 |             tx <= 1; | 
 |             data_accepted <= 0; | 
 |         end else if(baud_edge) begin | 
 |             case(state) | 
 |             START: begin | 
 |                 tx <= 0; | 
 |                 data_counter <= 0; | 
 |                 state <= DATA; | 
 |             end | 
 |             DATA: begin | 
 |                 tx <= data_reg[data_counter]; | 
 |                 if(data_counter != 7) begin | 
 |                     data_counter <= data_counter + 1; | 
 |                 end else begin | 
 |                     state <= END; | 
 |                     data_counter <= 0; | 
 |                 end | 
 |             end | 
 |             END: begin | 
 |                 tx <= 1; | 
 |                 if(data_ready) begin | 
 |                     data_accepted <= 1; | 
 |                     data_reg <= data; | 
 |                     state <= START; | 
 |                 end | 
 |             end | 
 |             default: begin | 
 |                 tx <= 1; | 
 |                 state <= END; | 
 |             end | 
 |             endcase | 
 |         end else begin | 
 |             data_accepted <= 0; | 
 |         end | 
 |     end | 
 | endmodule |