V0 第 6 节自定义类型

2023-12-10 19:38
文章标签 类型 自定义 v0

本文主要是介绍V0 第 6 节自定义类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.自定义类型

  • 通过用户自定义类型,以往Verilog的代码将可以通过更少的代码来表示更多的功能
  • 用户自定义类型使得代码的可读性更好
  • 通过typedef来创建用户自定义类型
  • 通过enum来创建枚举类型
  • 通过struct来创建结构体类型
  • Verilog语言无法提供方便的特性来使得用户扩展变量和线网类型
  • SV则提供了特性使得用户可以构建更高抽象层的数据类型
  • 定义了新的数据类型,就可以利用该类型声明变量

1.1 typedef创建用户自定义类型

例:

typedef unsigned int uint;
uint a,b;//声明2个无符号数变量
  • 为了使代码更容易读和维护,通常我们习惯添加 _t 的后缀用来表示它是一个自定义类型type

1.2 enum创建枚举类型

  • 枚举类型enum可以描述变量的合法值范围,其每一个值都需要提供一个用户自定义的名字
    例:
enum 
{red,green,blue
} RGB;
  • Verilog语言不支持枚举类型,使用宏来定义各个合法值的宏名称
  • 默认的枚举类型是int,即32位的二值逻辑数据类型
  • 为了更准确地描述变量,SV允许指明其数据类型
    例:
enum bit {TRUE, FALSE} Boolean;
enum logic [1:0] {WAITE, LOAD, READY} state;
  • 如果枚举类型变量被赋值,那么所赋的值应在其数值范围
  • Verilog或者SV可以在不同的数据类型之间通过隐性转换 ,进行直接赋值,因此Verilog/SV 的数据类型转换是宽松的

1.3 结构体类型

  • 设计或者验证的数据经常会有逻辑相关的数据信号组,例如一个总线协议的所有控制信号,或者在一个状态控制器中用到的所有的信号,Verilog语言没有方便的特性可以将相关的信号收集整理到一个信号组中
  • SV添加了同C一样的结构体struct,而结构体的成员可以是任何变量类型,包括自定义类型或者其它常量类型
struct 
{int a;int b;	// 32位变量opcode_t opcode;//用户自定义类型logic [23:0] address;//24位变量bit error;//1位变量
}Instruction_Word;
  • 结构体是变量的合集,因此结构体类型的变量也可以用来索引到其内部的变量,索引方式同C语言一致:
<structure_name>.<variable_name>
Instruction_Word.address = 32'hF000001E;
  • 结构体类型默认也是变量类型,用户也可以显式声明其为var或者wire类型
  • 结构体变量可以通过索引其各个成员做依次的成员赋值
  • 也可以通过分号’ 和花括号{}来实现整体赋初值
IW = '{100, 3, 8'hFF, 0};
IW = '{address:0, opcode:8'hFF, a:100,b:5};

这篇关于V0 第 6 节自定义类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/478143

相关文章

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

C# WebAPI的几种返回类型方式

《C#WebAPI的几种返回类型方式》本文主要介绍了C#WebAPI的几种返回类型方式,包括直接返回指定类型、返回IActionResult实例和返回ActionResult,文中通过示例代码介绍的... 目录创建 Controller 和 Model 类在 Action 中返回 指定类型在 Action

kafka自定义分区器使用详解

《kafka自定义分区器使用详解》本文介绍了如何根据企业需求自定义Kafka分区器,只需实现Partitioner接口并重写partition()方法,示例中,包含cuihaida的数据发送到0号分区... 目录kafka自定义分区器假设现在有一个需求使用分区器的方法总结kafka自定义分区器根据企业需求

python中的鸭子类型详解

《python中的鸭子类型详解》鸭子类型是Python动态类型系统的灵魂,它通过强调“行为”而非“类型”,赋予了代码极大的灵活性和表现力,本文给大家详细介绍python中的鸭子类型,感兴趣的朋友一起看... 目录1. 核心思想:什么是鸭子类型?2. 与“传统”静态类型语言的对比3. python 中无处不在

Java枚举类型深度详解

《Java枚举类型深度详解》Java的枚举类型(enum)是一种强大的工具,它不仅可以让你的代码更简洁、可读,而且通过类型安全、常量集合、方法重写和接口实现等特性,使得枚举在很多场景下都非常有用,本文... 目录前言1. enum关键字的使用:定义枚举类型什么是枚举类型?如何定义枚举类型?使用枚举类型:2.

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py