【sv中枚举类型与字符串语法学习】

news/2024/5/19 19:20:35 标签: 学习, verilog, systemverilog

文章目录

    • 枚举
      • 基本语法
      • 类型转换
      • 枚举类型内置方法
    • 字符串
      • 内置方法

枚举

基本语法

枚举类型可以用来声明一组整型的命名常量,定义具有强类型的枚举变量。枚举类型还可以使用枚举名字而不是枚举值来方便地引用或显示。当没有指定数据类型的时候,缺省的数据类型是 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

http://www.niftyadmin.cn/n/1788006.html

相关文章

20189221 2018-2019-2 《密码与安全新技术专题》第七周作业

20189221 2018-2019-2 《密码与安全新技术专题》第七周作业 课程&#xff1a;《密码与安全新技术专题》 班级&#xff1a; 201892 姓名&#xff1a; 郭开世 学号&#xff1a;20189221 上课教师&#xff1a;谢四江 上课日期&#xff1a;2019年5月21日 必修/选修&#xff1a; 选修…

模块(module), 程序块(program)的区别

文章目录moduleprogram注意点区别module 在verilog中&#xff0c;模块可以用来描述从简单的门元件到复杂的系统 &#xff08;例如一个微处理器&#xff09;的任何一种硬件电路。模块除了可以为硬件建模外&#xff0c;也可以用来封装验证平台&#xff0c;在模块内部&#xff0c…

IC笔试常见问题

文章目录什么是建立时间与保持时间&#xff1f;什么是竞争和冒险什么是亚稳态摩尔状态机和米勒状态机的区别什么是建立时间与保持时间&#xff1f; 建立时间(Setup Time)是指触发器的时钟信号上升沿到来以前&#xff0c;数据能够保持稳定不变的时间。输入数据信号应提前时钟上…

常见的idea问题记录

Information:java: javacTask: 源发行版 8 需要目标发行版 1.8 diamond types are not supported language level 5 按照如图设置即可解决问题 转载于:https://www.cnblogs.com/angleshoot/p/10976266.html

入门CMOS门电路

文章目录CMOS定义PMOS与NMOS两种MOS管的定义CMOS反相器用CMOS搭建逻辑门与非门或非门三态门CMOS定义 在CMOS集成电路中&#xff0c;以金属-氧化物-半导体场效应晶体管作为开关器件。这种器件简称MOS管。作为CMOS电路&#xff0c;具有功耗低&#xff0c;抗干扰能力强&#xff0…

jQuery内容

jQuery内容&#xff1a; 选择器筛选器样式操作文本操作属性操作文档处理事件动画效果插件each、data、AjaxjQuery对象 jQuery对象就是通过jQuery包装DOM对象后产生的对象。jQuery对象是 jQuery独有的。如果一个对象是 jQuery对象&#xff0c;那么它就可以使用jQuery里的方法&am…

dvt软件使用问题记录

首先将安装包解压缩到C:\dvt_eclipse&#xff08;或自定义路径&#xff0c;我解压缩到D&#xff1a;\dvt_eclipse&#xff09;&#xff0c;然后复制license.dat到刚刚定义的路径中设置环境变量&#xff1a; DVT_HOMEC:\dvt_eclipse DVT_LICENSE_FILEFLEXLM DVTLMD_LICENSE_FILE…

【不重叠序列检测-状态机方法实现】

文章目录题目描述解题思路&#xff1a;状态转移图dut和tb代码&#xff1a;波形图题目描述 编写一个序列检测模块&#xff0c;检测输入信号&#xff08;a&#xff09;是否满足011100序列&#xff0c; 要求以每六个输入为一组&#xff0c;不检测重复序列&#xff0c;例如第一位数…