Chisel3:对 Vector IO 的多位切片的部分分配

2024-02-12

可以对向量 IO 进行部分赋值,如下所示:

import chisel3._

class example_1 extends Module {
    val io = IO(new Bundle {
        val in1  = Input(Vec(4, Bool())
        val out1 = Output(Vec(4, Bool())
    })
    for (I <- 0 to 3){
        io.out1(I) := io.in1(I)
    }
}

是否可以对向量的多位切片进行部分分配。下面的代码不起作用

import chisel3._

class example_1 extends Module {
    val io = IO(new Bundle {
       val in1  = Input(Vec(4, Bool())
       val out1 = Output(Vec(4, Bool())
    })
    for (I <- 0 to 1){
        io.out1((I*2)+2-1, I*2) := io.in1((I*2)+2-1, I*2)
    }
}

然而,人们会认为使用 slice 应该可以做到这一点,而 slice 用于引用 io.in1 向量的切片

val in1_sl = io.in1.slice(0, 2)

无法在赋值的 LHS 上使用 slice 来创建 io.out1 的切片:

io.out1.slice(0, 2) := io.in1.slice(0, 2)

我在这里使用的示例仅用于演示目的。


我认为目前凿子中没有办法做到这一点。在 LHS 上使用 slice 意味着 splice 返回的集合不支持 connect 方法。话虽这么说,以下内容似乎有效,尽管我还没有考虑到它的所有含义。

class Slicer extends Module {
  implicit class SeqHelper(val seq: Seq[Bits]) {
    /**
      * Promotes a Seq of Bits to a class that supports the connect operator
      */
    def := (other: Seq[Bits]): Unit = {
      seq.zip(other).foreach { case (a, b) => a := b}
    } 
  }

  val io = IO(new Bundle {
    val in1  = Input(Vec(4, Bool()))
    val out1 = Output(Vec(4, Bool()))
  })

  io.out1.slice(0, 2) := io.in1.slice(0, 2)
}

您可以将 SlicerHelper 放入包对象中,使其可以普遍访问。需要考虑的外来习语可能较少。

io.out1.slice(0, 2).zip(io.in1.slice(0, 2)).foreach { case (a, b) => a:= b }

or

io.out1.zip(io.in1).slice(0, 2).foreach { case (a, b) => a:= b }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Chisel3:对 Vector IO 的多位切片的部分分配 的相关文章

  • DANA简介

    Dynamically Allocated Neural Network DANA Accelerator https github com bu icsg dana spinalHDL Doc https spinalhdl github
  • chisel快速入门(二)

    上一篇见此 chisel快速入门 一 沧海一升的博客 CSDN博客简单介绍了chisel 使硬件开发者能快速上手chisel https blog csdn net qq 21842097 article details 121415341
  • Chisel 教程翻译 之 第三章 构建过程和测试 of 《Digital Design with Chisel》

    3 Build Process and Testing 21 3 1 Building your Project with sbt 21 3 1 1 Source Organization 21 3 1 2 Running sbt 23 3
  • 吃透Chisel语言.15.Chisel模块详解(二)——Chisel模块嵌套和ALU实现

    Chisel模块详解 二 Chisel模块嵌套和ALU实现 稍微复杂点的硬件设计就需要用嵌套的模块层级来构建了 上一篇文章中实现的计数器其实就是个例子 计数器内部嵌套了一个寄存器 一个Mux和一个加法器 这一篇文章就仔细讲解模块之间是怎么连
  • Chisel教程——14.(完结篇)Scala和Chisel中的数据类型

    完结篇 Scala和Chisel中的数据类型 完结篇开头的碎碎念 这是这个系列的最后一篇文章了 官方的Chisel Bootcamp中后面还有FIRRTL相关的内容 但设计一个RISC V CPU这样的目标 靠本系列文章讲述的内容已经足够了
  • chisel线网(wire)和寄存器(reg)详解(更新)

    主体内容摘自 https blog csdn net qq 34291505 article details 87714172 在Verilog里 模块内部主要有 线网 wire 和 四态变量 reg 两种硬件类型 它们用于描述数字电路的组
  • 第十六章 Chisel入门——搭建开发环境

    用于编写Chisel的Scala内容已经全部讲完了 下面就可以正式进入Chisel的学习之旅了 有兴趣的读者也可以自行深入研究Scala的其它方面 不管是日后学习 工作 或是研究Chisel发布的新版本 都会有不少的帮助 在学习Chisel
  • 实时CPU设计

    Patmos with Chisel https github com t crest patmos
  • Chisel入门(三)------Chisel的基本语法2

    概述 继续介绍Chisel的基本语法 3 组件 3 1 Chisel中的组件是模块 Chisel中的每个模块都拓展了class 并包含了接口的io字段 接口是由封装为IO 的Bundle所定义的 Bundle包含的字段表示模块的输入输出端口
  • Chisel教程——04.Chisel中的控制流

    控制流 动机 本系列到目前为止 Chisel中的软硬件之间都有很强的对应关系 但引入控制流之后就不一样了 对软硬件的看法就应该有很大的分歧了 本节会在生成器软件和硬件中都引入控制流 如果重新连接到一个Chisel连线会怎么样呢 如何让一个多
  • chisel使用自定义/标准库中的函数简化设计(更新)

    主体内容摘自 https blog csdn net qq 34291505 article details 87905379 函数是编程语言的常用语法 即使是Verilog这样的硬件描述语言 也会用函数来构建组合逻辑 对于Chisel这样
  • 第十七章 Chisel基础——数据类型

    一 Chisel的常见问题 在学习Chisel前 应该熟悉一些常见问题 这些问题在编写Chisel的任何时候都应该牢记 Chisel是寄宿在Scala里的语言 所以它本质还是Scala 为了从Chisel转变成Verilog 语言开发人员开
  • chisel-book-chinese

    chisel book chinese 蓝奏云地址 https wwu lanzoue com isdim08x8x5i
  • 第二章 Scala入门——让你的代码跑起来

    一 Scala的安装方法 要使用Scala 首先需要保证已经安装好了Java 8 对于Linux操作系统 Java 8已经默认安装了 而使用Windows操作系统的用户 则需要在Java官网下载安装包进行安装 请在CMD PowerShel
  • Chisel实验笔记(一)

    最近在学习Risc v 其中伯克利大学开源了一款兼容Risc v指令集的处理器Rocket 而Rocket处理器是采用Chisel编写的 所以要学习Chisel Chisel的简单介绍如下 Chisel Constructing Hardw
  • chisel的命名高级用法

    从历史上看 Chisel 在可靠地捕获信号名称方面遇到了麻烦 造成这种情况的原因是 1 主要依靠反射来查找名称 2 使用 chiselName行为不可靠的宏 Chisel 3 4 引入了一个自定义的 Scala 编译器插件 它可以在声明信号
  • 第二十章 Chisel基础——生成Verilog与基本测试

    经过前三章的内容 读者已经了解了如何使用Chisel构建一个基本的模块 本章的内容就是在此基础上 把一个Chisel模块编译成Verilog代码 并进一步使用Verilator做一些简单的测试 一 生成Verilog 前面介绍Scala的内
  • 如何制作模块向量?

    我想实例化一个一维元素数组 并且元素扩展模块 我该怎么做 如果我说我最好的猜测 那就是 val elements Vec 64 new element 我收到以下错误消息 error Users mykland work chisel ar
  • 凿子3.功能模块Mux4

    我正在按照文档学习 Chisel在 Github 上 https github com ucb bar chisel3 wiki Short 20Users 20Guide 20to 20Chisel 到目前为止 一切都完美无缺 但我还是卡
  • Chisel 中的 <> 运算符是什么?

    Chisel 教程使用了看似 lt gt 运算符 对我来说完全陌生 它有什么作用 还有 它从哪里来 该运算符在其他 Scala 库甚至其他语言中是否有约定的含义 以下是 Chisel Generator Bootcamp 练习第 3 2 节

随机推荐

  • 递归下降解析器问题

    关于如何编写递归下降解析器 我有两个问题 第一个是当你有一个非终结符可以匹配几个不同的非终结符之一时该怎么办 如何检查哪种方式是正确的 其次 如何构建 AST 使用 YACC 我可以编写一段代码来为非终端的每个实例执行 并且它具有引用规则
  • 如何在 Python 中将字典合并在一起?

    d3 dict d1 d2 我知道这合并了字典 但是 它是独一无二的吗 如果 d1 与 d2 具有相同的键但不同的值怎么办 我希望将 d1 和 d2 合并 但如果存在重复键 则 d1 具有优先权 您可以使用 update http docs
  • 无法写入核心转储。默认情况下,Eclipse 中的 Windows 客户端版本不启用小型转储

    当我尝试在 Eclipse 中运行 Android 应用程序时 出现以下错误 但这仅发生在同一工作区中的单个项目中 JRE version 7 0 21 b11 Java VM Java HotSpot TM Client VM 23 21
  • 系统性能计数器的实例名称是否已本地化?

    Windows 中的性能计数器名称是本地化的 因此例如计数器 Processor Total Processor Time在 Windows 的其他语言版本中称为其他名称 这意味着为了找到正确的名称 必须首先找到计数器的索引 然后使用Pdh
  • Play/Akka 与 Java OutputStreams 集成

    我正在写剧本 该应用程序公开了 REST API 允许用户生成 PDF 报告 我受到使用旧 Java API 来生成实际报告的要求的限制 那个库有一个方法generate OutputStream out 即需要一个java io Outp
  • 应用程序扩展“由于内存问题而终止”

    在我的应用程序通知服务扩展中 我执行以下操作 从 Parse 获取数据 在后台 将数据写入文件 将数据保存在 NSUserDefaults 中 在共享容器中 有时我会收到消息 由于内存问题而终止 没有其他信息说明导致此情况的原因 有人有这方
  • J2ME 上的 JDBC 支持

    目前我正在尝试在 Windows Mobile 6 1 设备上运行现有的 java 应用程序 java应用程序是为服务器端开发的并使用JDBC 我的问题是Java应用程序使用java sql DriverManager J9运行时或任何CD
  • 如何使用 Npgsql 管理 SQLserver 到 PostgreSQL 的迁移?

    我正在用 C 编写一个使用 MVC 模式的 Web 应用程序作为实习 我正在尝试将 EntityFramework 创建的 SQLserver 数据库迁移到 PostgreSQL 数据库 我在网上找到了一个解决方案 Npgsql 它似乎完成
  • 按日期分组,不包含时间

    我想知道是否有一种方法可以在计算日期时将 2014 01 26 05 39 29 000 和 2014 01 26 07 45 31 000 分组为一天 我目前有以下代码 仅按其唯一的日期时间对它们进行分组 SELECT ETK Expir
  • Mercurial - 在不知道名称的情况下提取所有远程书签?

    Mercurial 中是否有一个选项允许我提取所有远程书签而无需提前知道它们的名称 On the Mercurial 书签页面 http mercurial selenic com wiki Bookmarks 它提到当我clone一个存储
  • 重定向/返回到 Django 中的同一(上一个)页面?

    当您想要将用户返回到 Django 中的同一页面时 有哪些选项 每个选项的优缺点是什么 我知道的方法 HTTP REFERER 包含先前 URL 的 GET 参数 用于存储先前 URL 的会话数据 还有其他的吗 其中一种方法是使用HTTP
  • 导入错误:没有名为 parse 的模块

    我正在尝试使用 mongodb 和 pymongo 运行 Web 应用程序来提供数据库中的数据 我收到的错误是 ImportError 没有名为 parse 的模块 请参阅以下来自 apache2 Web 服务器的 error log mo
  • CSS:模糊和反转整个页面的颜色

    当同时使用 webkit 过滤器 模糊 和 反转 时 只有模糊有效 如果 模糊 被删除 反转 就可以了 此外 只有 Chrome 和 Opera 响应该代码 有没有办法让它适用于最新的 IE 和 Firefox 版本 body webkit
  • 在重新启动时保留 ASP.NET 应用程序状态

    有什么好方法可以在重新启动后保留 ASP NET 应用程序状态吗 我希望能够设置一些值重新启动应用程序并让它们仍然存在 我想主要针对甚至不需要数据库的小型 一次性 测试 Web 应用程序执行此操作 有没有办法用静态成员和序列化来做到这一点
  • 如何在没有C库的情况下将整数转换为字符?

    在 C 编程练习中 我被要求在不使用 C 库的情况下将 int 转换为 char 知道如何去做吗 编辑 我所说的 int 是内置的 C C 类型 Thanks Cast it char c char i 或者也许你是这个意思 char c
  • 在大屏幕上修复 FireFox 与 Chrome 中的网站大小

    看起来 Gecko Trident 和 Webkit 在高分辨率屏幕上显示网页的方式不同 Chrome 和新 Opera 等 Webkit 浏览器会缩小页面以匹配屏幕的像素分辨率 然而 这可能会使小文本很难阅读 另一方面 Firefox 和
  • -[__NSCFNumber isEqualToString] 错误

    我遇到了这个崩溃 但是 在我的代码中我使用了一个字符串 我现在已经在这一段代码上工作了 2 个小时 但我看不出我错过了什么 有任何想法吗 NSString codeR NSString stringWithFormat object obj
  • Docker 无法在带有 WSL 2 的 Windows 11 上启动

    我正在尝试使用 WSL 2 设置 docker 来运行 Dockerfile 我下载了 Docker Desktop 当我尝试按照快速入门指南进行操作时 出现以下错误 docker error during connect This err
  • 已回答 - JavaFX:单击时 SubScene 不会在 TabPane 内聚焦? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 看起来像是SubScene or TabPane不是我所期望的或者有问题 Because而不是被专注于Subscene 1 when i
  • Chisel3:对 Vector IO 的多位切片的部分分配

    可以对向量 IO 进行部分赋值 如下所示 import chisel3 class example 1 extends Module val io IO new Bundle val in1 Input Vec 4 Bool val out