YosysHQ / picorv32

PicoRV32 - A Size-Optimized RISC-V CPU
ISC License
3.15k stars 759 forks source link

Fix simpleuart baud rate calculation #194

Closed chrbayer closed 3 years ago

chrbayer commented 3 years ago

This patch fixes the baud rate calculation so that the behavior of simpleuart is in line with the description in picosoc/README.md:

The UART Clock Divider Register must be set to the system clock frequency divided by the baud rate.

Previously, the effective behavior of simpleuart was

divisor = (clock frequency / baud rate) - 2

The fix is done basically by comparing *_divcnt + 1 >= cfg_divider instead of the old *_divcnt > cfg_divider. A special case is needed in the receive logic for the case where the divider is equal to 1, where at the next cycle we want to read the first bit (jumping straight to a recv_state of 2).

This patch also makes some minor stylistic changes that fix Verilator lint errors.

chrbayer commented 3 years ago

Sorry, this has been wrongly created.