Skip to content

Commit 5182cb4

Browse files
committed
[MAINTENANCE]: Update README file
1 parent 0b77a97 commit 5182cb4

File tree

3 files changed

+83
-32
lines changed

3 files changed

+83
-32
lines changed

README.md

Lines changed: 75 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,58 +6,67 @@ Simple UART for FPGA is UART (Universal Asynchronous Receiver & Transmitter) con
66

77
The UART controller was simulated and tested in hardware.
88

9-
## Inputs and outputs ports:
9+
## UART controller:
10+
11+
### Generics:
12+
13+
```
14+
CLK_FREQ : integer := 50e6; -- system clock frequency in Hz
15+
BAUD_RATE : integer := 115200; -- baud rate value
16+
PARITY_BIT : string := "none"; -- type of parity: "none", "even", "odd", "mark", "space"
17+
USE_DEBOUNCER : boolean := True -- enable/disable debouncer
18+
```
19+
20+
### Inputs and outputs ports:
1021

1122
```
1223
-- CLOCK AND RESET
13-
CLK : in std_logic; -- system clock
14-
RST : in std_logic; -- high active synchronous reset
24+
CLK : in std_logic; -- system clock
25+
RST : in std_logic; -- high active synchronous reset
1526
-- UART INTERFACE
16-
UART_TXD : out std_logic; -- serial transmit data
17-
UART_RXD : in std_logic; -- serial receive data
27+
UART_TXD : out std_logic; -- serial transmit data
28+
UART_RXD : in std_logic; -- serial receive data
1829
-- USER DATA INPUT INTERFACE
19-
DIN : in std_logic_vector(7 downto 0); -- input data to be transmitted over UART
20-
DIN_VLD : in std_logic; -- when DIN_VLD = 1, input data (DIN) are valid
21-
DIN_RDY : out std_logic -- when DIN_RDY = 1, transmitter is ready and valid input data will be accepted for transmiting
30+
DIN : in std_logic_vector(7 downto 0); -- input data to be transmitted over UART
31+
DIN_VLD : in std_logic; -- when DIN_VLD = 1, input data (DIN) are valid
32+
DIN_RDY : out std_logic -- when DIN_RDY = 1, transmitter is ready and valid input data will be accepted for transmiting
2233
-- USER DATA OUTPUT INTERFACE
23-
DOUT : out std_logic_vector(7 downto 0); -- output data received via UART
24-
DOUT_VLD : out std_logic; -- when DOUT_VLD = 1, output data (DOUT) are valid (is assert only for one clock cycle)
25-
FRAME_ERROR : out std_logic -- when FRAME_ERROR = 1, stop bit was invalid (is assert only for one clock cycle)
34+
DOUT : out std_logic_vector(7 downto 0); -- output data received via UART
35+
DOUT_VLD : out std_logic; -- when DOUT_VLD = 1, output data (DOUT) are valid (is assert only for one clock cycle)
36+
FRAME_ERROR : out std_logic; -- when FRAME_ERROR = 1, stop bit was invalid (is assert only for one clock cycle)
37+
PARITY_ERROR : out std_logic -- when PARITY_ERROR = 1, parity bit was invalid (is assert only for one clock cycle)
2638
```
2739

28-
## Generics:
40+
### User interface examples:
2941

30-
```
31-
CLK_FREQ : integer := 50e6; -- system clock frequency in Hz
32-
BAUD_RATE : integer := 115200; -- baud rate value
33-
PARITY_BIT : string := "none"; -- type of parity: "none", "even", "odd", "mark", "space"
34-
USE_DEBOUNCER : boolean := True -- enable/disable debouncer
35-
```
42+
Example of sending data on the user interface of the UART controller.
3643

37-
## Table of resource usage summary:
44+
![Example of sending data on the user interface](docs/user_din.svg)
3845

39-
Use debouncer | Parity type | LE (LUT+FF) | LUT | FF | M9k | Fmax
40-
:---:|:---:|:---:|:---:|:---:|:---:|:---:
41-
True | none | 76 | 62 | 56 | 0 | 304.8 MHz
42-
True | even/odd | 86 | 73 | 59 | 0 | 277.3 MHz
43-
True | mark/space | 80 | 66 | 59 | 0 | 292.3 MHz
44-
False | none | 73 | 60 | 52 | 0 | 308.7 MHz
45-
False | even/odd | 79 | 71 | 55 | 0 | 278.7 MHz
46-
False | mark/space | 77 | 64 | 55 | 0 | 338.0 MHz
46+
Example of receiving data on the user interface of the UART controller. The last transaction in the example was corrupted during transmission, it contains a bad parity and stop bit.
4747

