首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对Chisel dontTouch应用程序接口和FIRRTL优化的质疑

对Chisel dontTouch应用程序接口和FIRRTL优化的质疑
EN

Stack Overflow用户
提问于 2018-03-13 21:49:24
回答 1查看 115关注 0票数 2

当我现在学习Chisel的时候有一些疑惑。

似乎FIRRTL会做一些优化来生成verilog代码。

我写了一个例子,然后运行它。

但我发现了一些问题。

我的示例代码(我只是拿它做实验,所以它可能有点奇怪):

代码语言:javascript
复制
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编译器来查看它是否会导致死码消除。

代码语言:javascript
复制
======== Starting Transform DeadCodeElimination ========
[DCE] reg Example.x
[DCE] reg Example.y

我发现它可以通过使用dontTouch接口来解决:

代码语言:javascript
复制
  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    

}

我用上面相同的流程结账。它仍然会得到相同的结果:

代码语言:javascript
复制
======== Starting Transform DeadCodeElimination ========
[DCE] reg Example.x
[DCE] reg Example.y

问题:

(1)是误解了dontTouch接口还是用错了?

(2) x的值会随着io.in信号的变化而变化,为什么x会被视为未使用的部分,而编译器又会将其视为死码?

EN

回答 1

Stack Overflow用户

发布于 2018-03-14 00:05:27

我认为你在这里的期望是正确的。我相信这是一个版本/发布的问题。当我运行你的代码时,我看到

代码语言:javascript
复制
======== Starting Transform DeadCodeElimination ========
[DCE] reg DontTouch.y
--------------------------------------------------------

最近有很多关于DontTouch的工作。我会深入挖掘一下,看看我是否能找出这个问题已经解决的地方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49257904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档