首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chisel hdl上的定点支持

Chisel hdl上的定点支持
EN

Stack Overflow用户
提问于 2016-09-16 02:09:49
回答 1查看 237关注 0票数 1

我是新接触Chisel HDL的,我发现Chisel HDL确实提供了定点重新表示。(我找到了这个链接:Fixed Point Arithmetic in Chisel HDL)

当我在chisel hdl中尝试它时,它实际上不起作用:

代码语言:javascript
复制
import Chisel._

class Toy extends Module {
        val io = new Bundle {
                val in0 = SFix(4, 12).asInput
                val in1 = SFix(4, 12).asInput
                val out = SFix(4, 16).asOutput
                val oraw = Bits(OUTPUT, width=128)
        }
        val int_result = -io.in0 * (io.in0 + io.in1)
        io.out := int_result
        io.oraw := int_result.raw
}

class ToyTest(c: Toy) extends Tester(c) {
        for (i <- 0 until 20) {
                val i0 = 0.5
                val i1 = 0.25
                poke(c.io.in0, i0)
                poke(c.io.in1, i1)

                val res = -i0 * (i0+i1)
                step(1)
                expect(c.io.out, res)
        }
}

object Toy {
        def main(args: Array[String]): Unit = {
                val tutArgs = args.slice(1, args.length)
                chiselMainTest(tutArgs, () => Module(new Toy())) {
                        c => new ToyTest(c)
                }
        }
}

这会产生以下错误:

在我的build.sbt文件中,我通过以下方式选择最新版本:

代码语言:javascript
复制
libraryDependencies += "edu.berkeley.cs" %% "chisel" % "latest.release"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-16 15:37:03

根据Chisel code的说法,SFix似乎已被弃用,应该使用修复。我修改了您的代码以使用它,但是使用poke和expect有一个问题。看起来poke和expect还不支持Fixed。

代码语言:javascript
复制
import Chisel._

class Toy extends Module {
        val io = new Bundle {
                val in0 = Fixed(INPUT, 4, 12)
                val in1 = Fixed(INPUT, 4, 12)
                val out = Fixed(OUTPUT, 8, 24)
                val oraw = Bits(OUTPUT, width=128)
        }
        val int_result = -io.in0 * (io.in0 + io.in1)
        io.out := int_result
        io.oraw := int_result.asUInt()
}

class ToyTest(c: Toy) extends Tester(c) {
        for (i <- 0 until 20) {
                val i0 = Fixed(0.5, 4, 12)
                val i1 = Fixed(0.25, 4, 12)
                c.io.in0 := i0
                c.io.in1 := i1
                //poke(c.io.in0, i0)
                //poke(c.io.in1, i1)

                val res = -i0 * (i0+i1)
                step(1)
                //expect(c.io.out, res)
        }
}

object Toy {
        def main(args: Array[String]): Unit = {
                val tutArgs = args.slice(1, args.length)
                chiselMainTest(tutArgs, () => Module(new Toy())) {
                        c => new ToyTest(c)
                }
        }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39517677

复制
相关文章

相似问题

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