首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未登录-扩展输入并在firrtl中操作

未登录-扩展输入并在firrtl中操作
EN

Stack Overflow用户
提问于 2019-01-14 16:37:50
回答 1查看 67关注 0票数 2

我在chisel3中尝试了一个简单的测试,如下所示。

代码语言:javascript
复制
import chisel3.iotesters.{ChiselFlatSpec, Driver, PeekPokeTester}
import chisel3._

class TestTesterUnit(c: Test) extends PeekPokeTester(c) {
  val value = 31
  poke(c.io.a, value)
  poke(c.io.b, 1)
  step(1)
  expect(c.io.out, value)
}

class TestTester extends ChiselFlatSpec {
  for (backendName <- backends) {
    "Test" should s"should sign-extended AND operation (with $backendName)" in {
      Driver(() => new Test, backendName) {
        c => new TestTesterUnit(c)
      } should be (true)
    }
  }
}

class Test extends Module {
  val io = IO(new Bundle {
    val a = Input(SInt(32.W))
    val b = Input(SInt(1.W))
    val out = Output(SInt(32.W))
  })

  io.out := io.a & io.b
}

我以为Test模块会用符号扩展来计算io.aio.b,结果是io.out会得到31。然而,在firrtl测试中,io.out接收1,而io.out在verilator测试中接收31。

作为另一种方式,我添加了Wire(SInt(32.W))作为io.b和and操作数之间的桥梁,就像下面的代码一样,这工作得很好。

代码语言:javascript
复制
val node = Wire(SInt(32.W))
node := io.b
io.out := io.a & node 

我的问题是“firrtl不支持符号扩展的操作吗?”,以及“当我想使用符号扩展的操作数时,我必须像上面那样放置桥吗?”

下面是firrtl上的Test模块。

代码语言:javascript
复制
circuit Test : 
  module Test : 
    input clock : Clock
    input reset : UInt<1>
    output io : {flip a : SInt<32>, flip b : SInt<1>, out : SInt<32>}

    node _T_11 = and(io.a, io.b) @[Multiple.scala 16:18]
    node _T_12 = asSInt(_T_11) @[Multiple.scala 16:18]
    io.out <= _T_12 @[Multiple.scala 16:10]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-15 01:54:34

这看起来像是第一个解释器中的错误。踏板后端似乎工作正常,所以如果可能的话,我建议在此期间使用它。Treadle是更现代的基于scala的模拟器。

我已经创建了Interpreter Issue 145来解决这个问题

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

https://stackoverflow.com/questions/54178041

复制
相关文章

相似问题

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