文章目录
- 枚举
- 基本语法
- 类型转换
- 枚举类型内置方法
- 字符串
- 内置方法
枚举
基本语法
枚举类型可以用来声明一组整型的命名常量,定义具有强类型的枚举变量。枚举类型还可以使用枚举名字而不是枚举值来方便地引用或显示。当没有指定数据类型的时候,缺省的数据类型是 int。在枚举类型中使用的任何其他数据类型都要求显式地声明。枚举类型定义了一组具有名字的值。无论是枚举名 还是它们的 (整型) 数值都必须是唯一的。它们的值可以被设置为任意整型常量值,或者从初始值 0开始递增 (默认情况)。如果将两个值设置到相同的枚举名,或者设置的值与递增值冲突都是非法的定义。
下面给出实际例子:
//IDLE = 0 ,S1 =3, S2 = 4
enum integer {IDLE, S0 = 'b10, S1, S2} state, next_state;
//若不定义S0的值,则S0, S1,S2分别为1, 2,3
enum integer {IDLE, S0 , S1, S2} state, next_state;
类型转换
枚举类型的缺省值为Int,可以使用赋值表达式枚举变量直接赋值给非枚举变量,但SV不允许没有进行显示类型转换的情况下赋值,因为有可能会发生数值越界。
转换方法如下:
module test_typef();
typedef enum {red, blue, yellow, white, black} colors;
colors my_colors;
initial begin;
$display("my_colors value is %s", my_colors);//0
my_colors = blue;
//这里不能直接使用my_colors=1;
my_colors = colors'(1)//这是可以的,静态类型转换
my_colors = $cast(colors, 1);//动态转换会进行检查结果是否越界
end
endmodule
枚举类型内置方法
function enum first:返回枚举类型中第一个成员的值。
function enum last:返回枚举类型中最后一个成员的值。
function enum next (int unsigned N=1):以当前成员为起点,返回后续第 N个成员的 值,默认是下一个成员的值;若起点为最后一个成员,则默认返回第一个成员的值。
function enum prv (int unsigned N=1):以当前成员为起点,返回前面第 N个成员的值,默认是前面一个成员;若起点为第一个成员,则默认返回最后一个成员的值。
function enum num:返回该枚举类型的成员数目。
function enum name:以字符串的形式返回该成员名字
字符串
Systemverilog引入了一个字符串类型 (string),它是一个大小可变、动态分配的字节数
组。在 verilog中,字符串文本为一个具有宽度为 8的整数倍的压缩数组。当一个字符串文
本被赋值到一个大小不同、整型压缩数组变量的时候,它或者被截短到变量的大小或者在
左侧填补0
内置方法
方法 | 描述 |
---|---|
str.len | 返回字符串长度,若为” “ ,则返回0 |
str.putc(i, byte c) | 将字节c写到str中的第i个字符处 |
str.getc(i) | 返回第i个字符的ASCII码,i<0或者大于str.len,则返回0 |
str.substr(i,j) | 返回字符串中由i到j组成的字符串,若i<0,j<i或者j>=str.len() ,则返回" " |
str.tolower | 将字符转换成小写 |
str.toupper | 转换成大写 |
string s
initial begin
s ="IEEE";
$display(s.getc(0));// I的ASCLL码为73
$display(s.tolower());//ieee
s.putc(s.len()-1,"-");//再e后面添加-
s={s, "P1800"};//拼接字符串,ieee-P1800
s.substr(2,5);//ee-p
end