[Verilog] Verilog 数值表示

主页: 元存储博客

文章目录

    • 前言
    • 1. 整数表示
      • 1.1 整数数据类型
      • 1.2 整数转换函数
    • 2. 负数表示
    • 3. 实数表示
    • 4. 逻辑电平表示
    • 5. 逻辑值表示
    • 6. 字符表示法
    • 7. 字符串表示

前言

Verilog中,可以使用多种方式表示数值。

1. 整数表示

1.1 整数数据类型

基数格式共有四种,分别是十进制('d 或 'D),十六进制('h 或 'H),二进制('b 或 'B),八进制('o 或 'O)。数值可以指定位宽,也可以不指定位宽。

二进制表示法:以’b’或’B’为前缀,后跟一串0和1的数字序列。例如,4位宽的二进制数值可以表示为4’b1010。

八进制表示法 , 以’o’ 或 ‘O’ 为前缀, 如八进制数77, 8’o77。八进制数值77转换为十进制表示是63。

十进制表示法:直接使用十进制数字表示。例如,十进制数值23可以表示为8’d23, 也可直接用 23。

十六进制表示法:以’h’或’H’为前缀,后跟一串0-9和A-F的数字序列。例如,8位宽的十六进制数值可以表示为8’h7F。32’h3022_c0de // 32bit 的十六进制数值,下划线 _ 是为了增强代码的可读性。

整数表示法:使用整数变量声明和赋值。例如,使用整数变量n表示数值100可以表示为integer n = 100。

1.2 整数转换函数

Verilog提供了一些系统函数来处理整数。
$dec():将十六进制或二进制表示的整数转换为十进制数。
$bin():将十进制或十六进制表示的整数转换为二进制数。
$hex():将十进制或二进制表示的整数转换为十六进制数。

module integer_example;
  
  reg [7:0] binary_num = 8'b11001011;
  reg [15:0] decimal_num = 134;
  reg [7:0] hex_num = 8'hCB;
  
  initial begin
    $display("Binary number: %b", binary_num);
    $display("Decimal number: %d", decimal_num);
    $display("Hexadecimal number: %h", hex_num);
    
    $display("Decimal representation of binary number: %d", $dec(binary_num));
    $display("Binary representation of decimal number: %b", $bin(decimal_num));
    $display("Hexadecimal representation of decimal number: %h", $hex(decimal_num));
  end
  
endmodule
 

结果:

Binary number: 11001011
Decimal number: 134
Hexadecimal number: CB
Decimal representation of binary number: 203
Binary representation of decimal number: 10000110
Hexadecimal representation of decimal number: 86
 

2. 负数表示

在Verilog中,负数可以使用有符号二进制补码表示法表示。有符号二进制补码表示法中,最高位(MSB)用来表示符号,0表示正数,1表示负数。其余位表示数值部分。

在进行运算时,Verilog会根据这种表示法进行符号扩展和溢出处理。例如,如果要对两个8位的有符号数进行相加,Verilog会自动进行符号扩展和溢出处理,以保证运算结果正确。

在Verilog中,负数可以使用两种表示方式:补码和符号-数(Sign-Magnitude)。下面分别介绍这两种表示方式的实践。

符号-数表示法: 符号-数表示法是另一种表示负数的方法。在符号-数表示法中,最高位为符号位,0表示正数,1表示负数,其余位表示数值的二进制表示。

例如,假设我们要表示-5,将5的二进制表示为0101,然后将最高位改为1得到符号-数表示:1101。所以-5的符号-数表示为1101。

在Verilog中,可以使用固定位数的有符号数据类型(如reg signed)来表示符号-数。例如,可以声明一个8位有符号变量来表示-5:

reg signed [7:0] num; assign num = 8'sb1101;

补码表示法: 补码是最常用的表示负数的方法。在补码表示法中,最高位为符号位,0表示正数,1表示负数。补码的数值计算方式为:正数的补码与其本身相同,负数的补码等于其绝对值的反码加1。

例如,假设我们要表示-5,首先将5的二进制表示取反得到反码:0101 -> 1010,然后将反码加1得到补码:1010 + 1 = 1011。所以-5的补码表示为1011。

在Verilog中,可以使用固定位数的有符号数据类型(如reg signed)来表示补码。例如,可以声明一个8位有符号变量来表示-5:

reg signed [7:0] num; assign num = 8'sb1011;

需要注意的是,补码表示法在进行数值计算时更方便,因为在补码的加减运算中,可以直接按照二进制数的运算规则进行操作。而符号-数表示法在进行数值计算时需要进行额外的处理,如判断符号位并进行特殊计算。因此,在大多数情况下,补码表示法更常用。

3. 实数表示

Verilog中的实数可以用固定的点表示法或浮点表示法来表示。

固定点表示法使用一个固定的小数点位置来表示实数。例如,如果我们选择小数点在整数部分的最后一位后面,那么实数3.14就可以表示成314。在Verilog中,可以使用整数类型来表示固定点数,并使用一个参数来指定小数点的位置。

