tabulate
, как в комментарии, и ответ Chick - лучший ответ, но я предоставлю немного больше контекста, потому что tabulate
- это своего рода особый случай, когда вы хотите построить из диапазона целых чисел, начиная с 0
.
Допустим, у меня есть Seq
из Strings
, из которого я хотел построить Seq
модулей, как бы мне это сделать? Многие, кто плохо знаком с Chisel и Scala, подумают о for
l oop и мутации. В то время как в Scala мы обычно предпочитаем использовать неизменяемые типы и функциональное программирование, вы все равно можете выполнить sh это с помощью мутации:
val myModules = ArrayBuffer[MyModule]()
val myParams = Seq("foo", "bar")
for (param <- myStrings) {
myModules += Module(new MyModule(param)) // .io if you just want the io ports
}
Это больше похоже на вашу первоначальную идею, так как я могу сделать это более функционально похоже на Seq.fill
и Seq.tabulate
? Мы можем взять Seq
параметров, которые мы передаем sh, и map
на нем:
val myParams = Seq("foo", "bar")
val myModules = myParams.map(param => Module(new MyModule(param)))
Как я уже говорил ранее, Seq.tabulate
является частным случаем этого более общего map
шаблон, в котором у вас есть диапазон целых чисел, поэтому ваш случай можно альтернативно выразить как:
(0 until numberOfHWBlocks).map(x => Module(new HW_BLOCK(x)(p: Parameters).io))