首页 > 解决方案 > 显示错误输出的凿子代码

问题描述

这是字节选择器的代码

class Comp extends Module {
val io = IO(new Bundle {
val in = Input(UInt(25.W))
val out = Output(UInt(25.W))
val i = Input(UInt(4.W))
val out0   = Output(UInt(5.W))
val out1   = Output(UInt(5.W))

})


val r8 = Wire(UInt(5.W))
io.out := Reverse(io.in)
for (i <- 0 to 20 by 5)

{

io.out0 := io.out (i+4, i)


when(io.out0 === 31.U) {
r8 := 0.U            
}.elsewhen(io.out0 === 0.U) {
    r8 := 31.U
}.elsewhen(io.out0 === 17.U) {
    r8 := 14.U  
}.elsewhen(io.out0 === 14.U) {
    r8 := 17.U            
}.otherwise {
    r8 := 27.U            
}


io.out1 := r8
}

这仅选择字节,20 to 24即何时i = 20而不是其余字节。每次我得到输出为 27 时,for 循环选择最重要的 5 位。有人可以帮忙吗?

标签: for-loopchisel

解决方案


scala for 循环类似于 VHDL 中的 GENERATE,您必须将其视为以下的多重声明:

io.out0 := io.out (i+4, i)

您可以将其视为以下代码:

io.out0 := io.out (4, 0)
io.out0 := io.out (8, 5)
io.out0 := io.out (14, 10)
io.out0 := io.out (18, 15)
io.out0 := io.out (24, 20)

符号':='是信号之间的连接。上述代码的每一行都被视为擦除旧连接的新连接。

那么只有最后一个连接会被真正使用。

要根据需要进行连接,您必须更改(我认为)io.out的声明并使用如下索引:

for ( i <- 0 to 20 by 5)
{
io.out(i) := io.out (i+4, i)
}

将 io.out 声明为向量 (Vec())


推荐阅读