Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2014
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module uart_rx(clock, uart_clock, reset, rx_pin, done, data);
  2.     input wire clock;
  3.     input wire uart_clock;
  4.     input wire reset;
  5.     input wire rx_pin;
  6.     output reg done;
  7.     output reg[7:0] data;
  8.    
  9.     `define UART_RX_IDLE 0
  10.     `define UART_RX_START 1
  11.     `define UART_RX_PRE_DATA 2
  12.     `define UART_RX_DATA 3
  13.    
  14.     reg[2:0] state;
  15.     reg[3:0] cur_bit;
  16.    
  17.     always @(posedge clock) begin
  18.         if (reset == 1'b1) begin
  19.             state <= `UART_RX_IDLE;
  20.             data <= 0;
  21.             done <= 0;
  22.         end else if (uart_clock) begin
  23.             case (state)
  24.                 `UART_RX_IDLE:
  25.                     if (rx_pin == 1'b0)
  26.                         state <= `UART_RX_START;
  27.                 `UART_RX_START:
  28.                     if (rx_pin == 1'b0) begin
  29.                         state <= `UART_RX_PRE_DATA;
  30.                         cur_bit <= 0;
  31.                         done <= 0;
  32.                     end else
  33.                         state <= `UART_RX_IDLE;
  34.                 `UART_RX_PRE_DATA:
  35.                     state <= `UART_RX_DATA;
  36.                 `UART_RX_DATA: begin
  37.                     data[cur_bit] = rx_pin;
  38.                     cur_bit = cur_bit + 1'b1;
  39.                     if (cur_bit == 4'b1000) begin
  40.                         state <= `UART_RX_IDLE;
  41.                         done <= 1;
  42.                     end else
  43.                         state <= `UART_RX_PRE_DATA;
  44.                 end
  45.             endcase
  46.         end
  47.     end
  48. endmodule
  49.  
  50. module uart_tx(clock, uart_clock, reset, tx_pin, send, busy, data);
  51.     input wire clock;
  52.     input wire uart_clock;
  53.     input wire reset;
  54.     output reg tx_pin;
  55.     input wire send;
  56.     output reg busy;
  57.     input wire[7:0] data;
  58.    
  59.     `define UART_TX_IDLE 0
  60.     `define UART_TX_START 1
  61.     `define UART_TX_DATA 2
  62.     `define UART_TX_STOP 3
  63.    
  64.     reg[2:0] state;
  65.     reg[3:0] cur_bit;
  66.    
  67.     always @(posedge clock) begin
  68.         if (reset == 1'b1) begin
  69.             state <= `UART_TX_IDLE;
  70.             busy <= 0;
  71.          end else if (uart_clock) begin
  72.             state[2] = ~state[2];
  73.             case (state)
  74.                 `UART_TX_IDLE: begin
  75.                     tx_pin <= 1;
  76.                     if (send) begin
  77.                         busy <= 1;
  78.                         state <= `UART_TX_START;
  79.                     end
  80.                 end
  81.                 `UART_TX_START: begin
  82.                     tx_pin <= 0;
  83.                     state <= `UART_TX_DATA;
  84.                     cur_bit <= 0;
  85.                 end
  86.                 `UART_TX_DATA: begin
  87.                     tx_pin = data[cur_bit];
  88.                     cur_bit = cur_bit + 1'b1;
  89.                     if (cur_bit == 4'b1000) begin
  90.                         state <= `UART_TX_IDLE;
  91.                         busy <= 0;
  92.                     end
  93.                 end
  94.                 `UART_TX_STOP: begin
  95.                     busy <= 0;
  96.                     state <= `UART_TX_IDLE;
  97.                 end
  98.             endcase
  99.         end
  100.     end
  101. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement