(三)SV结构体、枚举类型、字符串

这篇具有很好参考价值的文章主要介绍了(三)SV结构体、枚举类型、字符串。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、结构体(struct)

1、SV结构体与C语言中结构体对应

struct student{ 
  int  num;
  char name[20];
  char sex;
};
struct student student1, student2;//先声明结构体类型再定义变量名,结构体定义变量

struct student{ 
  int  num;
  char name[20];
  char sex;
}student1, student2;//在声明类型的同时定义变量

struct 
{ 
  int  num;
  char name[20];
  char sex;
}student1, student2;//直接定义结构类型变量,即不出现结构体名。

说明:

  • student:结构体类型名,可以忽略不写的
  • student1, student2:结构体变量名
  • 内部的变量:成员变量名

 但常常用typedef来新定义类型,就是对其他类型取别名,方便定义变量,例如:

 typedef struct {bit [7:0] r, g, b;} pixel_s1;//pixel_s就是对struct {bit [7:0] r, g, b;}的别名

 typedef struct packed {bit [7:0] r, g, b;} pixel_s2;//压缩结构体

2、SV结构体分为非压缩结构体和压缩结构体

  • pixel_s1为非压缩结构体,pixel_s2为压缩结构体这与非合并数组、合并数组对应,他们在内存中存储方式不同,pixel_s1占用3(8bit)段不连续的存储空间(共24bit)(左图),pixel_s2占用1(24bit)段连续的存储空间(共24bit)(右图);
  • sv 结构体,SV学习,c++,c语言,数据结构,fpga开发,stm32sv 结构体,SV学习,c++,c语言,数据结构,fpga开发,stm32
typedef struct {
    bit [7:0] r;
    bit [7:0] g;
    bit [7:0] b;
} pixel_s;
pixel_s my_pixel; // 声明变量
    my_pixel = '{'h10, 'h10, 'h10}; //结构体类型的赋值
typedef struct packed{
    bit [7:0] r;
    bit [7:0] g;
    bit [7:0] b;
} pixel_s;
pixel_s my_pixel; // 声明变量
my_pixel = {8'h10, 8'h10, 8'h10}; //结构体类型的赋值
my_pixel = '{8'h10, 8'h10, 8'h10}; //结构体类型的赋值

说明:

  1. 上面代码,结构体赋值带单引号和不带单引号区别
  • 单引号作用:告诉后面的逗号把后面的值分成三部分赋值给结构体变量,无单引号为拼接符,若赋值时不写位宽,默认是32bit位宽,可能使赋值结果出现为0;压缩结构体复制与非压缩结构体赋值也有些区别

3、联合结构体

typedef struct packed{
	bit [7:0] r;
	bit [7:0] g;
	bit [7:0] b;
}pixel_rgb_t;

typedef struct packed{
	bit [15:0] y;
	bit [ 3:0] u;
	bit [ 3:0] v;
}pixel_yuv_t;

typedef union packed{
	pixel_rgb_t rgb;
	pixel_yuv_t yuv;
}pixel_t;

module test10;

	pixel_t     pixel_test	  ;
	pixel_rgb_t pixel_rgb_test;
	pixel_yuv_t pixel_yuv_test;
	
	initial begin
		
		pixel_rgb_test.r = 8'h88;
		pixel_rgb_test.g = 8'h99;
		pixel_rgb_test.b = 8'haa;
		$display("Color RGB is: R=%h G=%h B=%h ",
					pixel_rgb_test.r,pixel_rgb_test.g,pixel_rgb_test.b);
		pixel_yuv_test.y = 16'h88;
		pixel_yuv_test.u = 4'h9  ;
		pixel_yuv_test.v = 4'ha	 ;
		$display("Color YUV is: Y=%h U=%h V=%h ",
					pixel_yuv_test.y,pixel_yuv_test.u,pixel_yuv_test.v);
		pixel_test = 0;
		$display("Color RGB is: R=%h G=%h B=%h ",
					pixel_test.rgb.r,pixel_test.rgb.g,pixel_test.rgb.b);	
		$display("Color YUV is: Y=%h U=%h V=%h ",
					pixel_test.yuv.y,pixel_test.yuv.u,pixel_test.yuv.v);			
		pixel_test.rgb.r = 8'hBB;
		pixel_test.rgb.g = 8'hCC;
		pixel_test.rgb.b = 8'hDD;
		$display("Color YUV is: Y=%h U=%h V=%h ",
					pixel_test.yuv.y,pixel_test.yuv.u,pixel_test.yuv.v);		
		#100
		$finish;
		
	end
