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

闲庭信步使用SV搭建图像测试平台:第十三课——谈谈SV的数据类型

 (本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真,大大降低了初学者的门槛!!!!如需要该系列的工程文件请关注知识星球:成工fpga,https://t.zsxq.com/DMeqH关注即送200GB学习资料,链接已置顶!)

成工有个强迫症,就是要求工程的 编号和文章的编号能对应上,由于上篇的package有单个package和多个package,工程是有两个,但是成工在一篇文章中写完了。如果继续往下写,后面的文章和工程就会错位,这是成工不能容忍的,所以增加一课,来谈谈SV的数据类型。

其实看前面几篇相应的工程,有心者应该能发现成工在使用数据类型的变化,在逐渐由verilog向system verilog转变。不信的话可以看看第一个工程的数据类型,变量用的是interger和reg。

再看看最近工程数据类型的使用,int,logic,bit,int unsigned。

很多人可能一头雾水,到底什么时候应该使用什么数据类型呢?有疑问其实就是考点,FPGA测试岗位的面试,数据类型的使用是必问的。

也不要急于一时,我们还是先从verilog的数据类型讲起。其实verilog提供了两种基本的数据类型,那就是变量类型和线网类型,在RTL开发过程中,用的最多的就是reg和wire,其实分别就是变量类型和线网类型。其实变量类型还有integer,time等等,主要用来存储组合逻辑或者时序逻辑。而线网类型除了wire,还有wor,wand等,用的比较少,主要用来连接功能模块,当然也可以用来实现组合逻辑,比如wire类型数据可以用assign来实现组合逻辑。

但是有一点需要注意,verilog的数据类型,不管是变量类型还是线网类型,都是四值逻辑的,也就是说,verilog中所有数据的每一位,都有0,1,X和Z四个值可取。所以严格的来说,verilog并没有区分信号的类型,因为所用的数据都是四值逻辑。

而system verilog在verilog的基础上添加了很多新的数据类型,大大方便了FPGA的设计和验证,最主要的是SV将硬件信号区分为类型和数据类型。

SV的信号类型和verilog一样也是分为变量类型和线网类型。而数据类型则分为四值逻辑(logic)和二值逻辑(bit)。

其实大家都知道,数字信号一般就两种状态,那就是0和1,而为了硬件仿真的功能,增加了未知状态X和高组态Z,比如一个信号没有任何的输入驱动,处于悬空状态,那就是Z;而一个信号在某个时刻可能是0也可以是1,那就是未知状态X。但是如果是不涉及硬件的功能仿真测试,是没有必要使用X和Z两张状态的,这时候使用二值逻辑不仅可以节约内存,还可以加快仿真

回到SV的信号类型常用的变量类型reg和常用线网类型wire依然可以使用,也就是说用verilog写的.v文件直接改成.sv文件可以直接进行综合和仿真。但是在SV中,用的最多的信号类型是logic,就是不管是变量还是线网,都可以使用logic。当然信号声明成logic类型,默认是表示变量类型,用户可以直接在logic前加var或者wire声明信号的类型,var logic就是变量类型,wire logic就是线网类型,但是一般我们不会如此声明信号。

下面我们对数据类型按照四值逻辑和二值逻辑进行分类:

四值逻辑:wire,reg,logic,integer,tri;

二值逻辑:bit,byte,shortint,int,longint。

其实数据可以是有符号数也可以是无符号数,进一步分类:

有符号数:integer,byte,shortint,int,longint;

无符号数:wire,reg,logic,tri,bit。

上面的数据分类是面试的考点,其实挺好记的,四值逻辑除了integer一般都是无符号数而integer和int一看就是同一类的,都是有符号数。二值逻辑除了bit一般都是有符号是,这个更好理解了,bit就一位,如果是符号位就不用表示其它的了。当然有符号的数据类型也可以用来定义无符号的信号,加上unsigned即可。

有了上面的分析,我们来总结一下什么时候使用什么数据类型。如果使用SV设计可综合的RTL代码,基本使用logic即可。如果使用SV进行非硬件的功能仿真测试,可以多使用二值逻辑。当然这个不是绝对的,还有考虑个人的喜欢,比如成工就是喜欢用logic而不是reg和wire,喜欢用int而不是integer。

举个例子,RGB每个通道的每个图像数据都是8bit的无符号数,那我们可以用四值逻辑logic [7:0]来定义,也可以使用二值逻辑bit [7:0]来定义,当然也可以使用二值逻辑byte unsigned来定义,形式可以多样,只要功能正确就可以。

最后说一点,就是一个文件中使用了四值逻辑和二值逻辑,要注意交互信号的相互转换,不然可能会出现意想不到的错误,后续成工会用实例的说明。这儿仅仅需要先记住一点,那就是四值逻辑的X和Z都会转换成二值逻辑的0

http://www.lryc.cn/news/575543.html

相关文章:

  • 微信小程序<rich-text>支持里面图片点击放大
  • react-嵌套路由 二级路由
  • python 爬虫 下载视频
  • C++ 中 enum 语法
  • 【模拟】N 字形变换(medium)
  • 2025最新Tomcat 安装教程(保姆级,图文讲解,带安装包)
  • Django 零基础起步:开发你的网站第一步
  • 供应链管理:供应链计划主要计算公式/方法
  • 独立开发还能做吗
  • 用户统计-01.需求分析和设计
  • 机器学习基础:概念、算法与实践入门
  • 酒店智能门锁系统常见问题解决方法——东方仙盟
  • MyBatis-Plus - 条件构造器Wrapper
  • Socket 编程 TCP
  • Linux 和 Windows 服务器:哪一个更适合您的业务需求?
  • 通信网络编程4.0——JAVA
  • Java+LangChain实战入门:深度剖析开发大语言模型应用!
  • ArrayList和LinkedList详解
  • WPF 实现自定义弹窗输入功能
  • Spring Boot 项目中同时使用 Swagger 和 Javadoc 的完整指南
  • Redis核心知识详解:从全局命令到高级数据结构
  • 数据结构-第二节-堆栈与队列
  • python打卡day56@浙大疏锦行
  • 学习昇腾开发的第9天--在Ubuntu下安装ffmpeg4.2.11
  • php项目部署----------酒店项目
  • Docker数据管理——AI教你学Docker
  • Redis-set集合
  • C++ 第三阶段:语言改进 - 第四节:nullptr vs NULL
  • 基于Spring Boot 构建现代化短视频平台:HBC Video全栈开发实战
  • 《高等数学》(同济大学·第7版)第九章 多元函数微分法及其应用第二节偏导数