IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> system Verilog知识点汇总(一)数据类型 -> 正文阅读

[数据结构与算法]system Verilog知识点汇总(一)数据类型

1,数据类型分类

整数分可以为有符号数和无符号数, 也可以按照四值和二值数进行分类。

二值有符号数:byte(默认位宽为8bit位),int(32),shortint(16),longint(64)。

四值有符号数:integer(32)

二值无符号数:bit(1)

四值无符号数:logic,time(64)

real:二值双精度浮点数

2,数组以及相关操作

(1)定宽数组

声明:

int array[0:15];

int array[16];

以上两个例子均声明了一个数组,含有16个整数


初始化一个数组:

int array[4]='{0,1,2,3};

int array_1[5];

array_1='{4,3,2,1,0};? ? ? ? ? ? ? ? //array_1赋值为[4,3,2,1,0]

array_1[0:2]='{5,6,7};? ? ? ? ? ? ? ? //[5,6,7,1,0]

array_1='{5{8}};? ? ? ? ? ? ? ? ? ? ? ? //[8,8,8,8,8]

array_1='{9,8,default:1};? ? ? ? ? ?//[9,8,1,1,1]

(2)多维数组

声明:

int array_0[0:7][0:3];

int array_0[8][4];

以上两个例子都声明了一个8行4列的二维整数数组。

array_0[7][3]=1;

上述例子表示第八行第四列(即最后一个)的一个元素为1。

(3)缺省值

如果你的代码试图从一个越界的地址中读取数据,那么systemVerilog将返回数组元素类型的缺省值。

四值类型返回x,二值类型返回0,线网在没有驱动的时候输出是Z。

(4)数组循环/遍历

initial begin

bit [31:0]src[5],dst[5];


for (int i =0;i<$size.(src);i++)

? ? src[i]=i;


foreach(dst[j])

? ? dst[j]=j;

end

上述两个例子分别用for 和foreach进行循环/遍历,最后得到的两个数组均为[0,1,2,3,4]。

(5)复制和比较

initial begin

bit [31:0]dst[5]='{4,3,2,1,0}?,

??????????????src[5]='{0,1,2,3,4};

//将src复制给dst

dst=src;

//比较

if(src==dst)

? ? ? ? $display(''src==dst");

if(src[1:4]==dst[1:4])

? ? ? ? $display(''src[1:4]==dst[1:4]");

end

(6)数组下标和位下标

initial begin?

bit [31:0]src[5]='{5,4,3,2,1};

$displayb(src[0],,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //$displayb表示以二进制形式显示:'b101

? ? ? ? ? ? ? ? src[0][0],,? ? ? ? ? ? ? ? ? ? ? ? ? ? //'b1

? ? ? ? ? ? ? ? src[0][2:1]);? ? ? ? ? ? ? ? ? ? ? ? //'b10

end

第一个中括号表示数组下标,第二个中括号表示位下标。

(7)合并数组和非合并数组

定义一个多维混合数组:

bit [3:0][7:0][15:0] Array [3:0][7][6];

那么当我们写下

Array[2][3][2][2] = xxxx;

的时候,到底是对哪个位置赋值了??

使用逆时针索引法解决:

?得出结论:

非合并数组由于存储空间并不连续,因此无法对整体赋值只能够分开赋值

看混合数组时候就是先看右侧的非合并数组,再看左侧的合并数组,看数组时都是从左往右看,那么总结起来就是逆时针规则了。

bit型用来声明时,一般认为[15:0]表示的是元素的位宽,而非数组维度。


合并数组和非合并数组的声明方式不同:

非合并数组:=‘{};

合并(混合)数组:=8’h01;? ? ? ? ? ? ? ? //赋值要符合合并数组的格式

(8)动态数组/队列

动态数组声明:

int a[];

bit [31:0]a[];

a=new[5];

在数据类型和元素数量相同的情况下,动态数组和定宽数组可以互相赋值。

队列声明:

int b[$]={3,4};

int c[$];

$表示最大值或者最小值

队列中的元素超过原有空间的容量时,system Verilog会自动分配更多的空间。其结果是,你可以扩大或者缩小队列,但不用像动态数组那样在性能上付出很大的代价。

注意不要对队列使用new[]。


队列的方法:

queue.insert(i,c);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //表示在queue中元素queue[i]前插入c(c可以为常量也可以为队列)。

下面的操作执行速度很快:

queue.push_front(6);? ? ? ? ? ? ? ? //在queue前面插入一个数

queue.push_back(6);? ? ? ? ? ? ? ? //在queue后面插入一个数

queue.pop_back;? ? ? ? ? ? ? ? ? ? ? //在queue后面删除一个数

queue.pop_front;? ? ? ? ? ? ? ? ? ? ? //在queue前面删除一个数

(9)数组的方法

数组缩减方法:

array.sum;? ? ? ? ? ? ? ? ? //数组求和

其他方法product(积),xor(异或),and(与),or(或)


数组定位方法:

注意:数组定位方法返回的均为一个队列而非标量。

array.min();? ?

array.max();? ?

array.unique();? ? ? ? ? ? ? ?//实现数组的去重操作

find方法:

with表达式可以指示systemVerilog如何进行搜索。

int q[$],d[]='{9,1,8,3,4,4};

q=d.find with(item>3);

q=d.find() with(item>3);

q=d.find(x) with(item>3);

q=d.find(item) with(item>3);

上述四个例子得到的q是相同的。


数组的排序方法:

d.reverse();? ? ? ? ? ? ? ? //反向

d.sort();? ? ? ? ? ? ? ? ? ? ? //从小到大排序

d.rsort();? ? ? ? ? ? ? ? ? ? //从大到小

d.shuffle();? ? ? ? ? ? ? ? //洗牌

3,自定义新类型

(1)利用typedef定义新类型

typedef bit [31:0]uint;? ? ? ? ? ? ? ? ? ? ? ? //定义一个32bit双状态无符号数据类型

typedef int unsigned uint;? ? ? ? ? ? ? ? //等效定义

(2)使用struct创建新结构

struct {bit [7:0]r,g,b;} pixel;

创建一个变量;

typedef struct {bit [7:0]r,g,b;} pixel_s;

创建一个自定义pixel结构的新类型;可以在声明过程中把多个不同类型的值赋给一个结构体,赋值时要把数据放在一个大括号内,赋值过程类似非合并数组。如:‘{}

? (3)合并结构

合并结构是已连续比特集的方式存放的,中间没有闲置空间。

typedef struct packed {bit[7:0]r,g,b;} pixel_p_s;

pixel_p_s? my_pixel;

(4)流操作符

>>和<<

流操作符>>把数据从左到右变成流,流操作符<<把数据从右到左变成流

(5)自定义枚举类型

(6)字符串方法

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 02:14:08  更:2022-01-14 02:16:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:44:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码