1

我试图为下面的程序生成verilog,但它抛出了AssertionError。对应的verilog unroll "io.opcode := io.a + io.b" 语句是5次吗?如果有人能说出 for 循环是如何工作的,那将非常有帮助。

 val io = new Bundle {

    val a = UInt(INPUT, 2)
    val b = UInt(INPUT, 2)
    val opcode = UInt(INPUT, 2)
    val output = UInt(OUTPUT, 2)
  }

  for(j <- 0 to 4){

    io.opcode := io.a + io.b
  }

  io.output := io.opcode
4

2 回答 2

2

io.opcode 字段是一个输入,因此当您分配给它时,您会收到一个错误。

于 2014-09-30T19:42:35.847 回答
2

首先,您将“io.opcode”作为输入,但您正在分配io.a + io.b给它。

其次,你的 for 循环什么也不做。这是 scala 代码,你没有在任何地方使用“j”迭代器变量,所以这就是它的扩展:

io.opcode := io.a + io.b
io.opcode := io.a + io.b
io.opcode := io.a + io.b
io.opcode := io.a + io.b

这里的语义是最后一个写入者获胜,因此“io.opcode = io.a + io.b”的最后一条语句将是最终值。实际上,前面的三个语句没有任何意义,因此将从图中删除它们。当然,io.opcode 实际上是一个输入,所以它不会生成你想要的代码(它应该会抛出一个错误)。

于 2014-09-30T20:00:40.563 回答