2014-09-30 5 views
1

Я пытался разглядеть verilog для программы ниже, но это бросает AssertionError. Является ли соответствующий verilog развернуть «io.opcode: = io.a + io.b» заявление 5 раз? было бы очень полезно, если кто-то может сказать, как работает цикл.Он должен разворачивать цикл, но вместо этого он бросает 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 

семантики здесь является то, что последним писатель выигрывает, поэтому последнее утверждение «гипергликемия .opcode = io.a + io.b "будет конечным значением. Фактически, предыдущие три слова ничего не значат, поэтому они будут сокращены с графика. Конечно, io.opcode фактически является входом, поэтому он не будет генерировать нужный вам код (он должен выдать ошибку).

+1

Спасибо за ваш ответ, я получил свой ответ. –