For循环不是在凿子中展开

时间:2014-09-30 04:28:36

标签: hardware chisel

我试图理解我们是如何从"中生成verilog代码的?#34;在凿子循环。 通常verilog代码用于展开循环进度的时间,但是在凿子中它只展开一次。

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

如果有人能说出循环是如何工作的话会非常有用。

1 个答案:

答案 0 :(得分:2)

你的for循环对每次迭代都做同样的事情。你没有使用&#34; j&#34;迭代器变量在任何地方,所以这就是它扩展到:

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

这里的语义是最后一位作家获胜,所以&#34; io.output = io.a&#34;将是最终价值。实际上,前三个语句没有任何意义,因此它们将从图中删除。