当前位置: 首页 > news >正文

数字验证学习笔记——SystemVerilog芯片验证4 ——数据类型

1.结构体

Verilog 的最大缺陷之一是没有数据结构,在SV中可以使用struct语句创建结构,跟c语言类似。不过struct的功能少,它只是一个数据的集合,其通常的使用的方法是将若干相关的变量组合到一个struct结构定义中。
伴随typedef可以用来创建新的类型,并利用新类型来声明更多变量。

struct {bit [7:0] r ,g ,b ;} pixel; //创建一个pixel结构体

//为了共享该类型,通过typedef 来创建新类型

typedef struct{ bit [7:0] r,g,b; } pixel_s;
pixel_s my_pixel; //声明变量
my_pixel = '{'h10,'h10,'h10}; //结构体类型的赋值 非合并性数组用单引号赋值,就是地址是非连续性的

2.枚举类型

typedef enum{ INIT ,DECODE,IDIE} fsmstats_e; //默认 INIT 0 DECODE 1 IDIE 2
fsmstate_e pstate,nstate; //声明自定义类型变量
case(pstate)
IDIE:nstate =INIT;//数值赋值
INIT:nstate =DECODE;
defalult:nstate =IDIE;
endcase
$dispaly( " Next state is %s" ,nstate.name() ); //显示状态名
如果给nstate 直接用整数赋值 是否正确? 答:该赋值本身不合法
枚举类型可以直接赋值给整型(INT)
整型不可以直接赋值给枚举类型

3.字符串

所有与字符串相关的处理,都使用string来保存和处理。字符串的格式化函数即如何形成一个你想要的字符串句子,使用SV系统方法$sformatf()函数。

string    s;   // 初始为空“”
initial begin
         s=“IEEE ”;                            //5个字符,末尾加上一个空格
         $display(s.getc(0));      //显示 ‘I’  ,getc=getchar,返回byte
         $display(s.tolower( ) ); //显示ieee     tolower 转化为小写
         s.putc( s.len()-1,''-'');         //将空格转变为‘-’  IEEE-
         s={s,"P1800"};                  //"IEEE-P1800"
         $dispaly(s.substr(2,5));       //显示EE-P
         //创建一个临时字符串并将其打印
         my_log($sformatf(" %s  %5d"  ,s  ,42  ) );
         end
         task my_log(string message);  //打印消息
         $display( "   @%0t: %s", $time  , message );   //显示时间是%t
         endtask

相关文章:

  • 行为树BT设计与实现
  • 基于神经网络的指纹识别,指纹比对技术何时出现
  • 【图像分割】基于差分进化算法优化模糊熵实现多级图像阈值分割附matlab代码
  • LeetCode 0817. 链表组件
  • 27、Java——超市会员管理系统(对象+IO流)
  • 嵌入式分享合集74
  • 布尔模型,向量空间模型
  • 详解数商云采购协同系统供应商准入流程,加强汽修供应商管理革新企业采购渠道
  • 基于JAVA医护人员排班系统计算机毕业设计源码+系统+lw文档+部署(2)
  • Springboot 一个注解搞定返回参数key转换 【实用】
  • 【新手向】Rock5B启动fan接口并设置开机自启(pwm调速)
  • 史上最简SLAM零基础解读(7) - Jacobian matrix(雅可比矩阵) → 理论分析与应用详解(Bundle Adjustment)
  • 深度理解CNN中的感受野(大杀器)
  • Html实现简单的拖拉拽功能
  • Unity Addressables 热更新 基础
  • [译]CSS 居中(Center)方法大合集
  • 「译」Node.js Streams 基础
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 230. Kth Smallest Element in a BST
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • canvas绘制圆角头像
  • JS笔记四:作用域、变量(函数)提升
  • Js基础知识(四) - js运行原理与机制
  • oldjun 检测网站的经验
  • Vue官网教程学习过程中值得记录的一些事情
  • 从伪并行的 Python 多线程说起
  • - 概述 - 《设计模式(极简c++版)》
  • 给Prometheus造假数据的方法
  • 前端存储 - localStorage
  • 如何实现 font-size 的响应式
  • 项目实战-Api的解决方案
  • 用mpvue开发微信小程序
  • 智能合约开发环境搭建及Hello World合约
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • Prometheus VS InfluxDB
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #git 撤消对文件的更改
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (南京观海微电子)——COF介绍
  • (七)c52学习之旅-中断
  • (转)ObjectiveC 深浅拷贝学习
  • (转载)虚函数剖析
  • *2 echo、printf、mkdir命令的应用
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET Reactor简单使用教程
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • @property python知乎_Python3基础之:property
  • @Validated和@Valid校验参数区别