Я объявил счетчик следующим образом:
val MAXCOUNT = ((BigInt(1) << COUNT_WIDTH)-1)
val counterSize = log2Ceil(MAXCOUNT)
println("Maxcount -> " + MAXCOUNT + ", " + counterSize + " bits")
val (counterValue, counterWrap) = Counter(0 until MAXCOUNT by 1)
io.leds := counterValue(counterSize-1, counterSize-8)
Я использую BigInt, потому что хочу считать со значением шириной более 32 бит. Но Chisel3 говорит мне, что в качестве значения счетчика принимается только Int. Тогда невозможно сосчитать больше 2 ** 32?
[error] pimpcounter/hdl/src/main/scala/Blink.scala:17:53: type mismatch;
[error] found : scala.math.BigInt
[error] required: Int
[error] val (counterValue, counterWrap) = Counter(0 until MAXCOUNT by 1)
[error] ^





Похоже, что chisel3.util.Counter API допускает только 31-битный максимум (31-бит из-за использования подписанного Scala Int). Это ограничение, вероятно, следует снять (заставив API принимать NumericRange[BigInt] вместо просто Range (то есть NumericRange[Int]).
Обходной путь — просто использовать Reg в качестве счетчика:
val counterValue = RegInit(0.U(countersize.W))
counterValue := counterValue + 1.U
Благодарю Джека. Я использовал этот обходной путь. Итак, у меня есть подтверждение ограничения счетчика. Я открою вопрос на github.