首页 > 其他分享 >System Verilog

System Verilog

时间:2023-10-05 21:23:34浏览次数:30  
标签:cnt int 元素 System 枚举 Verilog 数组 bit

数据类型

​ 数据类型用来定义存储值或者用于线连接的变量

数据类型 位宽 符号
reg 可变 无符号 四态(0, 1, x, z)
wire 可变 无符号 四态(0, 1, x, z)
logic 可变 无符号 四态(0, 1, x, z)
bit 1 无符号 二态(0, 1)
byte 8 有符号 二态(0, 1)
shortint 16 有符号 二态(0, 1)
int 32 有符号 二态(0, 1)
longint 64 有符号 二态(0, 1)
Integer 32 有符号 四态(0, 1, x, z)

​ ⚠️:使用有符号数据类型声明无符号变量,可以加 unsigned; 例如:byte unsigned i

Logic 数据类型只能一对一驱动,

数组

可综合:静态数组

仿真使用:动态数组、队列、关联数组

定宽数组

初始化数组
//非紧凑型数组
bit [31:0] cnt[3:0] = '{ 4, 3, 2, 1 } ; // 使用'{} 对一个元素进行初始化

//紧凑型
bit [31:0] cnt[4] = '{ 4, default:1} ; // 使用'{} 对一个元素进行初始化,  default:1 后面元素都为 1
foreach
foreach(cnt[i]) == for(int i = 0; i<4; i++)  //遍历数组元素,
合并数组
bit [31:0]     cnt1[8];   //非合并数组,8 个 32 位元素
bit [3:0][7:0] cnt2[8];  //合并数组,8 个 4*8 元素 

// cnt1[5][2] 为 1 位数据
// cnt2[5][2] 为 8 位数据。
// cnt2[5][2][4] 为 1 位数据。

动态数组

声明数组
int cnt[] ;  // 使用空的[]
cnt = new[5]; // 使用 new[] 中括号的值来传递数组空间 cnt[4:0]
cnt.delete(); //删除所有元素
常数数组赋值
bit [7:0] cnt[] = '{8'b0000_0000,8'b1111_1111};  // cnt[1:0]

队列

声明
int cnt[$] = {3, 4}; //不需要 ' 来初始化或赋值
  • cnt.push_front(6) 在队列前插入 6;
  • cnt.pop_back. 将队列末尾的数移除并赋给别人;
  • cnt.push_back(6) 在队列末尾插入 6;
  • cnt.pop_front. 将队列末尾的数移除并赋给别人;
  • cnt.insert(1,2) 在 cnt 的第二位前插入 1

​ $ 在等式左边:表示最小值; [$: 2] 即 [0:2]

​ $ 在等式右边:表示最大值; [$: 1] 即 [1:2]

关联数组

声明

​ 需要在中括号里放置数据类型来声明

bit [31:0] cnt[bit[31:0]]; 
  • cnt.first(ides) ; 找到第一个索引
  • cnt.next(ides) ; 找到下一个索引
  • cnt.delete(ides) ; 删除当前索引

数组方法

​ 缩减方法

  • cnt.sum ; 对数组内所有元素进行求和 .product(乘).and(与); .xor (异或).or (或)

​ 定位方法

int cnt1[6] = '{1,2,2,6,6,7};  					//	定宽数组
int cnt2[] = '{1,2,2,6,6,7};	 					// 	动态数组
int cnt3[$] = '{1,2,2,6,6,7}, tq[$];	 	// 	队列

tq = cnt1.min();  // 最小值 {1}
tq = cnt2.max();	//最大值 {7}	
tq = cnt3.unique(); //唯一值 {1,2,6,7}
tq = cnt1.find with(item > 3); // 找到元素中大于 3 的所有元素 {6,6,7}

tq = cnt1.find_first_index with(item == 1); // 第一个找到元素为 1 的索引 [0]
tq = cnt1.find_last_index with(item == 1); // 最后找到元素为 1 的索引 [0]

​ **with为条件语句 ** ,with (item >3) 为元素中大于 3 的元素。

​ 其中,也可以将缩减方法与 with 条件语句结合

​ 排序方法

  • sort() 从小到大rsort() 从大到小reverse() 倒序shuffle() 从小到大

    其中,reverse 和 shuffle 不能和 with 条件语句结合使用

自定义类型

  • typedef
  • enum 创建枚举类型 ---> 适合创建常量列表
  • struct 创建结构体
typedef int unsigned uint;  // uint 表示 前面的 int unsigned ,相当于 define; uint表示的是变量类型 

​ 在枚举中,loat 代表缺省值 0, waite 为 2,idle 为 3;

