#scala #class #module #chisel
Вопрос:
Это, вероятно, очень простой вопрос, но я ни за что на свете не смог бы найти ответа.
У меня есть это существующее логическое И классовое:
class DelayedAND(val n:Int = 2) extends Module{
val io = IO(new Bundle{
val a = Input(UInt(1.W))
val b = Input(UInt(1.W))
val out = Output(UInt(1.W))
})
val delay = 2
val dand =io.aamp;io.b
io.out := ShiftRegister(dand, delay)
}
Который мне нужно включить в это Class
вместо обычного «и»
class HalfAdder extends Module {
val io = IO(new Bundle{
val a = Input(UInt(1.W))
val b = Input(UInt(1.W))
val sum = Output(UInt(1.W))
val cout = Output(UInt(1.W))
})
val a_xor_b = io.a ^ io.b
io.sum := a_xor_b
val a_and_b = io.a amp; io.b //previous Class needs to be used here
io.cout := a_and_b
}
Я совершенно новичок в Scala и Chisel и уже несколько часов пытался решить эту проблему! Пожалуйста, помогите мне, спасибо!
Ответ №1:
val a_and_b = Module(new DelayedAND(2))
a_and_b.io.a := io.a
a_and_b.io.b := io.b
io.cout := a_and_b.io.out
Вот хорошее объяснение
https://www.chisel-lang.org/chisel3/docs/explanations/modules.html
Редактировать:
Чтобы дать более подробную информацию, a Module
действует очень похоже на типичный Verilog, module
за исключением того, что clock
и reset
подразумевается неявно (есть исключения, которые перечислены в ссылке, и некоторые другие, но это более глубоко и выходит за рамки этого вопроса). В Chisel, однако, Module
представляет то, что должно стать Verilog module
после компиляции/разработки Chisel для FIRRTL.
В журнале module
проверки мы бы перечислили порты и подключили порты через список портов в экземпляре модуля. «Порты» в этом случае подключаются через. :=
оператор. Это назначение некоторой логики в/из наших Module
«портов». Если исходить из фона Verilog, это может показаться довольно странным. Во-первых, вы можете подключиться к портам в любом месте кода! Эффективно распространяя свой «экземпляр модуля» повсюду. Если вы привыкли отслеживать соединения сигналов в verilog для отладки, это может показаться немного сложным, однако у этого есть некоторые преимущества. Вы можете изменить то, что подключено к определенному порту, на основе некоторого параметра/переменной. Отлично, соси это generate
.
FIRRTL будет жаловаться, если вы не подключите один или несколько Input
«s». Output
Они нормально плавают/не подключены, хотя вы можете видеть, что часть вашей логики оптимизирована в зависимости от того, что создано.
Поэтому, когда вы впервые запускаете Chisel, применяйте этот подход к кодированию Module
так же, как вы бы использовали Verilog module
. Более интересные функции Chisel начнут проявляться по мере того, как вы попытаетесь понять, как выполнить определенную генерацию оборудования.
Преимущества Chisel в большей степени зависят от его гибкости в сложных системах, чем от небольших примеров, однако понимание этих небольших примеров является ключом к прогрессу в овладении языком.