SystemVerilog 数据类型
1、内建数据类型
verilog有两种基本的数据类型:变量和线网,他们各自都可以有四种取值:0 1 z x;
RTL代码使用 变量 来存放组合和时序值;变量可以是单bit或者是多bit的无符号数 reg [7:0] m,
32bit的有符号数 integer ,64bit的无符号数 time 或者是 浮点数 real.若干变量可以被一起放在定宽数组里,所有的存储都是静态的,意味着所有变量在tb的时候都是存活的。
1.1、 logic类型
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2025/03/20 17:24:56
// Design Name:
// Module Name: logic_data_type
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module logic_data_type(input logic rst_h);parameter CYCLE = 20 ;logic q,q_l,d,clk,rst_l ;initialbeginclk = 1'b0 ;forever #(CYCLE/2)beginclk = ~clk ;endendassign rst_l = ~rst_h ;not m1(q_l,q) ;endmodule
1.2、 双状态数据类型
相比于四状态数据类型(0,1,x,z),SV 引入的双状态数据类型有利于提高仿真器的性能并减少内存。
双状态数据类型:可以用 unsigned 约束成无符号数
bit :无符号,width = 1 ;
byte :有符号整数, width = 8 ;
shortint :有符号整数, width = 16 ;
int :有符号整数,width = 32 ;
longint :有符号整数, width = 64 ;
real :双精度浮点
四状态数据类型:
integer : 有符号整数, width = 32 ;
time :无符号整数, width = 64 ;
对 四状态值 的检查
if( $isunknown( iport ) == 1 )$display( " @%0t : four state value detected on iport %b ",$time,iport ) ;
2、定宽数组
相比于 veilog 支持的数据选择,SV提供更多的数据类型。
2.1、 定宽数组的声明和初始化
定宽数组的声明:
int one[0:15] ; //都表示 16个 int 的数组
int two[16] ;
多维数组的声明:
int one[0:7][0:3] ; //两种声明方式都可以
int two[8][4] ;
非合并数据的声明:表示三个temp_one 数组,每个数组有8个数
bit[7:0] temp_one[3] ;
常量数组:
int one[0:3] = '{ 0,1,2,3 } ;
int two[0:4] = '{ 4,5,default:1 } ;//two 为 { 4,5,1,1,1 }
2.2、 对数组的基本操作
在数组中使用 for 和 foreach 关键词。
initial
beginbit[31:0] src[5] ;bit[31:0] dst[5] ;for( int i = 0 ; i < $size(src) ;i++ )src[i] = i ;foreach( dst[j] )dst[j] = src[j]*2 ;end
多维数组的初始化
int md[2][3] = '{ '{ 2,3,4 } , '{ 5,6,7 } } ;initial
begin$display(" Initial value: ") ;foreach( md[i,j] )$display(" md[%d][%d] = %0d ",i,j,md[i][j] ) ;$display(" new value ") ;md = '{ '{ 9,8,7 } ,'{ 3{32'd5} } } ;foreach( md[i,j] )$display(" md[%d][%d] = %0d ",i,j,md[i][j] ) ; end
多维数组的打印
initial
beginbyte twoD[4][6] ;foreach( twoD[i,j] )twoD[i][j] = i*10 + j ;foreach( twoD[i] )beginforeach( twoD[ ,j] )begin$write(" %3d " , twoD[i][j] ) ;endend end
数组的复制和比较
initial
beginbit[31:0] src[5] = '{ 0,1,2,3,4 } ;bit[31:0] dst[5] = '{ 5,4,3,2,1 } ;if( src == dst )begin$display(" src == dst ") ;endelsebegin$display(" src != dst ") ;enddst = src ;src[0] = 5 ;$display(" src %s dst ",(src == dst)?"==":"!=" ) ;$display(" src[1:4] %s dst[1:4] ",(src[1:4] == dst[1:4] )?"==":"!=" ) ;end
同时使用位下标和数组下标
verilog-1995 不支持 同时使用 数组下标和位下标,verilog-2001取消了这个限制。
initial
beginbit[31:0] src[5] = '{ 5{5} } ;$displayb( src[0] ,,src[0][0] ,,src[0][2:1] );end
合并数组 : 等待数组的变化的时候,必须使用合并数组
bit [3:0} [7:0] data ; //4 个 8bit的data的数组
3、动态数组
使用动态数组
int dyn[] , d2[] ; //动态数组声明initial
begindyn = new[5] ; //给dyn分配 5 个空间foreach( dyn[j] )begindyn[j] = j ;endd2 = dyn ;d2[5] = 0 ;$display(dyn[0],d2[0]);dyn = new[20](dyn) ; //为dyn分解 20 个空间 并复制 原来的数据dyn = new[100] ;dyn.delete() ; // 删除所有元素 end
使用动态数组保存元素数量不一定的list
bit [7:0] mask[] = '{ 8'b0000_0000 , 8'b0000_0001 ,8'b0000_0010 , 8'b0000_0011 , 8'b0000_0100 , 8'b0000_0111 ,8'b0000_1000 , 8'b0000_1111 ,8'b0001_0000 , 8'b0001_1111 };
可以把一个 顶宽数据 复制到 动态数据,SV会为动态数组分配空间(new[ ])并复制数组。
4、队列
队列的操作:队列的常量不用 ' 。
module demo_2_9();
int j = 1 ,q2[$] = { 3,4 } , //队列的声明q[$] = { 0,2,5 } ;initialbeginq.insert(1,j) ; //插入元素
// q.insert(2,q2) ;q.delete(1) ; //删除第一个元素q.push_front( 6 ) ; //在q的前面插入 6 q.push_back( 8 ) ; //在q的后面插入 8 q.pop_back ; //删除最后一个元素并返回新的长度q.pop_front ; //删除第一个元素并返回旧的的长度foreach( q[i] )begin$display( q[i] ) ;endq.delete ; //删除q这个数组end
endmodule
队列操作
int j = 1 ,q2[$] = { 3,4 } ,q[$] = { 0,2,5 } ;int len_q = 0 ;initialbeginq = { q[0],j,q[1:$] } ;q = { q[0:2],q2,q[3:$] } ;q = { q[0],q[2:$] } ;q = { 6,q } ;len_q = q[$] ;//将q的长度复制给 jq = q[0:$-1] ;//删除队列最后一个数q = { q,8 } ;//在q之后插入 8j = q[0] ;q = q[1:$] ;q = {} ;//删除队列end
相关文章:
SystemVerilog 数据类型
1、内建数据类型 verilog有两种基本的数据类型:变量和线网,他们各自都可以有四种取值:0 1 z x; RTL代码使用 变量 来存放组合和时序值;变量可以是单bit或者是多bit的无符号数 reg [7:0] m, 32bit的有符号…...
【技术简析】触觉智能RK3506 Linux星闪网关开发板:重新定义工业物联新标杆
在工业智能化与物联网深度融合的今天,深圳触觉智能推出首款搭载瑞芯微RK3506芯片的Linux星闪网关开发板,为大家技术解析。 RK3506-国产芯的硬核实力 作为瑞芯微2024年第四季度推出的入门级工业芯片平台,RK3506以三核Cortex-A7(1.…...
YOLO-UniOW: 高效通用开放世界目标检测模型【附论文与源码】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
面向对象(进阶)(‘封装‘,‘多态‘,‘对象属性‘,‘类属性‘,‘类方法‘,‘对象方法‘及其应用场景)
‘封装’,多态’及其应用场景 一, 封装及其应用场景 封装的定义 属于面向对象的三大特征之一, 就是隐藏对象的属性和现实细节, 仅对外提供公共的访问方式.(我们学的 函数, 类, 都是封装的体现). 封装的格式 __属性名 __属性名()封装的好处和弊端 好处 提高代码的安全性.…...
django如何配置使用asgi
以下是 Django 配置使用 ASGI 的完整指南: 一、配置前提 Django 版本:确保使用 Django 3.0(原生支持 ASGI)必要依赖:pip install daphne channels二、基础配置步骤 1. 创建/修改 ASGI 入口文件 在 Django 项目根目录…...
MongoDB 只能存储能够序列化的数据(比如字符串、数字等),而 Python 的 UUID 对象并不是直接可以存入数据库的格式。
1. UUID 对象是什么? UUID 是 “Universally Unique Identifier”(通用唯一识别码)的缩写,是一种 128 位的数字,用于在全局范围内生成一个唯一的标识符。它常用于数据库中的记录标识、分布式系统中的对象标识等场景。…...
分页优化之——游标分页
游标分页(Cursor-based Pagination) 是一种高效的分页方式,特别适用于大数据集和无限滚动的场景。与传统的基于页码的分页(如 page1&size10)不同,游标分页通过一个唯一的游标(通常是时间戳或…...
算法模型从入门到起飞系列——广度优先遍历(BFS)
文章目录 前言一、广度优先遍历(BFS)简介1.1 广度优先遍历(BFS)的特点1.2 广度优先遍历(BFS)的要素 二、广度优先遍历(BFS)& 深度优先遍历(DFS)2.1 广度优…...
AsyncHttpClient使用说明书
[[toc]] AsyncHttpClient(AHC)是一个高性能、异步的 HTTP 客户端库,广泛用于 Java 和 Scala 应用中,特别适合处理高并发、非阻塞的 HTTP 请求。它基于 Netty 或 Java 原生的异步 HTTP 客户端实现,支持 HTTP/1.1 和 HTTP/2 协议,适用于微服务、API 调用、爬虫等场景。 1.…...
FRP在远程办公中的实战应用
远程办公场景中,FRP可穿透企业防火墙,安全访问内网资源。以下是典型用例: SSH远程连接 配置示例: 客户端配置SSH映射,将本地22端口映射至公网服务器的6000端口,用户通过ssh -p 6000 user公网IP即可连接内网…...
git 设置保存密码 git保存密码
目录 长久保存密码 长久保存密码 git push和git pull都能使用。 git config --global credential.helper store 然后执行一次 git pull,Git 会提示输入用户名和密码, 输入后保存路径: ~/.git-credentials , Windows系统&…...
<项目> 主从Reactor模型的高并发服务器
目录 Reactor 概念 分类 单Reactor单线程 单Reactor多线程 多Reactor多线程 项目介绍 项目规划 模块关系 实现 TimerWheel -- 时间轮定时器 定时器系统调用 时间轮设计 通用类型Any Buffer Socket Channel Poller EventLoop(核心) eventfd 设计思路 …...
注意力机制,本质上是在做什么?
本文以自注意机制为例,输入一个4*4的矩阵 如下: input_datatorch.tensor([[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16] ],dtypetorch.float) 得到Q和K的转置如下。 此时,计算QK^T ,得到如下结果 第一行第一个位置就是第一条样本和第…...
使用Python在Word中创建、读取和删除列表 - 详解
目录 工具与设置 Python在Word中创建列表 使用默认样式创建有序(编号)列表 使用默认样式创建无序(项目符号)列表 创建多级列表 使用自定义样式创建列表 Python读取Word中的列表 Python从Word中删除列表 在Word中ÿ…...
右键添加:新建HTML模板文件
使用注册表给Windows右键添加:新建HTML文档模板的功能_注册表右键新建-CSDN博客 新建文件有了,但是没有引用模板文件,是空文件。 默认改成 htmlfile 模板成功...
Windows10配置OpenJDK11
下载 # 华为OpenJDK镜像源 https://mirrors.huaweicloud.com/openjdk/11.0.2/解压 # 解压后至于C:\Dev\Env\Java\jdk-11.0.2目录下 https://mirrors.huaweicloud.com/openjdk/11.0.2/openjdk-11.0.2_windows-x64_bin.zip编译安装 # 以管理员身份运行 CMD命令提示符 并进入JD…...
浅谈Go垃圾回收机制-面试笔记
Go 语言的垃圾回收机制(Garbage Collection,GC)是其内存管理的重要组成部分,以下是相关介绍: 1、基本原理 标记 - 清除算法:Go 语言的垃圾回收主要基于三色标记 - 并发清除算法。首先,从根对象…...
统一开放世界与开放词汇检测:YOLO-UniOW无需增量学习的高效通用开放世界目标检测框架
目录 一、摘要 二、引言 三、相关工作 开放词汇对象检测 开放世界目标检测 参数高效学习 四、高效通用的开放世界目标检测 问题定义 高效的自适应决策学习 开放世界通配符学习 五、Coovally AI模型训练与应用平台 六、实验 数据集 评价指标 实施细节 定量结果 …...
如何给商品一键换色?图生生AI,告别繁琐修图
在电商竞争日益激烈的今天,商品图片的视觉效果直接影响着消费者的购买决策。而商品颜色的展示,更是重中之重!传统的图片换色方式,往往需要耗费设计师大量的时间和精力,从抠图到调色,再到细节调整࿰…...
AIGC-名人语录账号运营创作智能体完整指令(DeepSeek,豆包,千问,Kimi,GPT)
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列AIGC(GPT、DeepSeek、豆包、千问、Kimi)...
基于MySQL的创建Java实体Bean和TypeScript实体Bean
基于MySQL的创建Java实体Bean和TypeScript实体Bean 基于MySQL的创建Java实体Bean和TypeScript实体Bean select ORDINAL_POSITION as a, -- Data -- Schema(description "货物管理表") -- TableName("lpg_cargo") -- public class CargoEntity implements…...
10-STL、位运算、常用函数库
1-STL vector vector是变长数组 //定义vector vector<int>a;//第一维长233,第二维长度动态变化 vector<int>b[233];//自定义的结构体类型也可以保存在vector中 struct res{...}; vector<rec>c;//函数 a.size();//返回vector的实际长度…...
练习-班级活动(map存储键值对)
问题描述 小明的老师准备组织一次班级活动。班上一共有 n 名 (n 为偶数) 同学,老师想把所有的同学进行分组,每两名同学一组。为了公平,老师给每名同学随机分配了一个 n 以内的正整数作为 id,第 i 名同学的 id 为 ai。 老师希望…...
纯血鸿蒙:中国操作系统自主创新的里程碑
引言:破局者登场 2024 年 10 月,搭载纯血鸿蒙操作系统(HarmonyOS NEXT)的华为 Mate 70 系列正式发布,首日预约量突破 330 万。这场现象级热度的背后,不仅是消费者对硬件创新的期待,更是中国科技…...
OpenHarmony 开源鸿蒙北向开发——hdc工具安装
hdc(OpenHarmony Device Connector)是为开发人员提供的用于设备连接调试的命令行工具,该工具需支持部署在 Windows/Linux/Mac 等系统上与 OpenHarmony 设备(或模拟器)进行连接调试通信。简单来讲,hdc 是 Op…...
buu-bjdctf_2020_babystack2-好久不见51
整数溢出漏洞 将nbytes设置为-1就会回绕,变成超大整数 从而实现栈溢出漏洞 环境有问题 from pwn import *# 连接到远程服务器 p remote("node5.buuoj.cn", 28526)# 定义后门地址 backdoor 0x400726# 发送初始输入 p.sendlineafter(b"your name…...
YOLO魔改之SAM空间注意力模块
基于SAM注意力的YOLOv7改进算法详解(可用于工业检测方案) 一、应用场景说明 本改进算法适用于以下工业检测场景: 复杂背景下的微小目标检测(电子元件缺陷、PCB板焊点)密集目标重叠检测(传送带上的包裹分拣、人群计数)动态环境目标追踪(无人机巡检、自动驾…...
【Java SE】抽象类/方法、模板设计模式
目录 1.抽象类/方法 1.1 基本介绍 1.2 语法格式 1.3 使用细节 2. 模板设计模式(抽象类使用场景) 2.1 基本介绍 2.2 具体例子 1.抽象类/方法 1.1 基本介绍 ① 当父类的某些方法,需要声明,但是又不确定如何实现时ÿ…...
文件相关函数的总结与记忆
1.字符的输入输出 char ch getchar();//不需要传递参数 putchar(a)putc、getc与fputc、fgetc一致 //必须用int接受,因为返回int类型,char因为编译器不同而可能为无符号和有符号 int ch if( (ch getchar() ) ! EOF) 2.行的输入输出 也可以用于二进制…...
SpringBoot有几种获取Request对象的方法
HttpServletRequest 简称 Request,它是一个 Servlet API 提供的对象,用于获取客户端发起的 HTTP 请求信息。例如:获取请求参数、获取请求头、获取 Session 会话信息、获取请求的 IP 地址等信息。 那么问题来了,在 Spring Boot 中…...
