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

前言

        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.mzph.cn/news/747285.shtml

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

相关文章

uniapp实现点击标签文本域中显示标签内容

先上一个效果图 实现的效果有: ①.点击标签时,标签改变颜色并处于可删除状态 ②.切换标签,文本域中出现标签的内容 ③.点击标签右上角的删除可删掉标签,同时清除文本域中标签的内容 ④.可输入内容,切换时不影响输入…

C# Onnx C2PNet 图像去雾 室外场景

目录 介绍 效果 模型信息 项目 代码 下载 C# Onnx C2PNet 图像去雾 室外场景 介绍 github地址:https://github.com/YuZheng9/C2PNet [CVPR 2023] Curricular Contrastive Regularization for Physics-aware Single Image Dehazing 效果 模型信息 Model P…

‘sqlcmd‘不是内部或外部命令,也不是可运行的程序或批处理文件。

目录 一、问题 二、下载&安装sqlcmd 实用工具 三、验证 四、结果 一、问题 今天使用批处理文件执行SQLServer数据库的SQL语法时报错,提示sqlcmd不是内部或外部命令,也不是可运行的程序或批处理文件。,发生这个问题的原因是当前系统缺少…

基于udp协议的网络通信(windows客户端版+简易聊天室版),重定向到终端

目录 和windows通信 引入 思路 WSADATA 代码 运行情况 简单的聊天室 思路 重定向 代码 terminal.hpp -- 重定向函数 服务端 客户端 运行情况 和windows通信 引入 linux和windows都需要联网,虽然他们系统设计不同,但网络部分一定是相同的,所以套接字也是一样的 这…

matplotlib如何设置中文为宋体,英文为新罗马Times New Roman

问题描述 论文附图通常需要将中文设置为宋体,英文设置为新罗马字体(Times New Roman)。matplotlib中可以这样设置字体: plt.rcParams[font.sans-serif] [SimSun] plt.rcParams[font.sans-serif] [Times New Roman]但是这样设置…

7-Eleven用工数字化:零售哲学下的人效管理实践

2014年,一本《零售的哲学》在中国掀起热潮,揭示了7-Eleven便利店的新零售坪效管理秘诀。而对大部分零售企业来说,劳动力效率是坪效背后的主要支柱。近期,国内领先的劳动力管理云服务提供商盖雅工场发布了《聚焦人效、重塑组织&…

wps珠海市政府版本

功能 无广告,安装直接使用,word,excel,ppt功能齐全 步骤 双击exe文件,更改安装步骤即可,任意选择一个部门就可以了 获取资源 链接:https://pan.baidu.com/s/1IVfNVgLwsp5QBT2uX-yROQ?pwdme6f 提取码:me…

基于51单片机的微波炉温度控制器设计[proteus仿真]

基于51单片机的微波炉温度控制器设计[proteus仿真] 温度检测系统这个题目算是课程设计和毕业设计中常见的题目了,本期是一个基于51单片机的微波炉温度控制器设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】,赞赏任意文章 2&#xff…

嵌入式驱动学习第三周——container_of()宏

前言 Linux内核编程中,会经常看见一个宏函数container_of,那么这究竟是什么呢,本篇博客记录学习container_of的过程。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可…

Claude3 正式发布,支持多模态(附注册使用教程)

免费使用教程请看到最后!!!!! AnthropicAI 官推发布消息,正式推出Claude 3,沉寂了很久的Anthropic 终于亮剑放了大招。Claude 3 系列模型,包括Claude 3 Opus、Claude 3 Sonnet 和 C…

鸿蒙Next学习-Flex布局

Entry Component struct FlexCase {build() {//需要在构造参数上传Flex({ direction: FlexDirection.Row,justifyContent:FlexAlign.Center }) {//flex布局Row().width(100).height(100).backgroundColor(Color.Red)Row().width(100).height(100).backgroundColor(Color.Yellow…

L1-7 机工士姆斯塔迪奥【Java】

在 MMORPG《最终幻想14》的副本“乐欲之所瓯博讷修道院”里,BOSS 机工士姆斯塔迪奥将会接受玩家的挑战。 你需要处理这个副本其中的一个机制:NM 大小的地图被拆分为了 NM 个 11 的格子,BOSS 会选择若干行或/及若干列释放技能,玩家…

办公自动化的得力助手 —— 定时执行专家

目录 一、软件简介 二、办公应用场景 1、自动化文件处理 2、定时提醒与日程管理 3、网络操作与远程控制 4、系统维护与优化 三、使用体验 四、总结 在快节奏的现代办公环境中,如何高效地管理任务、节省时间并提升工作效率成为了每个职场人士关注的焦点。今天…

字符设备驱动编写

文章目录 环境一、添加驱动(/sys/bus/i2c/drivers/mpu6050_1)驱动和设备树扯上关系二、注册一个(种/类?)字符设备(/proc/devices,243 mpu6050_1)三、手动创建一个字符设备&#xff0…

web部署 三

案例: 1/在其中一个网站目录下创建\software文件夹,里面放txtppt/mp4/iso,文件类型。 2/web站点目录浏览启动应用。 3/用win10客户机浏览software目录下文件,并下载。txtppt/mp4/iso,发现问题并解决。 首先我们先建立一个software的文件夹并…

微服务初识

1.认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 1.1.单体架构 单体架构:将业务的所有功能集中在一个项目中开发,打…

力扣串题:反转字符串中的元音字母

​​​​​​​ 双指针&#xff0c;注意判断是否为元音的操作 bool IsVowel(char s){if(sa||se||si||so||su||sA||sE||sI||sO||sU) return true;return false; }char * reverseVowels(char * s){int len strlen(s),i0;while(i<len-1){if(IsVowel(s[i])&&IsVowel(s…

【C语言】五种方法实现C语言中大小写字母的转化

文章目录 &#x1f4dd;tolower/toupper函数&#x1f309;tolower&#x1f320; toupper &#x1f320; ASCII码关系&#x1f309;位操作&#x1f309;宏定义 &#x1f320;小巧第五位&#x1f6a9;总结 &#x1f4dd;tolower/toupper函数 &#x1f309;tolower tolower函数是…

YOLOv7改进 | 更换主干网络之PP-LCNet

前言:Hello大家好,我是小哥谈。PP-LCNet是一个由百度团队针对Intel-CPU端加速而设计的轻量高性能网络。它是一种基于MKLDNN加速策略的轻量级卷积神经网络,适用于多任务,并具有提高模型准确率的方法。与之前预测速度相近的模型相比,PP-LCNet具有更高的准确性。此外,对于计…

掘根宝典之C++普通迭代器和反向迭代器详解

简介 迭代器是一种用于遍历容器元素的对象。它提供了一种统一的访问方式&#xff0c;使程序员可以对容器中的元素进行逐个访问和操作&#xff0c;而不需要了解容器的内部实现细节。 C标准库里每个容器都定义了迭代器&#xff0c;这迭代器的名字就叫容器迭代器 迭代器的作用类…