如何在 Chisel 中使用另一个寄存器动态索引到一个寄存器

2024-07-04

我正在为我被告知的一种漏斗移位器编写 Chisel 代码。 基本上,它获取大小为 m 位的输入并发送大小为 n 位的输出,其中 m 和 n 可以有任何关系,也可以没有关系。

我将 m 位字保存在缓冲区中,然后需要动态索引到缓冲区中以获取 n 位。同样,对于写入,我必须在 n 而不是 m 的边界处写入,以免出现碎片。为此,我使用 read_pointer 和 write_pointer 寄存器。并且需要使用指针作为索引从缓冲区中选择位。

但是 Chisel 不允许我使用一个寄存器作为另一个寄存器的索引值。我怎样才能做到这一点 ?代码如下 -

   when (io.pull && !(io.empty))
   {
       when ((buffer_rp +& out_word_size.U) <= (buffer_size-1).U ) // No wraparound
       {
           io.data_out := buffer (buffer_rp + (out_word_size - 1).U, buffer_rp)
       }
       .otherwise // Wraparound
       {
        
       }
   }

我收到的错误消息是 -

cmd24.sc:87:重载方法值适用于替代方案: (x: BigInt,y: BigInt)chisel3.UInt (x: Int,y: Int)chisel3.UInt 不能应用于(chisel3.UInt、chisel3.UInt) io.data_out := 缓冲区 (buffer_rp + (out_word_size - 1).U, buffer_rp) ^编译失败

Thanks


杰克·科尼格 https://stackoverflow.com/users/2483329/jack-koenig给了我一个response https://stackoverflow.com/a/59001903/4422957对于类似的问题几年前 https://stackoverflow.com/questions/58995390/how-to-split-an-uint-into-a-vec-of-uint-to-do-subword-extraction-and-assignmen.

您可以动态移位并对结果进行位提取:

           io.data_out := (buffer >> buffer_rp)(out_word_size - 1, 0)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Chisel 中使用另一个寄存器动态索引到一个寄存器 的相关文章

  • Scala 中表达式和语句有什么区别

    我是 Scala 世界的新手 想知道表达式和语句之间有什么区别 以及为什么 if else 用于表达式 而不是语句 是否有办法在 if else 中使用语句 EDIT 正如 J rg W Mittag 在评论中指出的 这个答案实际上是错误的
  • 我应该将 scala-compiler 作为依赖项包含在 build.sbt 中吗?

    我正在尝试在 intellij 中使用 scala 2 11 7 构建一个项目 我已经设置了scalaVersion to 2 11 7 但是当我检查外部库时 我可以看到scala compiler 2 11 0 我需要声明吗scala c
  • 启动时播放错误:未绑定 play.api.db.Database 的实现

    当我尝试运行 Play 应用程序 Play 2 5 4 时 出现以下错误 ProvisionException Unable to provision see the following errors 1 No implementation
  • FSC 每次都会重新编译

    即使没有必要 FSC 每次都会重新编译我的 scala 文件 我可以编译它两次 而无需在尝试之间编辑任何内容 并且它会重新编译它们 例如我有2个文件 你好 scala class Hello print hello 和 Tokens sca
  • Java客户端找不到主节点:MasterNotDiscoveredException等待[1m]

    我正在使用 vagrant 并使用 debian 软件包在其上安装了 ES elasticsearch 1 1 1 deb 在我的网络应用程序中 我使用 jar org elasticsearch elasticsearch 1 1 1 我
  • Scala 中的预期开始定义错误

    我正在尝试运行中提供的 Scala 代码这个 math stackexchange 帖子 https math stackexchange com questions 1233656 albert bernard and cheryl po
  • 为什么 SimpleDateFormat 解析错误的日期?

    我有字符串格式的日期 我想将其解析为实用日期 var date 03 11 2013 我将其解析为 new SimpleDateFormat MM dd yyyy parse date 但奇怪的是 如果我通过 03 08 201309 hj
  • Play2 - 模板 -> 递增

    如何在 play2 中声明并递增变量 在 scala html 模板 伪代码 counter for l lt list span class span counter 1 你真的需要计数器和递增吗 你可以这样做 for l index l
  • udf 没有可用于字符串类型的 TypeTag

    我不明白火花的行为 我创建一个 udf 它返回一个如下所示的整数 import org apache spark sql SQLContext import org apache spark SparkConf SparkContext o
  • 为什么 Scala 类型推断在这里失败?

    I have 这个班 http jamesgolick com 2010 2 8 monkey patching single responsibility principle and scala implicits html在斯卡拉中 o
  • 如何将解析器与不同类型的 Elem 结合起来

    我正在尝试创建一个结合了正则表达式解析器和我拥有的自定义解析器的解析器 我看过Scala 如何组合来自不同对象的解析器组合器 https stackoverflow com questions 2650254 scala how to co
  • Scala 是一个更好的 println

    我经常发现自己在做这样的事情 println foo 当我想做的时候 println foo 编译器不允许这样做 还有 println很拗口 我真的只想说 echo foo 因此 在基础包对象中 我创建了 println 的 echo 版本
  • Scala 转换为变量类型

    我有以下代码要投射value的类型default def fct T value Any default T T val result value asInstanceOf T println result result getClass
  • 将元素添加到向量末尾

    斯卡拉文档 http www scala lang org api current index html scala collection immutable Vector解释如何向 Vector 添加元素 def elem A Vecto
  • 父级退出时的 Python 多处理队列

    我的问题的要点是 当父进程 在这种情况下是守护进程 被杀死时 多处理队列会发生什么 我有一个在后台运行的守护进程 它为子进程排队作业 class manager Daemon def run self someQueue MP Queue
  • 为所有支持 copy(id=newId) 方法的案例类创建共同特征

    我正在尝试做类似的事情 trait IdentifiableModel T self def copy id ObjectId T gt val id ObjectId 我发现了一些其他相关的问题试图做类似的事情 但他们并没有真正回答这个问
  • Scala 防止混合的方法

    我想创造以下特征 trait IntSet A extends Traversable A self Product gt def foreach U f A gt U Unit case class AProduct a List Int
  • 特别处理Akka流的第一个元素

    有没有一种惯用的方法来处理 Akka 流Source第一个元素以特殊的方式 我现在拥有的是 var firstHandled false source map elem gt if firstHandled handle specially
  • Scala:使用具体类型实现 Map

    我在 Scala 类型系统中遇到了某种怪癖 这让我有点困惑 我正在尝试创建一个扩展 Map String String 的类 但我不太清楚如何以编译器接受的方式实现 方法 这是我现在的代码 class ParamMap val pairs
  • 为什么Scala 支持影子变量? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