enum {loat, wait} state_t; // state_t 表示的是枚举变量,是变量
typedef enum {loat, waite=2,idle} state_t; //定义枚举类型,这个 state_t 是枚举类型
//初始化
state_t pstate , nstate ;
case(pstate)
  loat: nstate = waite ;
  waite: nstate = loat ;
endcase
  • first()返回第一个 枚举常量last(); next()返回第下一个 枚举常量;next(N)返回下 N 个 枚举常量;prev()前一个枚举变量
typedef struct { int a; bit b ;} state_t; //同理,是结构变量
// 初始化
state_t cnt = '{32'haaaaaaaa, 32'd2}; 

字符串

​ 单个字符转是 byte 类型,字符串使用动态存储方式,不用担心存储空间会用完。

标签:cnt,int,元素,System,枚举,Verilog,数组,bit
From: https://www.cnblogs.com/50mhz/p/17743931.html

相关文章

  • (system)ntoskrnl.exe是Windows操作系统的内核文件之一,也是整个操作系统的核心部分
    ntoskrnl.exe是Windows操作系统的内核文件之一,也是整个操作系统的核心部分。它被称为WindowsNT操作系统内核,是操作系统中最重要、最基础的部分之一。ntoskrnl.exe主要负责管理和控制计算机的各种硬件资源,包括处理器、内存、磁盘、输入输出设备等等。ntoskrnl.exe是操作系统启动......
  • Remove Old ST03N Data after System Refresh(转)
    SymptomAfterasystemrefresh/systemcopy,thetransactioncodeST03Nisshowingtheolddatafromthesourcesystem.Solution1.RefertoSAPNote1179929ThedatafromothersystemscanbedeletedfromthetablesSWNCMONIandSWNCMONIINDEXusingthefu......
  • Go - Logging to the System Log Service
    Problem: Youwanttologintothesystemloginsteadofyourlogfiles.Solution: Usethelog/syslogpackagetowritetosyslog. Syslogisastandardnetwork-basedloggingprotocol.Ithaslongbeenthedefactostandardforloggingsystemeventsand......
  • Social Infrastructure Information Systems Division, Hitachi Programming Contest
    A-HitachiString满足条件的串即为串长为偶数且相邻两个均为为hi,直接判断即可。代码:#include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;constintN=15;intn;chars[N];intmain(){ scanf("%s",s+1); n=strlen(s+1); if(n&1) ......
  • SSIS抽取intersystems cache 数据库数据,SQLSERVER数据库配置CACHE数据库DBLINK
       最近有个新需求,需要用SSIS抽取intersystemscache数据库表数据步骤一:首先想到的是通过ODBC驱动进行连接,第一步安装cache驱动步骤二:配置cache数据库连接串,关键内容:CACHe数据库地址,端口,空间名,用户名,密码步骤三:测试ODBC链接步骤四:SSIS中配置ODBC链接 步骤五:常规数......
  • Windows 上 执行docker pull命令 提示:The system cannot find the file specified.
    错误提示errorduringconnect:Thiserrormayindicatethatthedockerdaemonisnotrunning.:Get"http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/version":open//./pipe/docker_engine:Thesystemcannotfindthefilespecified.解决办法在cmd窗口中执行如下命令c......
  • 库函数 | C++17 std::filesystem文件系统 用法指北
    本文将针对常用的场景,对std::filesystem的使用逐一进行验证:判断文件夹是否存在创建单层目录逐级创建多层目录创建多级目录当前文件路径创建文件"from.dat"获取相对于base的绝对路径文件拷贝移动文件或重命名创建文件“example.dat”获取文件大小获取文件最后修改......
  • 再使用System.out.println()打印收拾东西回家
    一、前言今天没事干的时候,无意间点到了一个System.out.println()中的println()方法,一个闪亮的关键字冲击着我的眼睛。不知道大家知不知道,那就是加锁的synchronized。但凡有锁的地方肯定会性能是有损耗的,当然得在并发的情况下!synchronized在JDK8还是6之后进入了锁升级概念:无锁—>偏......
  • Winform中使用System.Windows.Forms.Timer多次启动停止计时器时绑定事件会重复多次执
    场景C#中实现计时器功能(定时任务和计时多长时间后执行某方法):https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106274074以上关于定时器的使用。在实现点击按钮启动定时器,点击停止按钮停止定时器时发现,重复多次后会导致定时器方法累计重复执行。联想到如下情况......
  • 修复 GRUB unknown filesystem error
    出现问题的原因是我在安装好双系统后重新给硬盘进行了分区,GRUB的位置发生了变化Rescue部分参考:https://zhuanlan.zhihu.com/p/518428303但我没有办法按照上面的链接的方法进行修复和启动,于是按照这一篇下载了"boot-repair"自动修复,遂解决。......