SystemVerilog学习笔记——数据类型

目录

数据类型

基本数据类型

整数数据类型

枚举类型

用户自定义类型

数组

静态数组与压缩数组

动态数组

关联数组

队列

字符串


数据类型

基本数据类型

time        64位整数,默认单位为秒
real        来自Verilog,就如C的double类型,64位
shortreal   来自C的float类型,32位
string      可变长度的字符数组
void        空返回,用于函数

整数数据类型

shortint        16位整型
int             32位整型
longint         64位整型
byte            8位整型(ASCII字符)
integer         32位整型(四态)

**以上五种数据类型默认是有符号数,如果想用无符号数定义时如下改动:
int unsigned using_int;

bit             0或1
reg             来自Verilog(四态)
logic           基本等同于reg

**以上三种数据类型默认是有符号数,如果想用无符号数定义时如下改动:
reg signed sig_reg;

SystemVerilog对reg的数据类型作了改进, 可以被连续赋值语句、 门逻辑和模块直接驱动。 另外, SystemVerilog还引入了一个新的四态数据类型logic, 可以代替reg; 但是不能用在双向总线和多驱动的情况下, 此时只能使用wire。

虽然SystemVerilog支持被连续赋值的reg类型,但是在做设计时用的还是Verilog,Verilog不支持这种类型,所以建议仿真时用logic。

枚举类型

通俗的讲,枚举类型定义了一组具有名字的值。可以看做整合的宏定义;

枚举类型可以如下定义:

enum [data_type] {name1=value1,name2=value2,...,nameN=valueN} var_name;

当没有指定数据类型的时候,缺省的数据类型是int。 在枚举类型中使用的任何其他数据类型都要求显式地声明。

无论是枚举名 还是它们的数值都必须是唯一的。 它们的值可以被设置为任意整型常量值, 或者从初始值0开始递增 ( 默认情况) 。

枚举变量不能被在枚举集合范围以外的数值直接赋值, 除非使用强制类型转换或者该枚举变量是一个联合体的成员。

SystemVerilog为枚举类型提供了如下内置方法:

  • first:返回枚举类型中第一个成员的值。
  • last:返回枚举类型中最后一个成员的值。
  • next (int unsigned N=1):以当前成员为起点,返回后续第 N 个成员的值,默认是下一个成员的值;若起点为最后一个成员,则默认返回第一个成员的值。
  • prev (int unsigned N=1):以当前成员为起点,返回前面第 N 个成员的值,默认是前面一个成员;若起点为第一个成员,则默认返回最后一个成员的值。
  • num:返回该枚举类型的成员数目。
  • name:以字符串的形式返回该成员名字。
     
enum {red,yello,green,blue} Colors;

initial begin
    Colors=Colors.next; //默认当前成员是第一个;
    $display("%s : %d",Colors.name,Colors);
    Colors=red;
    $display("%s : %d",Colors.name,Colors);
    Colors=Colors.last;
    $display("%s : %d",Colors.name,Colors);
    Colors=Colors.next; //当前成员是最后一个;
    $display("%s : %d",Colors.name,Colors);
end

打印结果:
# yello :         1
# red :           0
# blue :          3
# red :           0

用户自定义类型

定义如下:

typedef int my_type;
例如:
    parameter width = 8;
    typedef reg [width-1:0] temp;
    temp    a,b;    //a,b为长度为8的数组;

其实你并未创建一个新的数据类型,而只是在做文本替换;

typedef enum {red,green,blue,yello} colors;
colors mycolors;

initial begin
    $display("mycolors' default value is %s",mycolors);
    mycolors=green;
    mycolors=colors'(2);    //类型转换;
    $display("mycolors is %s", mycolors.name);
end

modelsim打印如下:
# mycolors'
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值