Systemverilog枚举类型 ---转自ic designer
来源:互联网 发布:使命召唤9剧情知乎 编辑:程序博客网 时间:2024/06/05 06:11
Systemverilog枚举类型
又翻译了一片文章:
来源:http://systemverilog.co/wiki/Enumerations
枚举类型
目录Contents:
- 1枚举类型的声明
- 2将整数强制下转型为枚举类型
- 3将枚举强制上转型为整数类型
- 4枚举类型的方法
- 5参考文献
枚举类型的声明
类似C/C++,Systemverilog枚举类型提供了一种更严格的整数类型,属于基本整数类型(int)的子类型. 枚举变量的值只能是枚举声明类型的一种。
enum
{RED, GREEN, BLUE} color1, color2;
以上声明完成了两件事情。 (*)定义了RED, GREEN和BLUE分别为0,1,2.同时定义了变量color1和color2。这两个变量是强类型,只能取值0,1,2.
另外,Systemverilog允许用户定义枚举类型的基类型是2态或者4态整型。注意在C/C++中,不允许用户定义枚举类型的基类型,永远都是int.
enum
bit
[1:0] {RED, GREEN, BLUE} color1, color2;
//
4态枚举类型
enum
logic
[1:0] {IDLE, UNKNOWN=`x, TRISTATE=`z, S1=2`b01, S2=2`b10} state, next;
实际使用中,关键字enum几乎总是和typedef一起使用
typedef
enum
{RED, GREEN, BLUE} BasicColors;
可以通过name[N]或者name[N:M]自动定义枚举类型的索引范围,下列表格累出了枚举类型的各种格式:
语法说明name此name将和下一个整数值相关联name = Cname的值将和C关联name[N]name0..nameN的值和之后连续的整数相关联name[N] = C和以上相同,不过name0的值和C关联name[N:M]枚举值nameN..nameM,N可以大于M;也可以小于Mname[N:M] = C和以上相同,name0的值和C关联由于枚举属于整数类型,Systemverilog允许枚举变量声明为rand/randc. 当声明围randc的时候,尽量使用最少的bit数以提高效率[1]。这点注意看参考文献 。。
将整型向下转型到枚举类型
枚举类型是强类型,因此,枚举变量不能够被赋值为另一个整数类型值,除非显示的转型(静态转型或者动态转型)。静态转型不会去检查赋值是否满足枚举取值范围的限制范围,而动态转型会检查,除非很明确知道取值范围满足要求,否则请使用动态转型。
使用类型转换对枚举变量赋值
typedef
enum
{MON, TUE, WED, THU, FRI, SAT, SUN} Weekday;
Weekday day1 = WED;
// no type conversion required
day1 = 2;
// illegal type conversion
day1 = Weekday’(2);
// OK
day1 = Weekday'(10);
// legal out of range assignment forced by static cast
if
(! $
cast
(day1, 10))
// legal dynamic cast operation that wouldFAIL
$
display
(
"Dynamic cast operation FAILED"
);
将枚举类型向上转型到整形。
枚举类型和标准整数类型之间的互操作是合法的,不需要特别的语法。当参与运算的时候,枚举类型变量会自动向上转型成其他整数类型。
枚举类型的方法
函数名字说明first()返回枚举类型的第一个值last()返回枚举类型的最后一个值next(int N=1)枚举值加N,如果超过范围,将继续从第一个值开始prev(int N=1)枚举值减N,如果超过范围,继续回到最后一个num()返回枚举类型的取值个数name()返回枚举值对应的字符串
name()方法在打印调试信息时特别有用。
参考文献:
- ↑ Srinivas Venkataraman,VerificationOnWeb (VoW), 2009, "SystemVerilog tip: watch out enum and randc", 08-AUG-2010
- Systemverilog枚举类型 ---转自ic designer
- SystemVerilog——字符串类型 ---转自IC Designer
- SystemVerilog——容器类型(1):动态数组 ---转自ic designer
- 枚举类型入门(转载自IBM开发者)
- 字符串转枚举类型
- 转:枚举类型
- 字符串转枚举类型
- SystemVerilog中的$cast()向下类型转换
- Effective Java Item3:使用私有构造方法或者枚举类型实现单例(转自sunjavaduke)
- eCos学习笔记(转自suncilang.21ic.org)
- 关于嵌入式几个发展方向的前途【转自21ic】
- [转]枚举类型和枚举变量
- [转]枚举类型和枚举变量
- 字符串转枚举(两个枚举类型)
- 转:学习SystemVerilog的理由
- 【转】java枚举类型入门
- 【转】枚举类型的使用方法
- 枚举类型入门(转载自IBM开发者) 选择自 kalex 的 Blog
- GLSL. 语法基础
- 大数模板
- 嵌入式Web服务器
- vsftpd 入门
- Turbo C简单使用教程
- Systemverilog枚举类型 ---转自ic designer
- java内存分配机制
- 使用fastJSON
- iPhone CFSocketCreate的各字段含义
- jbpm几张表简单介绍
- 看门狗
- jbpm的简单例子
- 如何重启或关闭远程服务器
- 二句话就可治疗颈椎病