2014-09-30 22 views
1

我试图发现verilog为下面的程序,但它是抛出AssertionError。是相应的verilog展开5次“io.opcode:= io.a + io.b”声明? 如果有人能说出循环是如何工作的话,这将会非常有帮助。它应该展开循环,但相反它是抛出AssertionError

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 

回答

2

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

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实际上是一个输入,所以它不会生成你想要的代码(它应该会引发错误)。

+1

谢谢你的回应,我得到了我的答案。 – 2014-10-01 08:12:39

相关问题