【SystemVerilog】结构体真是太好用了~

news2025/1/13 3:15:29

前言

        Verilog最大的缺陷之一是没有数据结构。在SystemVerilog中可以使用struct创建结构,struct只是把数据组织到一起,是数据的集合,所以是可综合的。

        结构体是可以通过模块接口进行传递的,这就是本文想描述的内容。

一、结构体的创建

1.1使用typedef创建新的类型

        typedef语句用来创建新的类型。在verilog中,可以使用宏进行定,但是宏只是在做文本替换:

//老的verilog风格

`define OPSIZE 8

`define OPREG reg[`OPSIZE-1 :0]

1OPREG op_a op_b;

而在SV中,可以使用typedef,一般约定,所有用户自定义类型都带后缀“_t”。

//新的SystemVerilog风格

parameter OPSIZE =8;

typedef reg [OPSIZE-1 :0] opreg_t;

opreg_t op_a,op_b;

1.2使用struct创建结构体

通过struct把若干变量组合到一个结构体中

创建一个pixel类型

struct (bit[7:0]r,g,b)pixel;

上面的声明只是创建了一个pixel变量,要想在端口和程序中共享它,则必须创建一个新的类型:

typedef struct {bit[7:0]r,g,b;}pixel_s;
pixel_s my_pixel;

1.3合并结构体

  • 合并结构允许对数据在存储器中的排布方式有更多的控制。
  • 合并结构以连续比特集的方式存放,中间没有闲置的空间。
  • 当希望减少存储器使用或存储器的部分位代表了数值时,可以使用合并结构。
    在这里插入图片描述

二、结构体的使用

        这里我们举例说明,假设需要传输一组info信息,在verilog中我们通常使用不同的bit表示不同的信息:

reg  [INFO_WIDTH-1  : 0] xx_info;

assign xx_info_1 = xx_info[9:0];

assign xx_info_2 = xx_info[12:10];

assign xx_info_3 = xx_info[17:13];

assign xx_info_4 = xx_info[31:18];

        这样做,一是不够清晰直白,二是在修改的时候就比较麻烦,还需要维护一份资料,详细记录。曾接手一个项目,一些信号就这样存过来,存过去,bug一堆基本都是信号没对齐,没取到正确的数据导致的。

换SV来做的话,就可以使用结构体:

typedef struct packed{

logic   [9:0]   xx_info_1 ;

logic   [2:0]   xx_info_2 ;

logic   [4:0]   xx_info_3 ;

logic   [13:0]  xx_info_4 ;

}xx_info_t;

结构体直接在接口传输:

input  xx_info_t   xx_info;

assign xx_info_1 = xx_info_t.xx_info_1;

assign xx_info_2 = xx_info_t.xx_info_2;

assign xx_info_3 = xx_info_t.xx_info_3;

assign xx_info_4 = xx_info_t.xx_info_4;

如果是嵌套:

xx_info_4 = xx_info_t.xx_info_4_t.xx_info4;

        除了引用方便之外,结构体在仿真看波形的时候也特别好用,假设使用第一种Verilog的表示方法,我们只能截取特定bit位进行查看,而结构体则可以以一个集合的形式展现,双击直接就可以展开查看结构体内部各变量元素,同时可以通过参数定义,英文字母显示,debug时候比一堆数字好辨认的多~ 

        另外在使用的时候,建议单独建立一个结构体文件xx_struct.sv  ,然后在需要使用结构体的模块将这个文件包含进去就好。

更多内容: 绿皮书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1519706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

进程及进程状态

1.PCB及task_struct 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。 书上称之为 PCB ( process control block ), Linux 操作系统下的 PCB 是 : task_struct。 task_struct是PCB的一种。 task_struc…

MySQL教程-安装与卸载

MySQL官网 https://www.mysql.com MySQL 官方提供了两种不同的版本: 社区版 MySQL Community Server,免费,但不提供任何技术支持商业版 MySQL Enterprise Server,收费,官方可提供技术支持 本教程采用MySQL的社区版作…

看!Chat4.0如何看待AI与光纤资源管理软件的应用结合点及价值

问:你好,AI在光纤资源管理软件中有那些应用结合点,请详细描述应用结合点及价值? 答:AI在光纤资源管理软件中的应用结合点涉及多个方面,它们通过智能化的手段提高资源管理的效率和准确性。以下是一些关键的应用结合点及…

阿里云服务器centos安装msf教程

msf官方命令行一键安装 curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall 稍微等待几分钟即可安装成功&am…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Progress)

进度条组件&#xff0c;用于显示内容加载或操作处理等进度。 说明&#xff1a; 该组件从API version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Progress(options: ProgressOptions<Type>) 创建进度组件&a…

VGG网络的代码实现

VGG网络的程序实现完全根据配置表来实现。 全连接层之前的部分属于特征提取部分&#xff0c;后三部分全连接层用来分类。 1、模型 import torch.nn as nn import torch# official pretrain weights #预训练的权重下载地址 model_urls {vgg11: https://download.pytorch.org/…

使用opencv进行图片分析

opencv学习 一、配置环境并打开编译器 配置opencv在你的任意一个盘里创建一个专属于opencv的文件夹便于学习与整理 打开控制台winr输入cmd&#xff0c;进入后输入conda activate opencv&#xff0c;进入环境以后进入你所设置的opencv文件的盘&#xff0c;我的是D盘&#xff0…

fastreport循环数据表

1.创建数据源 2.将数据源关联到数据区 3.配置控件及属性 拖拽文本控件&#xff0c;设置文本控件的style属性为Data 4.比对效果 比对数据库和报表的数据一致。且循环显示。 数据库数据 报表展示数据

【Qt】从QMainWindow到UI框架

目录 简介UI布局元素Central WidgetMenu BarToolbarsStatus BarDock Widgets 参考文档 简介 如下图所示&#xff0c;我们常见的一些desktop软件&#xff0c;比如VS Code、Smart VCI等&#xff0c;一般都会包含顶部的菜单栏&#xff0c;底部的状态栏&#xff0c;以及一些其他UI…

工业制造领域系统:SCADA、PLC、DCS、MES、HMI、ERP等,一文秒懂

工业制造控制系统在工业制造领域起到了关键的作用&#xff0c;帮助企业提高生产效率、降低成本、提高产品质量和安全性。不同的企业根据自身需求和规模&#xff0c;可能会选择使用其中的一种或多种系统。 SCADA系统&#xff08;Supervisory Control and Data Acquisition&…

第2章 信息技术基础

本章学习要点 全面了解医院信息系统建设所涉及的主要信息技术以及这些技术的应用情况。 计算机与网络、信息技术与信息系统、数字媒体与数据存储技术、条形码(二维码)、RFID技术、云计算、APP技术 1.XML 可扩展标记语言与Access&#xff0c;Oracle和SQL Server等数据库不同…

什么软件可以剪辑录音?录音剪辑推荐3款工具

随着数字技术的发展&#xff0c;录音已经成为我们日常生活和工作中不可或缺的一部分。无论是会议记录、课堂笔记&#xff0c;还是音乐创作、语音聊天&#xff0c;我们都需要用到录音功能。然而&#xff0c;单纯的录音往往不能满足我们的需求&#xff0c;我们还需要对录音进行剪…

常用芯片学习——TP4057电源管理芯片

TP40578 500mA线性锂离子电池充电器 芯片介绍 TP4057是一款性能优异的单节锂离子电池恒流/恒压线性充电器。TP4057采用S0T23-6封装配合较少的外围原件使其非常适用于便携式产品&#xff0c;并且适合给USB电源以及适配器电源供电。 基于特殊的内部MOSFET架构以及防倒充电路&a…

图像处理与视觉感知---期末复习重点(3)

文章目录 一、空间域和频率域二、傅里叶变换三、频率域图像增强 一、空间域和频率域 1. 空间域&#xff1a;即所说的像素域&#xff0c;在空间域的处理就是在像素级的处理&#xff0c;如在像素级的图像叠加。通过傅立叶变换后&#xff0c;得到的是图像的频谱&#xff0c;表示图…

BMP280学习

1.Forced mode模式&#xff0c;单次采集后进入休眠&#xff0c;适用于低采样率。 2.normal mode模式&#xff0c;持续采集&#xff0c;我们使用这种 采集事件基本都是ms级&#xff0c;所以我们1s更新一次。 温度和压力的计算 #include <SPI.h> //定义数据类型 #define s3…

就业班 2401--3.12 Linux Day16 PXE布置——自动化装系统

什么是PXE&#xff1f; PXE&#xff0c;全名Pre-boot Execution Environment&#xff0c;预启动执行环境&#xff1b;通过网络接口启动计算机&#xff0c;不依赖本地存储设备&#xff08;如硬盘&#xff09;或本地已安装的操作系统&#xff1b;由Intel和Systemsoft公司于1999年…

2024/03/15(网络编程·day3)

一、思维导图 二、模拟面试题 什么是IP地址&#xff1f; IP地址是主机在网络中的唯一标识。 分为IPv4和IPv6&#xff0c; IPv4由4字节32位二进制数组成&#xff0c;通常使用点分十进制表示&#xff0c;例如192.168.117.85 &#xff0c;其中每个十进制数的范围都在0-255. IPv6由…

技术资讯:Volar正式更名为Vue-Official

大家好&#xff0c;我是大澈&#xff01; 本文约700字&#xff0c;整篇阅读大约需要1分钟。 关注微信公众号&#xff1a;“程序员大澈”&#xff0c;免费加入问答群&#xff0c;一起交流技术难题与未来&#xff01; 现在关注公众号&#xff0c;免费送你 ”前后端入行大礼包“…

2024年【广东省安全员C证第四批(专职安全生产管理人员)】考试总结及广东省安全员C证第四批(专职安全生产管理人员)模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 广东省安全员C证第四批&#xff08;专职安全生产管理人员&#xff09;考试总结是安全生产模拟考试一点通总题库中生成的一套广东省安全员C证第四批&#xff08;专职安全生产管理人员&#xff09;模拟试题&#xff0c;…

ArrayBlockingQueue与LinkedBlockingQueue底层原理

ArrayBlockingQueue与LinkedBlockingQueue底层原理 在线程池中&#xff0c;等待队列采用ArrayBlockingQueue或者LinkedBlockingDeque&#xff0c;那他们是怎么实现存放线程、阻塞、取出的呢&#xff1f; 一、ArrayBlockingQueue底层原理 1.1 简介 ArrayBlockingQueue是一个阻塞…