浮点表示法使用科学计数法来表示实数,包括一个尾数和一个指数。在Verilog中,可以使用实数类型来表示浮点数。

下面是一些示例,演示了如何使用固定点表示法和浮点表示法来表示实数:

使用固定点表示法:

parameter FIXED_POINT = 16; // 小数点的位置
reg [31:0] fixed_point_number;

initial begin
  fixed_point_number = 3.14 * (1 << FIXED_POINT);
  $display("Fixed point number: %d", fixed_point_number);
end
 

使用浮点表示法:

reg [31:0] float_number;

initial begin
  float_number = 3.14;
  $display("Floating point number: %f", float_number);
end
 

在Verilog中,实数类型使用32位浮点数表示,其中24位用于尾数,8位用于指数。因此,在浮点表示法中,实数的精度会有限。为了提高精度,可以使用更高位数的固定点表示法。

4. 逻辑电平表示

Verilog HDL 有下列3种基本的值来表示硬件电路中的电平逻辑:

0:逻辑 0 或 “假”
1:逻辑 1 或 “真”
z 或 Z:高阻

z 意味着信号处于高阻状态,常见于信号(input, reg)没有驱动时的逻辑结果。

5. 逻辑值表示

逻辑值可以用以下两个关键字来表示:

0(代表逻辑低,表示逻辑“假”或“假设”)
1(代表逻辑高,表示逻辑“真”或“成立”)
这两个关键字分别用于表示逻辑门的输入和输出值。在Verilog中,逻辑值可以用于描述和表达逻辑门的功能和行为。逻辑值可以用于逻辑门之间的连接,以实现数字电路的功能。
用逻辑值true和false来表示布尔数据。例如,真值true可以表示为1’b1。

6. 字符表示法

用ASCII码或Unicode编码表示字符数据。例如,字符’A’可以表示为8’h41’。

7. 字符串表示

