当前位置: 首页 > 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

相关文章:

  • 门户网站建设模板下载seo优化总结
  • 合肥网站建设王道下拉??网球新闻最新消息
  • 谷歌网站建设今日新闻最新消息50字
  • 顺德公司网站制作惠州seo管理
  • 网站可以做10000件事情吗软文代写是什么
  • 南京协会网站建设谷歌seo课程
  • 在一个成熟产品中,如何设计数据库架构以应对客户字段多样化,确保系统的可维护性、可扩展性和高性能。
  • androidx中<layout>根布局的意义及用法
  • 从UI设计到数字孪生:构建智慧城市的数据可视化体系
  • 百度中年危机:一场艰难的突围战
  • 解决uniapp vue3版本封装组件后:deep()样式穿透不生效的问题
  • ISP Pipeline(6): Color Filter Array Interpolation 色彩滤波阵列
  • 创客匠人解析视频号公私域互通逻辑:知识变现的破圈与沉淀之道
  • Pycharm无法运行Vue项目的解决办法
  • Qt实现tcp通信(QTcpServer和QTcpSocket的应用)详细教程
  • 智能客服三大模型解析:扩展问数量如何因架构差异撬动90%匹配率?
  • CentOS下Nginx服务器搭建全攻略
  • kotlin中::class.java的意义
  • 简单使用python
  • 【零基础学AI】第5讲:Pandas数据处理
  • CSMA/CD相关习题---谢希仁课后题
  • 【redis使用场景——缓存——数据过期策略 】
  • 国外开源客服系统chathoot部署,使用教程
  • Python实例题:基于 Flask 的博客系统
  • 人工智能编程三大核心流程详解--机器学习、神经网络、NLP自然语言处理
  • K8s: Kubernetes