endmodule

说明:

  • 1、联合结构体关键字为union。
  • 2、联合结构体中每个结构体的总位宽要保持一致。
  • 3、联合结构体中的每个结构体共用每个bit位,只是解析方式不同

二、枚举类型(enum)

1、枚举类型同样与C语言中的对应,也具有上面结构那样的定义方式,默认值从0,1,2,n

同样经常用typedef来新定义枚举类型,例如:

typedef enum {INIT, DECODE, IDLE} fsmstate_e;
fsmstate_e pstate, nstate;  // 声明自定义类型变量

$display("Next state is %s", nstate.name()); // 显示状态名

.name()函数打印结果就是上述定义的INIT、DECODE,、IDLE

三、字符串(string)

1、字符串用string来定义声明

module test10;

	string s;
	initial begin
		s = "IEEE ";						
		$display(s.getc(0));               // 显示‘I’的ASCII码, 73. 
		$display("%s",s.getc(0));          // 显示‘I’ 
		$display(s.tolower());             // 显示 ieee 
		s.putc(s.len()-1,"-");             // 将空格变为‘-’ 
		s = {s,"P1800"};                   // "IEEE-P1800" 
		$display(s);                       // 显示 "IEEE-P1800"EE-P 
		$display(s.substr(2,5));           // 显示 EE-P  
		my_log($sformatf("%s %0d",s, 42)); // 创建一个临时字符串并将其打印 ,设置占用位宽为0
	end                                    
	
	task my_log(string message);
		$display("@%0t: %s",$time,message);// 打印消息
	endtask

endmodule

说明:

sv 结构体,SV学习,c++,c语言,数据结构,fpga开发,stm32

 

这两个函数就是整理字符串的格式,按照函数里给的格式,把相应的变量填进去。
$sformat和$sformat的不同点:文章来源地址https://www.toymoban.com/news/detail-615776.html

  • 1、$sformat()比s$stormatf()多了第一个参数,第一个参数就是放整理好的字符串的容器。$sformat()会直接把整理好的字符串放到第一个字符串类型的参数中。
  • 2、$sformatf()没有$sformat()第一个参数。$sformatf()返回的值就是整理好的字符串。
  • 3、$sprintf()函数与$sformatf()函数类似;

