Serial interface 5 - How to use the RS-232 transmitter and receiver
This design allows controlling a few FPGA pins from your PC (through your PC's serial port).
- It creates 8 outputs on the FPGA (port named "GPout"). GPout is updated by any character that the FPGA receives.
- Also 8 inputs on the FPGA (port named "GPin"). GPin is transmitted every time the FPGA receives a character.
The GP outputs can be used to control anything remotely from your PC, be it LEDs or a coffee machine...
module serialGPIO(
input clk,
input RxD,
output TxD,
output reg [7:0] GPout, // general purpose outputs
input [7:0] GPin // general purpose inputs
);
wire RxD_data_ready;
wire [7:0] RxD_data;
async_receiver RX(.clk(clk), .RxD(RxD), .RxD_data_ready(RxD_data_ready), .RxD_data(RxD_data));
always @(posedge clk) if(RxD_data_ready) GPout <= RxD_data;
async_transmitter TX(.clk(clk), .TxD(TxD), .TxD_start(RxD_data_ready), .TxD_data(GPin));
endmodule
Remember to grab the async_receiver and async_transmitter modules here, and to update the clock frequency values inside.