Есть ли способ использовать долото для создания черного ящика из текстового содержимого verilog? (определить val на основе текстового содержимого в scala) - PullRequest
2 голосов
/ 31 марта 2020

Я работаю с командой, которая также использует verilog. Я чувствую, что гораздо быстрее использовать силу долота для управления взаимосвязями между модулями, чем голым verilog. Из руководства по зубилу видно, что оболочки черного ящика пишутся вручную. Сигналы io определяются вручную.

Можно ли извлечь информацию io из verilog и автоматически определить io долота blackbox? (иначе, создайте черный ящик из verilog вместо того, чтобы определять класс черного ящика некоторым человеком, читая verilog.)

, например:

val bbox = blackbox("someModule.v")

, а затем bbox будет функционирующий черный ящик со всеми определенными ios и именем.

Поскольку сигнал io равен val s в scala, мне интересно, существует ли мета-путь к этой цели.

1 Ответ

1 голос
/ 31 марта 2020

Да, есть! Проверьте HasBlackBoxInline:

https://www.chisel-lang.org/chisel3/blackboxes.html#blackboxes -with-in-line-verilog

class BlackBoxRealAdd extends BlackBox with HasBlackBoxInline {
  val io = IO(new Bundle() {
    val in1 = Input(UInt(64.W))
    val in2 = Input(UInt(64.W))
    val out = Output(UInt(64.W))
  })
  setInline("BlackBoxRealAdd.v",
    s"""
      |module BlackBoxRealAdd(
      |    input  [15:0] in1,
      |    input  [15:0] in2,
      |    output [15:0] out
      |);
      |always @* begin
      |  out <= $realtobits($bitstoreal(in1) + $bitstoreal(in2));
      |end
      |endmodule
    """.stripMargin)
}

По умолчанию этот BlackBox будет отправлен в выходной каталог с его имя.

...