颜色求和
首先,我们定义一个带加法运算符的Color Bundle
。
case class Color(channelWidth: Int) extends Bundle {
val r = UInt(channelWidth bits)
val g = UInt(channelWidth bits)
val b = UInt(channelWidth bits)
def +(that: Color): Color = {
val result = Color(channelWidth)
result.r := this.r + that.r
result.g := this.g + that.g
result.b := this.b + that.b
result
}
def clear(): Color = {
this.r := 0
this.g := 0
this.b := 0
this
}
}
然后,我们定义一个带 sources
颜色向量输入、输出 sources
输入之和 result
的组件。
case class ColorSumming(sourceCount: Int, channelWidth: Int) extends Component {
val io = new Bundle {
val sources = in Vec(Color(channelWidth), sourceCount)
val result = out(Color(channelWidth))
}
var sum = Color(channelWidth)
sum.clear()
for (i <- 0 until sourceCount) {
sum \= sum + io.sources(i)
}
io.result := sum
}