欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > system verilog 学习1

system verilog 学习1

2024/10/25 0:30:33 来源:https://blog.csdn.net/qq_30093417/article/details/139930752  浏览:    关键词:system verilog 学习1

1 数据类型

sv 引进了一些新的数据类型,它们具有以下优点
(1)双状态数据类型:更好的性能,更低的内存消耗
(2)队列、动态和关联数组:减少内存消耗,自带搜索和分类功能
(3)类和结构:支持抽象数据结构
(4)联合和合并结构:允许对同一数据有多种视图(view)
(5)字符串:支持内建的字符序列
(6)枚举类型:方便代码编写,增加可读性

1.1 内建数据类型

verilog 有两种基本类型:reg 变量和 线网 wire。

1.1.1 逻辑 logic类型

sv对verilog进行了改进,使得它除了作为一个变量外,还可以被连续赋值、门单元和模块所驱动。为了与寄存器类型reg相区别,这种改进的数据类型被称为logic。

注意:由于logic类型只能有一个驱动,如果存在多个驱动,那么编译的时候就会报错。当然有时候你希望是多个驱动,那么这个信号需要被定义成线网型 wire

1.1.2 双状态数据类型

相比四状态数据类型,sv引入的双状态数据类型有利于提高仿真器的性能并减少内存的使用量。最简单的双状态数据类型是bit,它是无符号的。另四种带符号的双状态数据类型是byte,shortint int和longint。

1.2 定宽数组

1.2.1 定宽数组的声明和初始化

1.2.2 常量数组

1.2.3 基本的数组操作——for 和foreach

操作数组的最常见的方式是使用for或foreach循环。 sv中的$size函数返回数组的宽度。在foreach循环中,只需要指定数组名并在其后面的方括号中给出索引变量,sv便会自动遍历数组中的元素。索引变量将自动声明,并在循环内有效。

intial beginbit [31:0] src[5],dst[5];for(int i=0; i<$size(src);i++)src[i] = i;foreach (dst[j])dst[j]=src[j]*2;end

例1:

 int md[2][3] = '{'{0,1,2}, '{3,4,5}};initial begin$display("Initial value:");foreach(md[i,j])$display("md[%0d][%0d] = %0d",i,j,md[i][j]);$display("New value:")	// 对最后三个元素重复赋5md = '{'{9, 8, 7}, '{3{32'd5}}};foreach (md[i,j])		// 正确的语句格式$display("md[%0d][%0d]=%0d", i, j, md[i][j]);end

例2:打印一个多维数组

initial beginbyte twoD[4][6];foreach(twoD[i,j])twoD[i][j] = i*10+j;foreach(twoD[i]) begin$write("%2d:", i);		 	// 遍历第一个维度foreach(twoD[,j])$write("%3d", twoD[,j]) // 遍历第二个维度 $display;end
end

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com