Module: interface_uart


Ports:

DirectionSizeName
inputUART_RX
outputUART_TX
inputclk
output[135:0]rx_data
input[135:0]tx_data

Parameter:

ParameterDefault
BUFFER_SIZE0x88136
Baud0xF42401000000
ClkFrequency0x2DC6C0048000000
MSGID0x746972771953067639
TIMEOUT0xB71B0012000000
[ZOOM]
G interfaceuart interface_uart PORTS UART_RX UART_TX clk rx_data[135:0] tx_data[135:0] uart_rx1 UART_RX RxD_data RxD_data_ready RxD_endofpacket RxD_idle clk     uart_tx1 UART_TX TxD_busy TxD_data TxD_start clk interface_uart.v uartrx uart_rx PORTS RxD RxD_data[7:0] RxD_data_ready RxD_endofpacket RxD_idle clk tickgen uart_rx.v interfaceuart:uart_rx1_RxD->uartrx:RxD interfaceuart:uart_rx1_RxD_data->uartrx:RxD_data interfaceuart:uart_rx1_RxD_data_ready->uartrx:RxD_data_ready interfaceuart:uart_rx1_RxD_endofpacket->uartrx:RxD_endofpacket interfaceuart:uart_rx1_RxD_idle->uartrx:RxD_idle interfaceuart:uart_rx1_clk->uartrx:clk uarttx uart_tx PORTS TxD TxD_busy TxD_data[7:0] TxD_start clk tickgen uart_tx.v interfaceuart:uart_tx1_TxD->uarttx:TxD interfaceuart:uart_tx1_TxD_busy->uarttx:TxD_busy interfaceuart:uart_tx1_TxD_data->uarttx:TxD_data interfaceuart:uart_tx1_TxD_start->uarttx:TxD_start interfaceuart:uart_tx1_clk->uarttx:clk pins PINS output PIN_3 input PIN_87 output PIN_86 input PIN_88 input PIN_91 input PIN_90 input PIN_89 input PIN_132 input PIN_99 input PIN_98 output PIN_129 input PIN_128 output PIN_127 output PIN_85 output PIN_137 output PIN_135 output PIN_136 output PIN_133 output PIN_143 output PIN_144 output PIN_1 output PIN_141 output PIN_142 output PIN_138 output PIN_2 input PIN_24 rio rio PORTS BLINK_LED INTERFACE_UART_RX INTERFACE_UART_TX SW_S1 SW_S2 SW_S3 SW_S4 VIN5_IR VIN6_CLK VIN6_DATA VIN7_CS VIN7_MISO VIN7_SCLK VOUT4_FREQUENCY VOUT8_7SEG_EN1 VOUT8_7SEG_EN2 VOUT8_7SEG_EN3 VOUT8_7SEG_EN4 VOUT8_7SEG_SEG_A VOUT8_7SEG_SEG_B VOUT8_7SEG_SEG_C VOUT8_7SEG_SEG_D VOUT8_7SEG_SEG_E VOUT8_7SEG_SEG_F VOUT8_7SEG_SEG_G sysclk blink1     uart1 INTERFACE_UART_RX INTERFACE_UART_TX sysclk rx_data tx_data     vin_ir5     vin_ps26     vin_tlc549c7     vout_7seg8     vout_frequency4 rio.v pins:PIN_3->rio:BLINK_LED pins:PIN_87->rio:INTERFACE_UART_RX pins:PIN_86->rio:INTERFACE_UART_TX pins:PIN_88->rio:SW_S1 pins:PIN_91->rio:SW_S2 pins:PIN_90->rio:SW_S3 pins:PIN_89->rio:SW_S4 pins:PIN_132->rio:VIN5_IR pins:PIN_99->rio:VIN6_CLK pins:PIN_98->rio:VIN6_DATA pins:PIN_129->rio:VIN7_CS pins:PIN_128->rio:VIN7_MISO pins:PIN_127->rio:VIN7_SCLK pins:PIN_85->rio:VOUT4_FREQUENCY pins:PIN_137->rio:VOUT8_7SEG_EN1 pins:PIN_135->rio:VOUT8_7SEG_EN2 pins:PIN_136->rio:VOUT8_7SEG_EN3 pins:PIN_133->rio:VOUT8_7SEG_EN4 pins:PIN_143->rio:VOUT8_7SEG_SEG_A pins:PIN_144->rio:VOUT8_7SEG_SEG_B pins:PIN_1->rio:VOUT8_7SEG_SEG_C pins:PIN_141->rio:VOUT8_7SEG_SEG_D pins:PIN_142->rio:VOUT8_7SEG_SEG_E pins:PIN_138->rio:VOUT8_7SEG_SEG_F pins:PIN_2->rio:VOUT8_7SEG_SEG_G pins:PIN_24->rio:sysclk rio:uart1_UART_RX->interfaceuart:UART_RX rio:uart1_UART_TX->interfaceuart:UART_TX rio:uart1_clk->interfaceuart:clk rio:uart1_rx_data->interfaceuart:rx_data rio:uart1_tx_data->interfaceuart:tx_data
G interfaceuart interface_uart PORTS UART_RX UART_TX clk rx_data[135:0] tx_data[135:0] uart_rx1 UART_RX RxD_data RxD_data_ready RxD_endofpacket RxD_idle clk     uart_tx1 UART_TX TxD_busy TxD_data TxD_start clk interface_uart.v uartrx uart_rx PORTS RxD RxD_data[7:0] RxD_data_ready RxD_endofpacket RxD_idle clk tickgen uart_rx.v interfaceuart:uart_rx1_RxD->uartrx:RxD interfaceuart:uart_rx1_RxD_data->uartrx:RxD_data interfaceuart:uart_rx1_RxD_data_ready->uartrx:RxD_data_ready interfaceuart:uart_rx1_RxD_endofpacket->uartrx:RxD_endofpacket interfaceuart:uart_rx1_RxD_idle->uartrx:RxD_idle interfaceuart:uart_rx1_clk->uartrx:clk uarttx uart_tx PORTS TxD TxD_busy TxD_data[7:0] TxD_start clk tickgen uart_tx.v interfaceuart:uart_tx1_TxD->uarttx:TxD interfaceuart:uart_tx1_TxD_busy->uarttx:TxD_busy interfaceuart:uart_tx1_TxD_data->uarttx:TxD_data interfaceuart:uart_tx1_TxD_start->uarttx:TxD_start interfaceuart:uart_tx1_clk->uarttx:clk pins PINS output PIN_3 input PIN_87 output PIN_86 input PIN_88 input PIN_91 input PIN_90 input PIN_89 input PIN_132 input PIN_99 input PIN_98 output PIN_129 input PIN_128 output PIN_127 output PIN_85 output PIN_137 output PIN_135 output PIN_136 output PIN_133 output PIN_143 output PIN_144 output PIN_1 output PIN_141 output PIN_142 output PIN_138 output PIN_2 input PIN_24 rio rio PORTS BLINK_LED INTERFACE_UART_RX INTERFACE_UART_TX SW_S1 SW_S2 SW_S3 SW_S4 VIN5_IR VIN6_CLK VIN6_DATA VIN7_CS VIN7_MISO VIN7_SCLK VOUT4_FREQUENCY VOUT8_7SEG_EN1 VOUT8_7SEG_EN2 VOUT8_7SEG_EN3 VOUT8_7SEG_EN4 VOUT8_7SEG_SEG_A VOUT8_7SEG_SEG_B VOUT8_7SEG_SEG_C VOUT8_7SEG_SEG_D VOUT8_7SEG_SEG_E VOUT8_7SEG_SEG_F VOUT8_7SEG_SEG_G sysclk blink1     uart1 INTERFACE_UART_RX INTERFACE_UART_TX sysclk rx_data tx_data     vin_ir5     vin_ps26     vin_tlc549c7     vout_7seg8     vout_frequency4 rio.v pins:PIN_3->rio:BLINK_LED pins:PIN_87->rio:INTERFACE_UART_RX pins:PIN_86->rio:INTERFACE_UART_TX pins:PIN_88->rio:SW_S1 pins:PIN_91->rio:SW_S2 pins:PIN_90->rio:SW_S3 pins:PIN_89->rio:SW_S4 pins:PIN_132->rio:VIN5_IR pins:PIN_99->rio:VIN6_CLK pins:PIN_98->rio:VIN6_DATA pins:PIN_129->rio:VIN7_CS pins:PIN_128->rio:VIN7_MISO pins:PIN_127->rio:VIN7_SCLK pins:PIN_85->rio:VOUT4_FREQUENCY pins:PIN_137->rio:VOUT8_7SEG_EN1 pins:PIN_135->rio:VOUT8_7SEG_EN2 pins:PIN_136->rio:VOUT8_7SEG_EN3 pins:PIN_133->rio:VOUT8_7SEG_EN4 pins:PIN_143->rio:VOUT8_7SEG_SEG_A pins:PIN_144->rio:VOUT8_7SEG_SEG_B pins:PIN_1->rio:VOUT8_7SEG_SEG_C pins:PIN_141->rio:VOUT8_7SEG_SEG_D pins:PIN_142->rio:VOUT8_7SEG_SEG_E pins:PIN_138->rio:VOUT8_7SEG_SEG_F pins:PIN_2->rio:VOUT8_7SEG_SEG_G pins:PIN_24->rio:sysclk rio:uart1_UART_RX->interfaceuart:UART_RX rio:uart1_UART_TX->interfaceuart:UART_TX rio:uart1_clk->interfaceuart:clk rio:uart1_rx_data->interfaceuart:rx_data rio:uart1_tx_data->interfaceuart:tx_data

Child-Modules

uart_rx1: uart_rx
uart_tx1: uart_tx


Source

Filename: interface_uart.v
2 module interface_uart
3     #(parameter BUFFER_SIZE=80, parameter MSGID=32'h74697277, parameter TIMEOUT=32'd4800000, parameter ClkFrequency=12000000, parameter Baud=2000000)
4     (
5         input clk,
6         output reg [BUFFER_SIZE-1:0] rx_data,
7         input [BUFFER_SIZE-1:0] tx_data,
8         output UART_TX,
9         input UART_RX
10     );
11 
12     reg [BUFFER_SIZE-1:0] tx_data_buffer;
13     reg [BUFFER_SIZE-1:0] rx_data_buffer;
14 
15     reg TxD_start = 0;
16     wire TxD_busy;
17 
18     reg [7:0] TxD_data;
19     wire [7:0] RxD_data;
20     wire RxD_data_ready;
21     wire RxD_idle;
22     wire RxD_endofpacket;
23 
24     uart_rx #(ClkFrequency, Baud) uart_rx1 (
25         .clk (clk),
26         .RxD (UART_RX),
27         .RxD_data_ready (RxD_data_ready),
28         .RxD_data (RxD_data),
29         .RxD_idle (RxD_idle),
30         .RxD_endofpacket (RxD_endofpacket)
31     );
32 
33     uart_tx #(ClkFrequency, Baud) uart_tx1 (
34         .clk (clk),
35         .TxD_start (TxD_start),
36         .TxD_data (TxD_data),
37         .TxD (UART_TX),
38         .TxD_busy (TxD_busy)
39     );
40 
41     reg tx_state = 0;
42     reg [7:0] rx_counter = 0;
43     reg [7:0] tx_counter = 0;
44 
45     always @(posedge clk) begin
46         if (RxD_endofpacket == 1) begin
47             rx_counter <= 0;
48         end else if (tx_state == 1) begin
49             if (TxD_busy == 0) begin
50                 TxD_data <= tx_data_buffer[BUFFER_SIZE-1:BUFFER_SIZE-1-7];
51                 TxD_start <= 1;
52             end else if (TxD_start == 1) begin
53                 TxD_start <= 0;
54                 if (tx_counter < BUFFER_SIZE/8-1) begin
55                     tx_counter <= tx_counter+1;
56                     tx_data_buffer <= {tx_data_buffer[BUFFER_SIZE-1-8:0], 8'd0};
57                 end else begin
58                     tx_state <= 0;
59                 end
60             end
61         end else if (RxD_data_ready == 1) begin
62             if (rx_counter < BUFFER_SIZE/8-1) begin
63                 rx_data_buffer <= {rx_data_buffer[BUFFER_SIZE-1-8:0], RxD_data};
64                 rx_counter <= rx_counter + 1;
65             end else begin
66                 // TODO: check MSGID
67                 rx_data <= {rx_data_buffer[BUFFER_SIZE-1-8:0], RxD_data};
68                 rx_counter <= 0;
69                 tx_counter <= 0;
70                 tx_data_buffer <= tx_data;
71                 tx_state <= 1;
72             end
73         end
74     end
75 endmodule