| |
|
开发:
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]; 那么当我们写下
的时候,到底是对哪个位置赋值了?? 使用逆时针索引法解决: ?得出结论: 非合并数组由于存储空间并不连续,因此无法对整体赋值只能够分开赋值 看混合数组时候就是先看右侧的非合并数组,再看左侧的合并数组,看数组时都是从左往右看,那么总结起来就是逆时针规则了。 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)字符串方法 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |