【SpinalHDL快速入门】4.1、基本类型之Bool

这篇具有很好参考价值的文章主要介绍了【SpinalHDL快速入门】4.1、基本类型之Bool。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Tips1:

由于SpinalHDL是基于Scala构建的,Scala本身自带类似变量Boolean,故在此要认准SpinalHDL中采用的是Bool而非Boolean:

  • Bool(大写的True和False):True表示1,False表示0
  • Boolean(小写的true和false):true表示1,false表示0

Tips2:

SpinalHDL在声明时采用“=”,而在改变电路状态时用“:=

【SpinalHDL快速入门】4.1、基本类型之Bool

1.1、描述

Bool类型对应于布尔值(True或False)。

1.2、声明

声明布尔值的语法如下:(方括号中的所有内容都是可选项

【SpinalHDL快速入门】4.1、基本类型之Bool

val myBool_1 = Bool() // Create a Bool
myBool_1 := False // := is the assignment operator

val myBool_2 = False // Equivalent to the code above
val myBool_3 = Bool(5 > 12) // Use a Scala Boolean to create a Bool

1.3、运算符

以下运算符可用于布尔类型:

1.3.1、逻辑运算(logic)

【SpinalHDL快速入门】4.1、基本类型之Bool

val a, b, c = Bool()
val res = (!a & b) ^ c // ((NOT a) AND b) XOR c

val d = False
when(cond) {
	d.set() // equivalent to d := True
}

val e = False
e.setWhen(cond) // equivalent to when(cond) { d := True }

val f = RegInit(False) fallWhen(ack) setWhen(req) //这个理解起来有点难度???
/** equivalent to
* when(f && ack) { f := False }
* when(req) { f := True }
* or
* f := req || (f && !ack)
*/

// mind the order of assignments!
val g = RegInit(False) setWhen(req) fallWhen(ack) //这个理解起来有点难度???
// equivalent to g := ((!g) && req) || (g && !ack)

1.3.2、边沿检测(Edge detection)

【SpinalHDL快速入门】4.1、基本类型之Bool

when(myBool_1.rise(False)) { //括号里面表示复位值为低
	// do something when a rising edge is detected
}


val edgeBundle = myBool_2.edges(False)
when(edgeBundle.rise) {
	// do something when a rising edge is detected
}
when(edgeBundle.fall) {
	// do something when a falling edge is detected
}
when(edgeBundle.toggle) {
	// do something at each edge
}

1.3.3、比较(Comparison)

【SpinalHDL快速入门】4.1、基本类型之Bool

when(myBool) { // Equivalent to when(myBool === True)
	// do something when myBool is True
}

when(!myBool) { // Equivalent to when(myBool === False)
	// do something when myBool is False
}

1.3.4、类型转换(Type cast)

【SpinalHDL快速入门】4.1、基本类型之Bool

// Add the carry to an SInt value
val carry = Bool()
val res = mySInt + carry.asSInt

1.3.5、杂项(Misc)

【SpinalHDL快速入门】4.1、基本类型之Bool

就是拼接符,等效Verilog中的{}

val a, b, c = Bool()
// Concatenation of three Bool into a Bits
val myBits = a ## b ## c

1.3.6、MaskedBoolean

MaskedBoolean 允许使用不确定值。它们通常不单独使用,而是通过MaskedLiteral来使用。

MaskedLiteral值是带有“-”的位向量,表示不关心的值。【下面的M就表示MaskedLiteral】文章来源地址https://www.toymoban.com/news/detail-474110.html

val myBits = B"1101
val test1 = myBits === M"1-01" // True
val test2 = myBits === M"0---" // False
val test3 = myBits === M"1--1" // True
// first argument: boolean value
// second argument: do we care ?
val masked = new MaskedBoolean(true, false)

到了这里,关于【SpinalHDL快速入门】4.1、基本类型之Bool的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Rust 基础入门 —— 基本类型

    在Rust 中,作为强类型语言,自然会独立一块内容用作类型管理工作,而rust 中 为应用领域的扩展, 兼容了很多的数学计算方面的 内容,加到了基本类型中,例如 复数, 在有向图和 矢量图计算中的应用,rust 通过自带的类型设计避免了 程序员再开发的任务难度。 总的来说

    2024年02月12日
    浏览(37)
  • Redis入门 - 5种基本数据类型

    原文首更地址,阅读效果更佳! Redis入门 - 5种基本数据类型 | CoderMast编程桅杆 https://www.codermast.com/database/redis/five-base-datatype.html 说明 在我们平常的业务中基本只会使用到Redis的基本数据类型(String、List、Hash、Set、Sorted Set),特殊类型(Geo、Bitmap、Hyperloglog)类型只有在特殊

    2024年02月09日
    浏览(31)
  • 【openGauss基本概念---快速入门】

    👈【上一篇】 💖The Begin💖 点点关注,收藏不迷路💖 【下一篇】👉 🔰 1.1 openGauss openGauss是一款 关系型数据库管理系统 —RDBMS。关系型数据库是指采用了关系模型来组织数据的数据库, 以行和列的形式存储数据 。 openGauss的数据库节点负责存储数据,其 存储介质是磁盘

    2024年02月09日
    浏览(36)
  • Kotlin系列一(快速入门,kotlin的数据类型)

    kontlin可以写脚本 创建一个\\\"script.kts\\\"文件 编写脚本内容 使用 kotlinc -script script.kts 命令运行kotlin脚本 创建一个文件\\\"HelloWorld.kt\\\" 编写内容 使用 kotlinc HelloWorld.kt 编译kotlin代码 使用 kotlin HelloWorld Kt运行编译后的字节码 使用\\\"var\\\"定义变量,变量定义后值可以改变,且可以在定义

    2024年02月03日
    浏览(41)
  • 【RabbitMQ】快速入门及基本使用

    Ⅰ、什么是消息队列?         消息队列是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及

    2024年01月20日
    浏览(37)
  • Spring Cloud 快速入门基本介绍

    😀前言 本篇博文是关于Spring Cloud 基本介绍,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉 💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰 如果文

    2024年02月10日
    浏览(41)
  • Shell编程——弱数据类型的脚本语言快速入门指南

    目录 Linux Shell 数据类型 变量类型 运算符 算术运算符 赋值运算符 拼接运算符 比较运算符 关系运算符 控制结构 顺序结构 条件分支结构 if 条件语句 case 分支语句  循环结构 for 循环 while 循环 until 循环 break 语句 continue语句 函数 函数定义  函数名 函数体 返回值 参数 函数的

    2024年02月12日
    浏览(73)
  • 快速入门Maxwell基本操作流程(3D部分)

    作者:金广林 第一步:建模 先绘制出五边形(截面) 再绘制框线的路径 将四段框线合并 (全选中后unite) 选中路径和截面,Draw- sweep- along path(让截面沿着路径扫过) 确定之后模型如图所示  添加材料    双击后点击edit,挑一个材料 这里选了铜copper 第二步:添加激励源 首

    2024年02月06日
    浏览(64)
  • JAVA包装类和基本数据类型------JAVA入门基础教程

    public class WrapperTest {     public static void main(String[] args)     {         int i1 = 10;         Integer i11 = new Integer(i1);         System.out.println(i11);         float f1 = 12.3F;         f1 = 32.2F;         Float ff1 = new Float(f1);         System.out.println(ff1);         String s1 = \\\"32.1\\\";         F

    2024年02月02日
    浏览(41)
  • 【go从入门到精通】go基本类型和运算符用法

                 大家好,这是我给大家准备的新的一期专栏,专门讲golang,从入门到精通各种框架和中间件,工具类库,希望对go有兴趣的同学可以订阅此专栏。 ---------------------------------------------------------------------------------------------------------------------------------              

    2024年03月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包