我正在尝试使用Chisel制作一个解复用器,但是代码无法编译并抛出imgur链接中所示的错误
[1] https://i.stack.imgur.com/oW0Rv.png)
class Demuxer extends Module {
val io = IO(new Bundle {
val datain = Input(UInt(8.W))
val dataout1 = Output(UInt(8.W))
val dataout2 = Output(UInt(8.W))
val dataout3 = Output(UInt(8.W))
val dataout4 = Output(UInt(8.W))
val dataout5 = Output(UInt(8.W))
val selector = Input((UInt(3.W)))
})
when(io.selector === 1.U){
io.dataout1 := io.datain
}.elsewhen(io.selector === 2.U){
io.dataout2 := io.datain
}.elsewhen(io.selector === 3.U){
io.dataout3 := io.datain
}.elsewhen(io.selector === 4.U){
io.dataout4 := io.datain
}.elsewhen(io.selector === 5.U){
io.dataout5 := io.datain
}.otherwise{
}
}
我阅读了有关未连接元素的Wiki https://www.chisel-lang.org/chisel3/docs/wiki-deprecated/unconnected-wires.html
如果我在IO上使用use io.outs <> DontCare,则代码会编译,但是生成的Verilog会将我的输入短接到所有输出,这不是我想要的此模块的行为。有人可以建议我解决此问题吗?
提前致谢
Chisel和Scala FIRRTL编译器要求在所有情况下都驱动所有输出。这有助于避免设计人员忘记驱动某些端口/电线/寄存器的错误。问题是代码需要DontCare
为所有模块输出设置一些默认值(或使用)。
DontCare
通常,将所有输出设置为以下两种情况之一:
0.U
。(2)这里正在发生什么。在编写时io.dataout1 := DontCare
,是向编译器指示可以将其设置为任何值。然后,编译器选择将其设置为io.dataout1 := io.datain
(将输入缩短为输出)。
除了使用外,DontCare
您可以使用显式的东西,例如,0.U
将为每个输出创建一个多路复用器。用一行完成此操作看起来像:
Seq(io.dataout1, io.dataout2, io.dataout3, io.dataout4, io.dataout5).foreach(
_ := 0.U
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句