码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Chisel3 入门 (1)


    Chisel3 入门(1)

    文章目录

    • Chisel3 入门(1)
      • Chisel3 基本数据类型
        • 定义变量
        • 创建变量、常量
      • 布尔逻辑
      • 类型转换
      • Analog/BlackBox 类型

    Chisel3 基本数据类型

    chisel提供三种类型数据类型描述信号连接、组合逻辑、寄存器:

    • Bits: 可表示 一个bit 向量
    • UInt: 扩展自Bits, 表示 无符号整型
    • SInt: 扩展自*Bits, 表示 有符号整型

    定义变量

    1. 定义变量类型
      • Bits([x:Int/string], [width:Int])
      • UInt([x:Int/string], [width:Int])
      • SInt([x:Int/string], [width:Int])
        如:
        Bits(8.W) 定义一个8-bit Bits类型, 类似于logic [7:0]
        UInt(16.W) 定义一个16-bit UInt类型, 类似于logic [15:0]
        SInt(32.W) 定义一个 32-bit SInt类型, 类似于logic [31:0]

    创建变量、常量

    1. 创建变量
      val signal_a = Bits(8.W) 定义 8-bit Bits类型变量

    2. 创建常量

      • 常量可以通过使用Scala整数并将其转换为Chisel类型来定义:
        • 0.U 定义UInt 类型常量0
        • -3.S 定义SInt类型常量-3
      • 常量也可以通过使用Chisel宽度类型来定义宽度:
        • 3.U(4.W) 定义4-bit 常量 3
        • "ha".asUint(8.W) 8-bit 16进制数
        • "o12".asUInt(6.W) 6-bit 8进制数
        • "b1010".asUInt(8.W) 8-bit 2进制数

    布尔逻辑

    为了表示逻辑值,Chisel定义了Bool类型。Bool可以表示true或false值。

    • Bool([x:Boolean])
      • Bool()
      • true.B
      • false.B

    类型转换

    val sint = 3.S(4.W) //4-bit SInt
    val uint = sint.asUInt  //cast SInt to UInt
    uint.asSInt             // cast UInt to SInt
    
    • 1
    • 2
    • 3

    注: asUInt/asSInt 不接受参数, 因此进行信号连接时,chisel会自动填充或截取。

    val bool: Bool = false.B        // always-low wire
    val clock = bool.asClock        // always-low clock
    
    clock.asUInt                    // convert clock to UInt (width 1)
    clock.asUInt.asBool             // convert clock to Bool (Chisel 3.2+)
    clock.asUInt.toBool             // convert clock to Bool (Chisel 3.0 and 3.1 only)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Analog/BlackBox 类型

    Chisel 支持analog类型(相当于 Verilog inout),可用于在 Chisel 中支持任意网络。这包括模拟线、三态/双向线和电源网络。

    analog是一种无方向类型,需要使用附加操作符将多个analog net连接到一起。使用<>可以连接analog 类型信号,一次只能连接一个网络。

    val a = IO(Analog(1.W))
    val b = IO(Analog(1.W))
    val c = IO(Analog(1.W))
    
    // Legal
    attach(a, b)
    attach(a, c)
    
    // Legal
    a <> b
    
    // Illegal - connects 'a' multiple times
    a <> b
    a <> c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    征集 |《新程序员》专访Python之父,你最想问什么?
    学习Java的第十六天。。。(构造方法、方法重载、this、局部变量和成员变量)
    “蔚来杯“2022牛客暑期多校训练营4 ADHK题解
    自己搭的centOS7虚拟机,ping baidu出现Temporary failure in name resolution
    vue学习53~60(Vue组件化编程)
    011 gtsam/examples/IMUKittiExampleGPS.cpp
    分类预测 | MATLAB实现CNN-LSTM(卷积长短期记忆神经网络)多特征分类预测
    基于GPT搭建私有知识库聊天机器人(五)函数调用
    出租屋智能视频监控系统方案:全面保卫租客安全
    安卓用户当心: CERT-IN 发布高危漏洞警告
  • 原文地址:https://blog.csdn.net/u010170039/article/details/138170224
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号