串口
例如,UART协议可用于发送和接收RS232/RS485帧。
有一个8位帧的示例,无奇偶校验和一位停止位:
总线定义
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
库中实现了Uart控制器。该控制器的特性是使用一个采样窗口读取 rxd
引脚,然后使用多数投票制来过滤其值。
IO名称 |
方向 |
类型 |
描述 |
---|---|---|---|
config |
in |
UartCtrlConfig |
用于设置控制器的时钟分频器/奇偶校验/停止/数据长度 |
write |
slave |
Stream[Bits] |
用于请求帧传输的反压流端口 |
read |
master |
Flow[Bits] |
用于接收解码帧的流端口 |
uart |
master |
Uart |
与实际实现的连接接口 |
控制器可以通过一个 UartCtrlGenerics
配置对象来实例化:
属性 |
类型 |
描述 |
---|---|---|
dataWidthMax |
Int |
帧内最大位数 |
clockDividerWidth |
Int |
内部时钟分频器的位宽 |
preSamplingSize |
Int |
指定在一个UART波特开始时丢弃多少samplingTick |
samplingSize |
Int |
指定有多少samplingTick用于采样UART波特中段的 |
postSamplingSize |
Int |
指定在UART波特结束时丢弃多少个samplingTick |