RGB信号转灰度信号
让我们假设需要一个将RGB颜色转换为灰度并将其写入外部存储器的组件。
| io名称 | 方向 | 描述 | 
|---|---|---|
| clear | in | 将所有内部寄存器清零 | 
| r,g,b | in | 颜色输入 | 
| wr | out | 写存储器 | 
| address | out | 存储器地址,每个周期增加 | 
| data | out | 存储器数据,灰度等级 | 
case class RgbToGray() extends Component {
  val io = new Bundle {
    val clear = in Bool()
    val r,g,b = in UInt(8 bits)
    val wr = out Bool()
    val address = out UInt(16 bits)
    val data = out UInt(8 bits)
  }
  def scaled(value : UInt,by : Float): UInt = value * U((255*by).toInt,8 bits) >> 8
  val gray = RegNext(
    scaled(io.r,0.3f) +
      scaled(io.g,0.4f) +
      scaled(io.b,0.3f)
  )
  val address = CounterFreeRun(stateCount = 1 << 16)
  io.address := address
  io.wr := True
  io.data := gray
  when(io.clear) {
    gray := 0
    address.clear()
    io.wr := False
  }
}