2014-09-30 67 views
2

我試圖瞭解我們如何生成Verilog代碼出鑿子「for」循環。 通常verilog代碼用於展開循環進度的許多時間,但在這裏鑿子它只展開一次。For循環不展開鑿

val io = new Bundle { 

    val a = UInt(INPUT, 2) 

    val output = UInt(OUTPUT, 2) 
    } 

    io.output := UInt(0) 

    for(j <- 0 to 4){ 

     io.output := io.a 
    } 

對上述程序對應的Verilog代碼是:

module LutSimpleALU(

    input [1:0] io_a, 
    output[1:0] io_output 
); 

    assign io_output = io_a; 

endmodule 

這將是非常有益的,如果有人能告訴如何for循環工作。

+1

在塊中,不使用循環計數器變量「j」,因此for循環只是反覆執行「io.output:= io_a」。結果,verilog提取block的第一次執行,即「io.output:= io_a」。 – 2014-09-30 04:36:40

+0

這意味着我必須始終使用「j」才能使循環正常工作? – 2014-09-30 04:41:24

+1

您一次又一次執行相同的代碼「io.output:= io.a」。 Verilog認爲重複執行沒有意義,執行一次就足夠了。我不知道在循環計數器永遠不會被使用的塊的每次執行中執行不同的方式。 – 2014-09-30 04:46:24

回答

2

您的for循環爲每次迭代都做同樣的事情。您不使用「J」迭代變量的任何地方,所以這是它擴展爲:

io.output := io.a 
io.output := io.a 
io.output := io.a 
io.output := io.a 

語義這裏是最後的作家獲勝,所以「io.output = 10的最後陳述。一個「將是最終的價值。事實上,前面的三個陳述沒有任何意義,所以他們會從圖中刪除。

+1

謝謝你的迴應。我得到了我的答案。 – 2014-10-01 08:13:07