verilog中的数据类型
Verilog中的数据格式
1、基本概念
verilog中写一个数据的通用格式是 n'b000_000_···_000,表示一个n位的二进制数。基于这个通用式,可以将其分为三个部分:位数、加权数和实际数。改变位数自然可以改变该数的存储宽度。改变加权数则是改变数制。如使用b(二进制),d(十进制),h(十六进制)。八进制的表示没有注意过,用的也比较少,感兴趣可以去了解一下。改变实际数则是改变了数值的大小。这里可以推出申明常数的流程。先在内存确认空间。注意这里的长度都是基于二进制的。也好理解,毕竟存储在寄存器中的数据都是二进制的。而后确定描述形式。这个形式配合后面的实际数构成了这个数据的值。下面是几个例子:
1'b1;
2'd10;
3'hf;
4'b0001;
5'd32;
6'h3f;
在上面的几个数中,第一个是正确的。表示一位二进制1,第二个超出内存限制,实际值为2’d3。但是现在的编辑器会报错。编辑器可以将高位补0,但是不会承认溢出数据。其他几个也是采取同样的方法阅读。
接下来是几种简写的方式:
'b0001;
'd1000;
'hffee;
1;
2;
6;
前面三个数据省略内存申明,由具体的编译器补充。后面的则是默认32位十进制的数据。如果超出编译器则会拓展。
当然一般来说,只有十进制数一般不用于verilog中的数据赋值,而是用于判断语句或者位宽等值的使用。这样可以有效地分辨赋值数据的所在。至于第二种的缩写则是对于一些数据变化较大不好确认空间的数据。为什么会有常数数据变化呢?
这里常见的就是手动修改对应的数据大小。还有参数传递过程中也是有数据大小的变化的。
2、实际应用
在实际的运用中,有许多为了适应电路特性的编码方式。比较有名的是ASCII编码,BCD编码等方式。
其中ASCII码是8位宽的编码,也就是一个字节。在verilog可以直接使用" M "的方式表示M的ASCII码。
而BCD码则是一种无权码。其中常见的就是8421BCD码,就是使用四位表示0~9这10个十进制的数中的一个,然后拼接。简单理解,BCD,就是将一个十进制的每个权上的数取下来,由四位二进制表示,然后直接按照顺序拼接。感觉像将一列火车拆成一节一节,放在不同的轨道运行。
这也体现了BCD的优势所在,由于数字电路是支持位操作的,所以可以通过操作BCD码直接得到十进制数的高位的加减。这样可以避开不需要处理的低位数据。而缺点就是不能和十进制数据直接转化,需要经过二进制。具体举个例子:
8'd10+8'd20=8'd30;
{4'd1 , 4'd0} + {4'd2 , 4'd0 }={4'd3,4'd0}
上面的是十进制的加法,下面是BCD加法的示意图。对于我们来说,判断逻辑是一样的,就是从低到高开始加,依次判断本位值和进位值。这是全加器的思路。而对于BCD码而言,可以直接对应到需要操作的位数。比如这里是十位直接相加,个位保持不变。这就将8位全加器的工作转化为4位全加器。当然,BCD码并不是用于计算的,从这里也可以看到计算结果并不能直接使用,计算反而麻烦。这个例子只是说明BCD码的模型。
那BCD的优势在具体应用中的有何体现呢。
BCD的主要特点是无权。所以在设计中可以直接拼接,所以对于那些只需要表示而不需要大量计算的十进制转化为BCD可以有效地提高电路处理速度。
3、总结
了解BCD是比较重要的,可以提高设计的效率和可读性。
verilog中的数据类型的更多相关文章
- JavaScript 中的数据类型
Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...
- hibernate中java类的成员变量类型如何映射到SQL中的数据类型变化
hibernate映射文件??.hbm.xml配置映射元素详解--Hibernate映射类型 在从Hibernate的java的成员类型映射到SQL中的数据类型,其内映射方式它满足,SQL可以自己调制 ...
- js中的数据类型
JS中的数据类型: ——数字 (number)NaN ——字符串(string) ——布尔 (boolean)——函数 (function) 也是对象的一种 ——对象 (object) ...
- 如何判断js中的数据类型?
js六大数据类型:number.string.object.Boolean.null.undefined string: 由单引号或双引号来说明,如"string" number: ...
- system verilog中的跳转操作
在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...
- system verilog中的类型转换(type casting)、位宽转换(size casting)和符号转换(sign casting)
类型转换 verilog中,任何类型的任何数值都用来给任何类型赋值.verilog使用赋值语句自动将一种类型的数值转换为另一种类型. 例如,当一个wire类型赋值给一个reg类型的变量时,wire类型 ...
- 一段比较有意思的代码——介绍system verilog中的新增幅值语句
system verilog中新加了很多幅值语句,虽然都只适用于阻塞幅值,但是在某些场合中非常实用. 下面是一段有意思的代码,覆盖了一些用法. package definitions; typedef ...
- 如何判断js中的数据类型
如何判断js中的数据类型:typeof.instanceof. constructor. prototype方法比较 如何判断js中的类型呢,先举几个例子: var a = "iamstri ...
- c中的数据类型、常量、变量
一. 数据 1. 什么是数据 生活中时时刻刻都在跟数据打交道,比如体重数据.血压数据.股价数据等.在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据.图片数据.视频数据,还有聊QQ时产生的文 ...
- [转]如何判断js中的数据类型
原文地址:http://blog.sina.com.cn/s/blog_51048da70101grz6.html 如何判断js中的数据类型:typeof.instanceof. constructo ...
随机推荐
- windows网络流量监控
NPCap 官网 https://nmap.org/npcap/ 这是抓包必须先安装的工具,具体的原因可以看 https://github.com/buger/goreplay/wiki/Runnin ...
- 快速傅里叶变换(FFT)和小波分析在信号处理上的应用
1前言 1.1傅里叶变换 函数f(t)为一元连续函数,其傅里叶变换定义为: F(w)的傅里叶逆变换定义为: 其中,i为虚数单位.由欧拉公式: 任意绝对可积的连续函数f(t),都可以用三角函数表示,由于 ...
- 基于tensorflow的RBF神经网络案例
1 前言 在使用RBF神经网络实现函数逼近中,笔者介绍了使用 Matlab 训练RBF神经网络.本博客将介绍使用 tensorflow 训练RBF神经网络.代码资源见:RBF案例(更新版) 这几天,笔 ...
- CompletableFuture使用自定义线程池实现多任务结果聚合返回
为什么要使用自定义线程池? 默认线程池缺点 1.CompletableFuture默认使用的线程池是 ForkJoinPool.commonPool(),commonPool是当前 JVM(进程) 上 ...
- SpringCloud SpringBoot 组件使用:使用Nacos作为服务的注册中心和配置中心
基础篇 一.什么是Nacos? 官方介绍是这样的: Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现.服务配置管理.服务及流量管理. Na ...
- docker 常用命令 快捷命令
一.查询节点 docker ps -a 二.docker重启停止 systemctl restart docker systemctl stop docker docker restart * 三.一 ...
- iptables临时控制某ip访问权限
iptables -A INPUT -p tcp -s {src_ip} --dport 80 -j ACCEPT iptables -A INPUT -p tcp -s {src_ip} --dpo ...
- 编译静态库遇到的 LNK2019 报错
前文提到了 CMake 学习 文末基本涵盖了我遇到的编译问题,但是在得到一个编译好的 .lib 文件后,还需要放到项目中引用成功后才算真正的完成静态库的编译 嗯,我之所以说这些是因为我在项目中链接静态 ...
- Ansible Ad-hoc,命令执行模块
目录 Ad-hoc Ad-hoc简介 Ad-hoc命令说明 Ad-hoc示例 命令执行模块 1. command模块 2. shell模块 3. raw模块 4. script模块 Ad-hoc Ad ...
- Python输出日志信息
在Python中要输出日志信息有2种方式: 1.调用内置的print()方法,该方式只能将信息输出到控制台 2.使用logging模块将日志信息输出到文件中(logging模块默认也是输出到控制台:标 ...