企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] > # 枚举 枚举的缺省值为从0递增的整数。我们可以自定义枚举值。由于缺省值为0,因此在指定枚举值的时候一定要小心。 ``` //正确的指定方法 typedef enum {A=0,B,C} my_e; my_e position; //错误的指定方法 typedef enum {A=1,B,C} my_e; my_e position; ``` **sv提供了一些遍历枚举类型的函数:** * first():返回第一个枚举常量 * last():返回最后一个枚举常量 * next():返回下一个枚举常量 * next(N):返回以后第N个枚举常量 * prev():返回前一个枚举常量 * prev(N):返回前N个枚举常量 ## 遍历枚举成员 **例 : 遍历枚举成员** ``` module tb ; typedef enum { RED,BLUE,GREEN } color_e; color_e color; initial begin color = color.first(); do begin $display("color=%0d/%s",color,color.name); color=color.next; end while(color != color.first()); //环形贿赂绕回时即完成 end endmodule ``` 结果 ``` Start run at Nov 3 01:09 2020 color=0/RED color=1/BLUE color=2/GREEN ``` > # 字符串 **例 : 字符串基本操作** ``` module tb ; string s; initial begin s = "0YHp"; $display(s.getc(0));//显示第一个字符值 $display(s.tolower());//大写转小写 s.putc(s.len() - 1 ,"-");//'p'变为 '-' $display(s); $display({s,"1000"});// 0YHp-1000 $display(s.substr(1,3)); //显示 YH- //创建临时变量 my_log($psprintf("%s %5d",s,42)); #10; my_log($psprintf("%s %5d","hello",66)); end task my_log(string message); //把信息打印到日志 $display("@%0t: %s",$time,message); endtask endmodule ``` 结果 ``` Start run at Nov 3 01:21 2020 48 0yhp 0YH- 0YH-1000 YH- @0: 0YH- 42 @10: hello 66 ```