1

以下のプログラムの Verilog を生成しようとしましたが、AssertionError がスローされます。対応する Verilog アンロール "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」を使用しますが、それに割り当てio.a + io.bています。

第二に、あなたの for ループは何もしていません。これはスカラ コードであり、"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」の最後のステートメントが最終的な値になります。実際、前の 3 つのステートメントは何の意味もないため、グラフから除外されます。もちろん、io.opcode は実際には入力であるため、必要なコードは生成されません (エラーがスローされるはずです)。

于 2014-09-30T20:00:40.563 に答える