当前位置: 首页 > news >正文

【SpinalHDL快速入门】4.6、复合类型之Vec

文章目录

    • 1.1、描述
    • 1.2、声明
      • 1.2.1、实例
    • 1.3、运算符
      • 1.3.1、比较(Comparison)
      • 1.3.2、类型转换(Type cast)
      • 1.3.3、杂项(Misc)
      • 1.3.4、Lib辅助函数(Lib helper functions)

在这里插入图片描述

1.1、描述

Vec是一种复合类型,它在一个单一的名称下定义了一组索引信号(任何SpinalHDL基本类型)。

1.2、声明

声明向量的语法如下:

在这里插入图片描述

1.2.1、实例

// Create a vector of 2 signed integers
val myVecOfSInt = Vec(SInt(8 bits), 2)
myVecOfSInt(0) := 2
myVecOfSInt(1) := myVecOfSInt(0) + 3// Create a vector of 3 different type elements
val myVecOfMixedUInt = Vec(UInt(3 bits), UInt(5 bits), UInt(8 bits))val x, y, z = UInt(8 bits)
val myVecOf_xyz_ref = Vec(x, y, z)// Iterate on a vector
for(element <- myVecOf_xyz_ref) {element := 0 // Assign x, y, z with the value 0
}// Map on vector
myVecOfMixedUInt.map(_ := 0) // Assign all elements with value 0// Assign 3 to the first element of the vector
myVecOf_xyz_ref(1) := 3

1.3、运算符

Vec类型支持以下运算符:

1.3.1、比较(Comparison)

在这里插入图片描述

// Create a vector of 2 signed integers
val vec2 = Vec(SInt(8 bits), 2)
val vec1 = Vec(SInt(8 bits), 2)myBool := vec2 === vec1 // Compare all elements

1.3.2、类型转换(Type cast)

在这里插入图片描述

// Create a vector of 2 signed integers
val vec1 = Vec(SInt(8 bits), 2)myBits_16bits := vec1.asBits

1.3.3、杂项(Misc)

在这里插入图片描述

// Create a vector of 2 signed integers
val vec1 = Vec(SInt(8 bits), 2)println(vec1.getBitsWidth) // 16

1.3.4、Lib辅助函数(Lib helper functions)

注意:您需要导入 “spinal.lib._” 以将这些函数放在作用域中。

在这里插入图片描述

import spinal.lib._
// Create a vector with 4 unsigned integers
val vec1 = Vec(UInt(8 bits), 4)// ... the vector is actually assigned somewhereval c1: UInt = vec1.sCount(_ < 128) // vec中有多少个值小于128
val c2: UInt = vec1.sCount(0) // vec中有多少个值等于零
val b1: Bool = vec1.sExists(_ > 250) // 有没有大于250的元素
val b2: Bool = vec1.sContains(0) // vec里有零吗?
val u1: UInt = vec1.sFindFirst(_ < 10) // 获取第一个小于10的元素的索引
val u2: UInt = vec1.reduceBalancedTree(_ + _) // 将所有元素相加。

注意:sXXX前缀用于消除与接受lambda函数作为参数的同名Scala函数的歧义

警告:SpinalHDL的定点支持仅部分使用/测试,如果您发现任何错误或认为某些功能缺失,请创建Github问题。此外,请勿在代码中使用未记录的功能。

http://www.lryc.cn/news/91649.html

相关文章:

  • 探访世优科技数字人虚拟直播产品体系 | 世优开放日再次成功举行
  • 有奖励!2023陕西省首台(套)重大技术装备产品项目申报条件、认定材料
  • 2023/6/6总结
  • api习题
  • (STL之string)string类的用法详解
  • 基于RT-Thread快速上手SD NAND 虚拟文件系统
  • 性能测试实战
  • 【PWN · 总结】system返回shell(‘/bin/sh‘、‘sh‘、$(0))
  • 《庄子》笔记
  • 五、VBO、EBO 和 VAO
  • 数据库期末复习(7.2)查询优化
  • 深入探索:在std::thread中创建并管理QEventLoop的全面指南
  • 【Netty】Netty中的超时处理与心跳机制(十九)
  • 尚硅谷大数据hadoop教程_mapReduce
  • 一键启停脚本
  • 20230604_Hadoop命令操作练习
  • hashCode 与 equals(重要)?
  • 华为OD机试(2023.5新题) 需要打开多少监控器(java,py,c++,js)
  • 209.长度最小的子数组
  • react antd Modal里Form设置值不起作用
  • idea连接Linux服务器
  • 在windows环境下使用winsw将jar包注册为服务(实现开机自启和配置日志输出模式)
  • 汽车通用款一键启动舒适进入拓展蓝牙4G网络手机控车系统
  • QSettings Class
  • 【vue】关于vue中的插槽
  • Springboot整合Mybatis Plus【超详细】
  • 接口测试-使用mock生产随机数据
  • Kohl‘s百货的EDI需求详解
  • 二叉树part6 | ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树
  • Linux命令记录