48-
*Implementation was performed using Quartus Prime Lite Edition 18.1.0 for Intel Cyclone 10 FPGA (10CL025YU256C8G). Setting of some generics: BAUD_RATE = 115200, CLK_FREQ = 50e6.*
48+
![Example of receiving data on the user interface](docs/user_dout.svg)
4949

50-
## Simulation:
50+
### Table of resource usage summary:
51+
52+
Parity type | LE | FF | M9k | Fmax
53+
:---:|:---:|:---:|:---:|:---:
54+
none | 77 | 56 | 0 | 305.5 MHz
55+
even/odd | 84 | 60 | 0 | 289.4 MHz
56+
mark/space | 82 | 60 | 0 | 290.7 MHz
5157

52-
A basic simulation is prepared in the repository. You can use the prepared TCL script to run simulation in ModelSim.
58+
*Implementation was performed using Quartus Prime Lite Edition 20.1.0 for Intel Cyclone 10 FPGA (10CL025YU256C8G). Setting of some generics: USE_DEBOUNCER = True, BAUD_RATE = 115200, CLK_FREQ = 50e6.*
5359

60+
## Simulation:
61+
62+
A simulation is prepared in the repository. You can use the prepared TCL script to run simulation in ModelSim.
5463
```
5564
vsim -do sim/sim.tcl
5665
```
5766

5867
## Examples:
5968

60-
The repository also includes several UART example designs. I use it on my FPGA board [CYC1000](https://shop.trenz-electronic.de/en/TEI0003-02-CYC1000-with-Cyclone-10-FPGA-8-MByte-SDRAM) with Intel Cyclone 10 FPGA (10CL025YU256C8G) and FTDI USB to UART Bridge. Here you can find [the documentation of the CYC1000 board](https://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/Modules_and_Module_Carriers/2.5x6.15/TEI0003/REV02/Documents/CYC1000%20User%20Guide.pdf).
69+
The repository also includes several UART example designs. I use it on my [FPGA board CYC1000](https://shop.trenz-electronic.de/en/TEI0003-02-CYC1000-with-Cyclone-10-FPGA-8-MByte-SDRAM) with Intel Cyclone 10 FPGA (10CL025YU256C8G) and FTDI USB to UART Bridge. Here you can find [the documentation of the CYC1000 board](https://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/Modules_and_Module_Carriers/2.5x6.15/TEI0003/REV02/Documents/CYC1000%20User%20Guide.pdf).
6170

6271
### UART loopback:
6372

@@ -67,10 +76,44 @@ The UART loopback example design is for testing data transfer between FPGA and P
6776

6877
### UART2WB bridge:
6978

70-
The UART2WB bridge example design is for testing access to Wishbone registers via the UART bridge. The example uses a simple script written in Python that allows you to read or write to 32-bit user registers connected to the Wishbone bus.
79+
The UART2WB bridge example design is for testing access to Wishbone registers via the UART bridge. The example uses a simple script written in Python that allows you to read or write to 32-bit user registers connected to the [Wishbone bus](http://cdn.opencores.org/downloads/wbspec_b4.pdf).
7180

7281
![Block diagram of UART2WB bridge example design](docs/uart2wb.svg)
7382

83+
After connecting the CYC1000 board to the PC, upload an example design to the FPGA and run the script ([Python 3](https://www.python.org) and [PySerial](https://pyserial.readthedocs.io/en/latest/shortintro.html) is required):
84+
```
85+
python examples/uart2wb/sw/wishbone.py
86+
```
87+
88+
The expected output is:
89+
```
90+
Test of access to CSR (control status registers) via UART2WBM module...
91+
=======================================================================
92+
The UART on COM1 is open.
93+
The wishbone bus is ready.
94+
95+
READ from 0x0:
96+
0x20210406
97+
98+
READ from 0x4:
99+
0xABCDEF12
100+
101+
WRITE 0x12345678 to 0x4.
102+
103+
READ from 0x4:
104+
0x12345678
105+
106+
WRITE 0xABCDEF12 to 0x4.
107+
108+
READ from 0x4:
109+
0xABCDEF12
110+
111+
READ from 0x8844:
112+
0xDEADCAFE
113+
114+
The UART is closed.
115+
```
116+
74117
## License:
75118

76119
This UART controller is available under the MIT license. Please read [LICENSE file](LICENSE).

docs/user_din.svg

Lines changed: 4 additions & 0 deletions
Loading

docs/user_dout.svg

Lines changed: 4 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)