UART
Introduction
The UART protocol could be used, for instance, to emit and receive RS232 / RS485 frames.
There is an example of an 8 bits frame, with no parity and one stop bit :
Bus definition
case class Uart() extends Bundle with IMasterSlave {
val txd = Bool // Used to emit frames
val rxd = Bool // Used to receive frames
override def asMaster(): Unit = {
out(txd)
in(rxd)
}
}
UartCtrl
An Uart controller is implemented in the library. This controller has the specificity to use a sampling window to read the rxd
pin and then to using an majority vote to filter its value.
IO name |
direction |
type |
Description |
---|---|---|---|
config |
in |
UartCtrlConfig |
Used to set the clock divider/parity/stop/data length of the controller |
write |
slave |
Stream[Bits] |
Stream port used to request a frame transmission |
read |
master |
Flow[Bits] |
Flow port used to receive decoded frames |
uart |
master |
Uart |
Interface to the real world |
The controller could be instantiated via an UartCtrlGenerics
configuration object :
Attribute |
type |
Description |
---|---|---|
dataWidthMax |
Int |
Maximal number of bit inside a frame |
clockDividerWidth |
Int |
Width of the internal clock divider |
preSamplingSize |
Int |
Specify how many samplingTick are drop at the beginning of a UART baud |
samplingSize |
Int |
Specify how many samplingTick are used to sample |
postSamplingSize |
Int |
Specify how many samplingTick are drop at the end of a UART baud |