到了这里,关于(三)SV结构体、枚举类型、字符串的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • SV学习——数据类型(第二章)

    SV学习——数据类型(第二章)

    verilog有1995和2001版本,而SV是verilog的延伸,SV发布的时候直接就是3.0,之后可能不再存在verilog,而是统一用SV。SV是完全兼容verilog的。verilog文件以.v结尾,SV文件以.sv结尾。语法是全部兼容的,SV是verilog的扩展和延伸。 verilog中有reg和wire两种数据类型,都是四值逻辑 0,1,x,

    2024年02月10日
    浏览(16)
  • C++入门学习(十二)字符串类型

    C++入门学习(十二)字符串类型

    上一节(C++入门学习(十一)字符型-CSDN博客)中我们学到如何表示和使用一个字符串,本篇文章是字符串(多个字符)。 定义字符串主要有两种方式: 第一种: char str[] = \\\"win\\\";  //char 变量名[] = \\\"字符串\\\" 第二种: #include string string str1 = \\\"winner\\\"; / / 两种方式代码:  注意字符

    2024年01月23日
    浏览(13)
  • python教程 入门学习笔记 第6天 数据类型转换 字符串转换成数值 数值之间互转 其它类型转字符串

    s1=\\\"188\\\" #字符串 ns1=int(s1) #转换成整型数值 print(ns1+8) #打印数值结果 s1=\\\"3.14\\\" #字符串 ns1=float(s1) #转换成浮点型数值 print(ns1+3) #打印数值结果(数值结果为6.140000000000001,出现误差,后面讲解决办法) print(type(ns1)) #获取新数值的数据类型属性 z1=78 nz1=float(z1) print(nz1) #打印结果

    2024年02月14日
    浏览(29)
  • python常见的数据类型与数据结构(一)数字类型 字符串类型 布尔类型 列表 集合 字典 的定义与常规操作方法

    数字类型有int(整数),float(浮点数)和complex(复数型),其中int与float被大家所常用并且可以使用int()和float()函数相互转换。如果字符串只包含数字和小数点也可以被这两种函数强制转换。复数型,则少被人们使用,大都是用在数学公式和物理公式的计算上。 字符串类型较为简单

    2024年02月21日
    浏览(12)
  • python教程 入门学习笔记 第4天 数据类型 获取数据类型 字符串拼接

    数据类型 1、能直接处理的基本数据类型有5个:整型、浮点型、字符串、布尔值、空 1)整型(int)=整数,例如0至9,-1至-9,100,-8180等,人数、年龄、页码、门牌号等 没有小数位的数字,是整型 2)浮点型(float)=小数,例如金额、身高、体重、距离、长度、π等 精确到小

    2024年02月14日
    浏览(15)
  • SV芯片验证之数据类型(一)

    四值(四态)逻辑: 可以表示0(低电平)、1(高电平)、X(未知值、不定态)和Z(高阻值)四种值。有 logic、reg、integer、time、net-type(wire、tri) 。 注: 真实电路中并无X,它只是用来表示不确定的状态,即不确定它到底是0还是1,但它要么是0要么就是1,不存在所谓的“中间态”。 高阻态

    2024年02月09日
    浏览(11)
  • 【Python零基础学习入门篇③】——第三节:Python的字符串类型

    【Python零基础学习入门篇③】——第三节:Python的字符串类型

    ⬇️⬇️⬇️⬇️⬇️⬇️ ⭐⭐⭐Hello,大家好呀我是陈童学哦,一个普通大一在校生,请大家多多关照呀嘿嘿😁😊😘 🌟🌟🌟 技术这条路固然很艰辛,但既已选择,该当坚毅地走下去,加油! 🌤️PUA: ” 你所看到的惊艳都曾平庸历练 **“**🚀🚀🚀 🍉🍉🍉 最后让我

    2024年02月04日
    浏览(39)
  • unity的C#学习——数组、字符串和结构体

    数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。 所有的数组都是由 连续的内存位置 组成的。最低的地址对应第一个元素,最高的地址对应最后一个元素。 声明数组变量并不是声明 number0、number

    2024年02月10日
    浏览(9)
  • 如何从Java中的字符串值中获取枚举值

    说我有一个枚举,它只是 我想找到一个字符串的枚举值,例如 “A” 这将是 Blah.A。怎么可能做到这一点? Enum.valueOf() 是我需要的方法吗?如果是这样,我将如何使用它? 保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com 是的

    2024年02月16日
    浏览(14)
  • 【每日一题Day217】LC2451差值数组不同的字符串 | 枚举+变量记录

    给你一个字符串数组 words ,每一个字符串长度都相同,令所有字符串的长度都为 n 。 每个字符串 words[i] 可以被转化为一个长度为 n - 1 的 差值整数数组 difference[i] ,其中对于 0 = j = n - 2 有 difference[i][j] = words[i][j+1] - words[i][j] 。注意两个字母的差值定义为它们在字母表中 位置

    2024年02月07日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包