凿子编程错误

时间:2015-09-04 07:24:32

标签: scala chisel

我的Chisel代码出现问题,我尝试了以下方法

deqReg         := Cat((0 until ports).map(ownReg === Cat(io.configVal(portBits*(_) + 2),io.configVal(portBits*(_)+ 1), io.configVal(portBits*(_)))))

但运行上面的代码时出现以下错误

[error] /home/jayant/Dropbox/FIFO/fifo.scala:24: missing parameter type for expanded function ((x$1) => portBits.$times(x$1).$plus(2))
[error]     deqReg         := Cat((0 until ports).map(ownReg === Cat(io.configVal(portBits*(_) + 2),io.configVal(portBits*(_)+ 1), io.configVal(portBits*(_)))))
[error]                                                                                     ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed
[error] Total time: 2 s, completed 4 Sep, 2015 12:31:40 PM

任何人都可以告诉这个错误是什么以及如何纠正它。

1 个答案:

答案 0 :(得分:2)

您的地图中有多个嵌套函数,这使得Scala编译器无法推断出参数的类型。换句话说,您不能在此处使用“_”占位符。占位符只是替换表达式中最内层函数的参数。尝试完全指定的匿名函数(或部分函数),如下所示:

deqReg := Cat((0 until ports).map{ case i:Int => ownReg === Cat(io.configVal(portBits*i + 2), io.configVal(portBits*i + 1), io.configVal(portBits*i))})

Scala是一种非常强大的语言,你很可能能够找到一种更优雅的方式来编写代码。