字符串可以用字符串字面值表示,字符串字面值被包围在双引号(")或单引号(')之间。
使用双引号表示字符串:

module example;
  reg [7:0] data = "Hello";
  
  initial begin
    $display("%s", data);
  end
endmodule
 

使用单引号表示字符串:

module example;
  reg [7:0] data = 'Hello';
  
  initial begin
    $display("%s", data);
  end
endmodule
 

Verilog中还支持转义序列来表示特殊字符,如换行符(\n),制表符(\t),回车符(\r)等。

module example;
  reg [31:0] data = "Hello\nWorld!";
  
  initial begin
    $display("%s", data);
  end
endmodule
 

字符串"Hello\nWorld!“被赋值给32位寄存器data,当打印出来时,”\n"将被解释为换行符。
## 总结


参考文献


声明
本文仅为学习交流目的。
文中部分文字和图片来源于互联网,列在参考的文献,但可能有遗漏。如有侵权,请告知我删除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/253026.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

相机倾斜棋盘格标定全记录 vs200+opencv安装

论文参考是这个 Geiger A, Moosmann F, Car , et al. Automatic camera and range sensor calibration using a single shot[C]//Robotics and Automation (ICRA), 2012 IEEE International Conference on. IEEE, 2012: 3936-3943. 代码是这个github 花了一上午配好了c环境。。…

AAAI中稿心得

很幸运我们的一篇工作中稿了AAAI2024&#xff0c;题目是 Self-Prompt Mechanism for Few-Shot Image Recognition. 很高兴能在研二的上学期中稿一篇a会保底&#xff0c;也是我中稿的第一篇工作&#xff0c;成为我申请博士的资本。最重要的是&#xff0c;让枯燥无味的科研&#…

linux串口数据丢失--中断绑定CPU优化

问题现象 机器在户外测试时, 出现 轮速记 丢失的现象 小概率出现 50Hz丢失1~2帧极低概率出现 0.1~0.3秒内没有底盘数据 此问题导致slam定位漂, 需要优化处理. 验证与测试 问题1: 底盘串口 一个数据帧(head–data–crc) 被分片2~3报文 解决方法: 检测到head之后, 解析data…

机器学习--归一化处理

归一化 归一化的目的 归一化的一个目的是&#xff0c;使得梯度下降在不同维度 θ \theta θ 参数&#xff08;不同数量级&#xff09;上&#xff0c;可以步调一致协同的进行梯度下降。这就好比社会主义&#xff0c;一小部分人先富裕起来了&#xff0c;先富带后富&#xff0c…

03 使用Vite开发Vue3项目

概述 要使用vite创建Vue3项目&#xff0c;有很多种方式&#xff0c;如果使用命令&#xff0c;则推荐如下命令&#xff1a; # 使用nvm将nodejs的版本切换到20 nvm use 20# 全局安装yarn npm install -g yarn# 使用yarnvite创建项目 yarn create vite不过&#xff0c;笔者更推荐…

docker小白第五天

docker小白第五天 docker的私有库 有些涉密的信息代码不能放在阿里云的镜像仓库&#xff0c;因此需要构建一个个人内网专属的私有库&#xff0c;将镜像或者容器代码进行推送保存。 下载镜像docker registry 执行代码docker pull registry&#xff0c;用于搭建私服前的准备。…

Python异常值的自动检测实战案例

概要 在数据分析和机器学习中&#xff0c;异常值的检测是一个关键步骤&#xff0c;它有助于识别数据中的异常模式和离群点。本文将介绍Python中异常值检测的实战案例&#xff0c;使用一些常见的技术和库&#xff0c;为大家提供全面的示例代码和详细解释。 异常值的定义 异常值…

虚拟机下Ubuntu上网设置

文章目录 一、虚拟机上网的两种方式1.1 NAT模式&#xff08;Network Address Translation&#xff09;1.2 桥接模式&#xff08;Bridge Mode&#xff09;1.3 简介 二、实际配置2.1 NAT模式配置2.2 桥接模式配置 之前跟着博客配了好几个也没用&#xff0c;后来自己慢慢模式实践测…

HQL优化之数据倾斜

group by导致倾斜 前文提到过&#xff0c;Hive中未经优化的分组聚合&#xff0c;是通过一个MapReduce Job实现的。Map端负责读取数据&#xff0c;并按照分组字段分区&#xff0c;通过Shuffle&#xff0c;将数据发往Reduce端&#xff0c;各组数据在Reduce端完成最终的聚合运算。…

女生想通过培训转行软件测试类可行吗?

首先&#xff0c;女生转行IT行业做软件测试是可以的&#xff0c;因为软件测试岗&#xff0c;尤其是其中的功能性测试岗&#xff0c;入行门槛并不高&#xff0c;有很多女生在做&#xff0c;且我个人认为还蛮适合女生的&#xff0c;因为女生相对来说更细心&#xff0c;文档能力也…

PVE系列-防火墙的免费安静之旅IPfire

Ventoy一款引导盘可以引导各种启动盘安装盘的工具https://www.ventoy.net/cn/index.html 在它的兼容iso的列表 中发现了Ipfirehttps://wiki.ipfire.org/ &#xff0c;本来用着openwrt也挺好&#xff0c;忍不住的虚拟机尝了尝鲜&#xff0c;发现的功能有2&#xff0c; 安全吧&a…

植物分类-PlantsClassification

一、模型配置 一、backbone resnet50 二、neck GlobalAveragePooling 三、head fc 四、loss type‘LabelSmoothLoss’, label_smooth_val0.1, num_classes30, reduction‘mean’, loss_weight1.0 五、optimizer lr0.1, momentum0.9, type‘SGD’, weight_decay0.0001 六、sche…

06. Python模块

目录 1、前言 2、什么是模块 3、Python标准库模块 3.1、os模块 3.2、datetime 模块 3.3、random模块 4、自定义模块 4.1、创建和使用 4.2、模块命名空间 4.3、作用域 5、安装第三方依赖 5.1、使用 pip 安装单个依赖 5.2、从 requirements.txt 安装依赖 5.3、安装指…

DOM树和DOM对象与JS关系的深入研究

const和let使用说明 var不好用&#xff0c;我们如果用变量都是用let&#xff0c;如果用常量乃是不变的量&#xff0c;我们用const&#xff0c;见let const知变量是否可变。比如一个常量在整个程序不会变&#xff0c;但是你用let&#xff0c;是可以的。但是let最好与内部变量改…

Mybatis的插件运⾏原理,如何编写⼀个插件?

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

基于springboot实现的健身房管理系统

一、系统架构 前端&#xff1a;html | js | css | jquery | bootstrap 后端&#xff1a;springboot | springdata-jdbc 环境&#xff1a;jdk1.7 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 管理员-首页 03. 管理员-会员卡查询 04. 管理员-会员管理…

Zotero攻略

给大家分享一下我对于Zotero的使用。 1、下载链接 Zotero | Your personal research assistant 进入后直接下载即可 2、一些好用的插件 &#xff08;1&#xff09;Zotero Connector 下载地址&#xff1a;Zotero | Connectors 超级好用&#xff01;不用一篇一篇下PDF了&am…

mipi dsi协议DBI/DPI接口

MIPI dsi协议中的DBI/DPI接口主要用于主机和display设备之间的数据传输&#xff0c;说的更通俗一点就是DSI RX控制器和实际的显示面板之间的接口&#xff1b;dsi 协议spec中对DBI/DPI有描述&#xff1a; DSI协议中对DBI 接口模式命名为command mode operation&#xff0c;对DP…

QT5 CMake进行开发

配置环境 因为是使用CMake进行开发&#xff0c;所以推荐使用的QT版本是 5.14.2。因为楼主有 vs2015的环境&#xff0c;所以在安装QT时选择的是 msvc 2015 64bit msvc 2017 32bit 勾选了所有需要的模块。kit配置如下 图中画框的地方是比较关键的地方&#xff0c;1. 指定编译器…

【CMU 15-445】Lecture 12: Query Execution I 学习笔记

Query Execution I Processing ModelsIterator ModelMaterialization ModelVectorization Model Access MethodsSequential ScanIndex Scan Modification QueriesHalloween Problem 本节课主要介绍SQL语句执行的相关机制。 Processing Models 首先是处理模型&#xff0c;它定义…