Сомнения по поводу Chisel dontTouch API и оптимизации FIRRTL

Есть некоторые сомнения, когда я изучаю Chisel в настоящее время.

Кажется, FIRRTL сделает некоторую оптимизацию для генерации кода Verilog.

И я пишу пример, и собираюсь его запустить.

Но я нахожу некоторые проблемы.

Мой пример кода (я просто беру его для эксперимента, поэтому он может быть странным):

class Example extends Module {
  val io  = IO(new Bundle {
    val in  = Input(UInt(16.W))
  })

  val x = RegInit(0.U(16.W))
  val y = RegInit(0.U(16.W)) 

  x := io.in
  y := x    

}

После создания файла fir я запускаю компилятор FIRRTL, чтобы увидеть, не вызывает ли он удаление мертвого кода.

======== Starting Transform DeadCodeElimination ========
[DCE] reg Example.x
[DCE] reg Example.y

Я узнал, что это можно решить с помощью API dontTouch:

  class Example extends Module {
    val io  = IO(new Bundle {
      val in  = Input(UInt(16.W))
    })

    val x = RegInit(0.U(16.W))
    val y = RegInit(0.U(16.W)) 

    x := io.in
    dontTouch(x)
    y := x    

}

Я проверяю с тем же потоком выше. Он по-прежнему получает тот же результат:

======== Starting Transform DeadCodeElimination ========
[DCE] reg Example.x
[DCE] reg Example.y

Вопросы:

(1) Я неправильно понимаю API dontTouch или использую его неправильно?

(2) значение x изменится с сигналом io.in, почему x рассматривается как неиспользуемая часть, а компилятор считает его мертвым кодом?


person goal Raul    schedule 13.03.2018    source источник


Ответы (1)


Я думаю, что ваши ожидания здесь правильны. Я считаю, что это проблема версии/релиза. Когда я запускаю ваш код, я вижу

======== Starting Transform DeadCodeElimination ========
[DCE] reg DontTouch.y
--------------------------------------------------------

В последнее время было много работы над DontTouch. Я копну немного глубже и посмотрю, смогу ли я понять, где это было исправлено.

person Chick Markley    schedule 13.03.2018
comment
Похоже, это было исправлено в PR #735 на github.com/freechipsproject/firrtl/pull/735. - person Chick Markley; 13.03.2018