|
import chisel3._
class MaxN(val n:Int,val w:Int) extends Module{
private def Max2(x:UInt,y:UInt) = Mux(x>y,x,y) //返回x和y中的大的数据
val io = IO(new Bundle {
val ins = Input(Vec(n,UInt(w.W)))
val out = Output(UInt(w.W))
})
io.out := io.ins.reduceLeft(Max2)
//在n个UInt(w.W)输入数据中,reduceLeft的处理流程如下:
//先取ins(0)当作Max2的x,ins(1)当作Max2的y,进行Mux处理,处理的结果是找出大的值,暂叫这个处理结果值MAXVALUE1
//将这个MAXVALUE1当作Max2的x,再取下一个数据ins(2)当作y,进行Mux处理,处理的结果也是找出最大值,暂叫这个处理结果值MAXVALUE2
//一直不停这样处理,直到最后一次处理时,取最后一个数据rds(n-1)当作x,上次Mux处理结果值MAXVALUE(n-1),处理的结果即是io.out的值
//所以io.out就是所有输入中的最大值
}
|
|