С ++ для следующего фрагмента Долото синтезированного NONE:долото не синтезируют ни ни для Verilog, ни для
import Chisel._
import Node._
import scala.collection.mutable.HashMap
class PseudoLRU(val num_ways: Int) extends Module
{
val num_levels = log2Up(num_ways)
val io = new Bundle {
val last_used_cline = UInt(INPUT, width = num_levels)
val update_state = Bool(INPUT)
}
val state = Reg(Vec.fill(num_ways-1){Bool()})
private val msb = num_levels - 1
when (io.update_state) {
// process level 0
state(0) := !io.last_used_cline(msb, msb) // get the most significant bit
// process other levels
for (level <- 1 until num_levels) {
val offset = UInt((1 << level) - 1, width = log2Up(num_ways-1))
val bit_index = io.last_used_cline(msb, msb - level + 1) + offset
val pos = msb - level
val bit = io.last_used_cline(pos, pos)
state(bit_index) := !bit
}
}
}
object test_driver {
def main(args: Array[String]): Unit = {
val plru_inst =() => Module(new PseudoLRU(num_ways = 16))
chiselMain(args, plru_inst)
}
}
Такое же поведение, если вручную развернуть цикл для (уровень < - 1 до num_levels) и складывают константы:
when (io.update_state) {
state( 0 ) := !io.last_used_cline(3, 3)
state(io.last_used_cline(3, 3) + UInt(1, width = 3)) := !io.last_used_cline(2, 2)
state(io.last_used_cline(3, 2) + UInt(3, width = 3)) := !io.last_used_cline(1, 1)
state(io.last_used_cline(3, 1) + UInt(7, width = 3)) := !io.last_used_cline(0, 0)
}
Сгенерированный Verilog (и аналогичные C++ код) для обоих фрагментов (оригинал и/экземпляры развернутых в течение 16 способов случай):
module PseudoLRU(input reset,
input [3:0] io_last_used_cline,
input io_update_state
);
wire T0;
wire[151:0] T1;
assign T0 = ! reset;
endmodule
Не совсем понятно, почему существуют только фиктивные конструкции Что мне делать, чтобы обеспечить синтез логики? Благодаря!
Что 'log2Up' означает в Долото? – solvingPuzzles
log2Up вычисляет журнал (в base2) числа и округляется вверх до ближайшего целого числа. Очень полезно для вычисления количества бит, необходимых для адреса. Log2Up является частью ChiselUtil. – Chris