闲庭信步使用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.pswp.cn/bicheng/86928.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86928.shtml

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

相关文章

前端进阶之路-从传统前端到VUE-JS(第一期-VUE-JS环境配置)(Node-JS环境配置)(Node-JS/npm换源)

经过前面的传统前端开发学习后,我们接下来进行前端的VUE-JS框架学习(写这篇文章的时候VUE-JS最新版是VUE3,所以默认为VUE3即可) 首先,我们要配置Node-JS环境,虽然我们还不学习Node-JS但是Node-JS可以快速配…

Requests源码分析:面试考察角度梳理

简单描述执行流程 🌟 Q:能简单描述一下发送一个requests.get(url)请求时,在requests库内部的主要执行流程吗?(从调用get方法到收到响应) 入口委托: get() 方法内部调用 requests.request(GET, url)。Session 接管: request() 方法会获取或隐式创建一个 Session 对象,并…

航天VR赋能,无人机总测实验舱开启高效新篇​

(一)沉浸式培训体验​ 在传统的无人机培训中,操作人员主要通过理论学习和简单的模拟操作来掌握技能。但这种方式存在很大局限性,难以让操作人员真正感受无人机在复杂环境下的运行状态。而航天 VR 技术引入到 VR 无人机总测实验舱后,彻底改变了…

Kotlin 函数与 Lambda 表达式

今天继续分享Kotlin学习内容。 目标:掌握函数定义、调用、参数传递,以及 Lambda 表达式的基础用法 1. 函数:Kotlin 的代码模块化工具 定义:函数是可重复调用的代码块,用于封装逻辑。 语法: fun 函数名(参…

[mcp-servers] docs | AI客户端-MCP服务器-AI 架构

链接:https://github.com/punkpeye/awesome-mcp-servers 服务器调用 相关专栏:实现Json-Rpc docs:精选MCP服务器资源列表 本专栏为精选 模型上下文协议(MCP)服务器的列表。 MCP 是一种标准协议语言,允许*…

1688商品发布API:自动化上架与信息同步

一、1688商品发布API的核心功能与技术架构 1.1 API功能全景 1688商品发布API是1688开放平台的核心组件之一,支持商品信息的自动化发布、编辑、上下架及库存同步。其核心功能包括: 商品信息管理:支持商品标题、描述、价格、库存、SKU&#…

如何在x86_64 Linux上部署Android Cuttlefish模拟器运行环境

0 软硬件环境 x86_64服务器Ubuntu20.04 LTS参考:Cuttlefish 虚拟 Android 设备参考: 笔记:搭建 Cuttlefish 运行环境可以下载编好的android-cuttlefish:android-cuttlefish.tar.gz 1 系统采用Ubuntu20.04 LTS 2 搭建cuttlefish…

机器学习9——决策树

决策树 Intro 归纳学习(Inductive Learning)的目标:从训练数据中学习一般规则,应用于未见过的数据。 决策树是一个树形结构,其中: 每个分支节点表示一个属性上的选择(即决策条件)。…

CppCon 2017 学习:The Asynchronous C++ Parallel Programming Model

清晰理解 Amdahl’s Law(阿姆达尔定律),这是一条描述并行计算加速能力的核心定律。 定义公式: S 1 ( 1 − P ) P N S \frac{1}{(1 - P) \frac{P}{N}} S(1−P)NP​1​ S S S:加速比(Speedup&#xff09…

60页PPT实战方案 | 大数据决策分析平台建设全流程路径图

目录 一、什么是大数据决策分析平台? 二、为什么要做大数据决策分析平台建设? 1. 数据已经成为“资源”,但多数组织还停留在“信息孤岛” 2. 管理复杂度上升,传统报表跟不上业务节奏 3. 外部环境不确定性高,倒逼企…

芯谷科技--降压型DC-DC转换器D4005

在现代电子设备中,电源管理芯片的性能直接关系到设备的稳定性和效率。D4005以其高效、稳定的性能和广泛的应用范围,成为众多工程师在设计电源方案时的优选。 产品简介 D4005 是一款高效降压型 DC-DC 转换器,具备固定 400KHz 开关频率&#…

【51单片机节日彩灯控制器设计】2022-6-11

缘由单片机节日彩灯控制器设计-编程语言-CSDN问答 #include "reg52.h" sbit k0P1^2; sbit k1P1^3; sbit k2P1^4; sbit k3P1^5; bit k0,kk0; void main() {unsigned char Xd0;unsigned int ys0; while(1){if(k00&&Xd0){kk0;kP31;while(k00);}if(k10&&…

PyEcharts教程(010):天猫订单数据可视化项目

文章目录 1、读取数据2、数据处理3、重复值查看4、缺失值查看5、PyEcharts可视化5.1 各个省份的订单量5.2 时间序列分析5.3 每天订单量统计可视化6、数据下载1、读取数据 1️⃣读取数据: import pandas as pd from pyecharts import options as opts from pyecharts.charts …

Redis 持久化之 AOF 策略

1. 什么是 AOF AOF 是 append only file,AOF 文件中记录了每次的操作指令,在启动 Redis 时,会将 AOF 文件中的数据读取出来以恢复数据。 2. 开启 AOF Redis 默认关闭 AOF,可以通过将 Redis 配置文件中的 appendonly 设置为 ye…

实现OFD转换PDF文件的实用方法

ODF格式的文件属于国内新型的文件格式,一般应用在保密等级比较高的系统或者单位中,比如一般政务方面或者法律行业经常会用到这种类型的文件,但是有些时候我们把文件分享给别人的时候别人不一定能打开,这时候就需要把OFD文件转换成…

JSON + 存储过程:SaaS 架构下的统一接口与租户定制之道

在多租户 SaaS 系统中,不同客户往往有差异化的业务逻辑、字段要求与流程规则。传统“统一模型 配置参数”的开发模式,虽然具有可控性,但在高度动态、合作多样化的场景下,逐渐暴露出扩展困难、上线周期长、定制成本高等问题。 随…

各种常用的串口助手工具分享

记录一篇常用串口工具的文章 工具的下载链接:https://download.csdn.net/download/m0_59415345/91204823?spm1001.2014.3001.5503 各工具的使用操作说明参考嵌入式hxydj博主的文章:https://blog.csdn.net/qq_20222919/article/details/117038284

AVL树的简洁写法

文章目录 零、写在前面一、AVL 树定义1.1 性质1.2 树高的证明 二、AVL树实现(AVL树实现名次树)2.1 节点定义2.2 左/右旋转2.3 zig-zag / zag-zig 双旋2.4 重平衡函数2.5 插入2.6 删除2.7 排名查询2.8 查前驱/后继2.9 查第 k 小2.10 完整代码 三、online …

红外图像增强(dde):基于“基础层-细节层”分解的增强算法

1、引言 与可见光图像相比,红外热成像捕捉的是物体表面的温度分布,其原始数据(通常为12位或14位)包含了极宽的温度动态范围。然而,人眼能够感知的灰度范围以及显示设备能够展示的灰度级(通常为8位&#xf…

Java-day28-其他流

1. 缓冲流 昨天学习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流。比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等。这些功能更为强大的流,都是在基本的流对象基础…