2014-09-30 80 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

相關問題