Verilog基础:表达式中的整数常量(integer)

news2024/11/30 14:36:49

相关文章

Verilog基础:表达式位宽的确定(位宽拓展)        

Verilog基础:表达式符号的确定

Verilog基础:数据类型

Verilog基础:位宽拓展和有符号数运算的联系

Verilog基础:case、casex、casez语句

Verilog基础:task和function的使用(一)

Verilog基础:task和function的使用(二)

Verilog基础:casex和full_case、parallel_case的使用

Verilog基础:表达式中的整数常量(integer)


       

        整数常量可以由十进制、十六进制、八进制或二进制格式指定。

        整数常量有两种表现形式。

        第一种表现形式是一个简单的十进制数,应指定为0到9的数字序列,可以选择在前面加上加号(+)或减号(-)一元运算符开头。例如8,12,15,-5,-9,-11等。

        第二种表现形式包含了最多三个标记:一个可选的位宽常数、一个跟着基数字符的单引号(这个必须要有,否则只能是第一种形式),以及表示数字值的数字。

        第一个标记是位宽常数,根据这个确切的常数指定了整数常数的位宽大小,这个常数的形式应该是非0的无符号十进制数。

        第二个标记是格式基数,应由一个不区分大小写的字母组成,该字母指定数字的基数,可选择在其前面加上单个字符s(或S)以表示有符号数,在其前面再加上单引号字符(')。合法的基数指定是d、D、h、H、o、O、b或B,分别表示十进制、十六进制、八进制和二进制的基。注意:字母和单引号之间不能有任何空白,即字母紧跟单引号。

        第三个标记是无符号数字,应包含对指定基数合法的数字(例如对于十进制,不能出现a-f的字母),第三个标记和第二个标记的字母间可以添加空格,十六进制使用到的a-f不区分大小写,可能使用到的x和z也不区分大小写。

        在第一种表现形式即不使用位宽和基数格式的简单十进制数被认为是有符号整数。

        在第二种表现形式中,如果使用s指示符,则第三个标记中的无符号数字被解释为有符号数,否则被解释为无符号数。s不影响第三个标记中数的指定,而只影响其解释。

        第二种表现形式的整数常数前面的加号(+)或减号(-)是一元运算符,第二个标记和第三个标记间的一元运算符是不合法的,如2'b-3是不合法的。

        在任何一种表现形式中,负数都是以2的补码形式表现的。

        在第二种表现形式中,x表示十六进制、八进制和二进制常量中的未知值(不能在十进制中使用,除非第三个标记中只有一个x或z表示所有位都是x或z),而z表示高阻值(它们都仅可出现在第二种表现形式)。x在以十六进制为基的数中设置4位为未知,在八进制中为3位,在二进制中为1位。类似地,z应将4位、3位和1位分别设置为高阻抗值。

        在第二种表现形式中,如果第三个标记中的无符号数字的位宽小于位宽常数指定的大小,则无符号数字会在左边填0直到大小吻合(这里并不会因为有s指示符而进行符号拓展),如果无符号数字的最高位是x或z,则会向左填充x或z;如果无符号数字的位宽大于位宽常数指定的大小,则应从左侧截断无符号数。、

        当在数字中使用时,问号(?)字符是z字符的Verilog HDL替代。

        除第一个字符外,下划线字符(_)在数字中的任何位置都是合法的,下划线字符可以忽略,它只是为了便于阅读,此功能可用于分解长数字。

        一个未指定位宽的整数常量(即第一种形式或没有指定位宽的第二种形式)的位宽应至少为32位(和integer相同)。

       注意:根据Verilog基础:表达式位宽的确定(位宽拓展)一文中的内容,所有的整数常量都会根据上下文环境位宽拓展至表达式的最大位宽,拓展规则根据RHS的内容(其中包括这个数的符号性)可以是补零拓展或符号拓展(这里的拓展和上面说的无符号数字的位宽小于位宽常数指定的大小而产生的拓展不一样,这个拓展是在其之后进行)。

        说了这么多,不如拿一些具体的例子来看。

例1 未指定位宽的整数常量(位宽至少和integer一样)

        659  // 第一种表现形式的简单十进制数
        'h 837FF // 第二种表现形式的十六进制数
        'o7460 // 第二种表现形式的八进制数
        4af // 非法(第二种表现形式的十六进制数需要'h标记)

        

例2 指定位宽的整数常量

        4'b1001 // 第二种表现形式的二进制数,位宽为4
        5 'D 3 // 第二种表现形式的十进制数,位宽为5
        3'b01x // 第二种表现形式的二进制数,位宽为3,最低位是x
        12'hx // 第二种表现形式的十六进制数,位宽为12,

                     x设置了低4位为x,所以会向左填充x直到12位
        16'hz // 第二种表现形式的十六进制数,位宽为16,

                     z设置了低4位为z,所以会向左填充z直到16位

例3 使用符号标记的整数常量(第二种表现形式)

        8 'd -6 // 虽然看起来这是-6的八位二进制补码,但这非法,负号不应该出现在这个位置
        -8 'd 6 // 这才是-6的八位二进制补码(但没有s指示符,这个补码会被解释为一个无符号数)
        4 'shf // 有s标记,后面的f被解释为四位二进制补码1111,即这个数是-1,数值上等同于-4'h 1 

                     但-4'h 1没有负数的性质
        -4 'sd15 // 有s标记,后面的15被解释为四位二进制补码1111,即表示-1,但前面又有负号,

                        所以会对补码1111整体取反加1(包括符号位),这可以得到-1相反数即1的补码,

                        所以结果是0001
        16'sd?   // 注意到之前所说的“不能在十进制中使用,除非第三个标记中只有一个x或z表示所

                        有位都是x或z”,所以这表示16位都为z,且被解释为有符号数

例4 符号性对计算的影响

        integer IntA;

        IntA = -12/3;// 因为integer是32位,-12、3和integer是一样的位宽,所以不会有位宽拓展发

                                生,-12、3都是有符号数,所以根据有符号数的除法计算结果为-4(以补码的

                                形式表现)

        IntA = -'d12/3; // 因为-'d12、3和integer是一样的位宽,所以不会有位宽拓展发生,-'d12是无

                                  符号数,所以除法按照无符号数的规则进行,'d12即0000...0001100(32位),

                                  负号表示求-12的32位补码即二进制数11111111111111111111111111110100,

                                  十进制表示为4294967284,除以3得到舍去小数的结果1431655761

        IntA = -'sd12/3; // 这和IntA = -12/3同理,-'sd12取得了-12的32位补码,且因为s,这解释为有

                                    符号数-'sd12、3都是有符号数,所以根据有符号数的除法计算结果为-4

                                  (以补码的形式表现)

        IntA = -4'sd12/3; // -4'sd12即-4'sb1100,即-4的补码,有负号即表示4的补码,所以1100取反

                                      加1,相当于4'sb0100,按照有符号数的除法,4/3=1,结果为1

        总结:s指示符只影响符号性,从而影响了计算是以有符号的形式还是无符号的形式,负号就是把第三个标记处的无符号数字当做有符号数,然后求其相反数的补码,通俗理解就是把第三个标记处的无符号数字整体取反加一(因为一个数相反数的补码,等于这个数的补码整体取反加一,包括符号位)。

想要符号数运算更深入的了解,可以看这篇Verilog基础:位宽拓展和有符号数运算的联系

想知道运算是以有符号数还是无符号数进行,可以看这篇Verilog基础:表达式符号的确定

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

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

相关文章

chatgpt赋能python:Python如何Input一个字典:详细教程

Python 如何 Input 一个字典:详细教程 在 Python 中,字典是一种非常有用的数据结构。它可以存储键值对,让我们能够通过键访问值。Python 中没有固定的语法来创建字典,因此本文将教你如何输入一个字典。 什么是字典? …

chatgpt赋能python:Python语言中的Pandas库介绍

Python语言中的Pandas库介绍 Python语言是一种十分流行的编程语言,以其易读易写等特点而受到工程师和数据科学家的青睐。在Python语言中,有一款非常流行的数据处理和分析库,也就是Pandas库。Pandas库在数据处理和分析方面有着出色的表现&…

iOS开发最佳实践|集成声网SDK实现语音聊天室

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️, 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想当开发的测试,不是一个好…

初探Sharding-JDBC订单表分片实现

设计订单系统有两个数据库db_order_01和db_order_02。每个数据库分别有t_order_0和t_order_1两张订单表。 订单表设计有订单ID(order_id),用户ID(user_id),商户ID(merchant_id)。假设商户查看订单操作要比用户查看订单的操作更加频繁。避免商户查询订单时…

NLP学习笔记五-simple RNN

NLP学习笔记五-simple RNN 我这个学习笔记,感兴趣的小伙伴,看的时候尽量从头开始看,这样更好理解,也更有收获。 simple RNN的单元结构图如下: 其中A就是我们需要学习的参数矩阵, h t − 1 h_{t-1} ht−1​…

【MySQL数据库 | 第十五篇】事务

目录 前言: 介绍事务: 控制事务: 事务四大特性: 并发事务问题: 事务隔离级别: 总结: 前言: 这章我们将进入到MySQL基础篇的最后一章:事务,希望大家可以坚持下去&#xf…

车间如何做好“生产计划”,打造高效运营的智能工厂

新形势下,面对外部不断变化的市场需求、供应链下游企业管理升级需求以及持续上涨的人力成本,传统工厂模式必须要变革才能更好地发展。热潮之下,企业纷纷规划建设智能工厂。那么,新工厂规划如何避免投入浪费,少走弯路&a…

Linux——进程间通信,信号量的使用+小demo(C语言)

一.什么是信号量呢?用途又是什么呢? 信号量就是解决进程之间竞争资源的情况,比如:我们在宿舍用的公共洗衣机,我们只有当它空闲的时候,我们才可以去使用它,当别人看到洗衣机在使用的时候&#xf…

LVS负载均衡群集部署(DR模式)

一.DR模式 LVS负载均衡群集部署 ipvsadm 工具选项说明: 工具选项作用-A添加虚拟服务器-D删除整个虚拟服务器-s指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc)-a表示…

clickhouse-MergeTree

创建建表语句 create table t_order_mt(id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime ) engine MergeTreepartition by toYYYYMMDD(create_time)primary key (id)order by (id,sku_id); 插入测试数据 insert into t_order_mt(id,sku_id,total_…

chatgpt赋能python:Python数据分析必备工具:Pandas

Python数据分析必备工具:Pandas Python作为一门流行的编程语言,广泛应用于数据科学领域。而Pandas作为Python语言下的数据分析库,被广泛地应用于数据处理、数据分析、数据可视化等方面。本文将介绍如何快速地入门Pandas并进行数据分析。 什…

《统计学习方法》——逻辑斯谛回归与最大熵模型(下)

最大熵模型 极大似然估计 下面证明对偶函数的极大化等价于最大熵模型的极大似然估计。 极大似然估计的思想就是通过概率最大化来求出最符合的分类。对应的步骤为: 根据训练集,写出不同分类下的概率函数将不同分类下的概率函数进行汇总,写…

[hsctf 2023] crypto,pwn,rev部分

刚完了天津又来个衡水,这个大部分题比较简单,最后两天整了3个crypto有点意思. crypto double-trouble 给了密文 Hvwg gvcizr bch ps hcc vofr. Wb toqh, W kwzz uwjs wh hc mci fwuvh bck! Hvs tzou wg hvs tczzckwbu: OmqemdOubtqdeMdqOaax Vcksjsf, wh wg sbqcrsr gc mci …

刷脸登录(人工智能)

刷脸登录 理解刷脸登录的需求 理解刷脸登录的开发流程实现刷脸登录功能 浅谈人工智能 人工智能的概述 人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门…

chatgpt赋能python:Python怎么下pip:简单又方便的工具

Python怎么下pip:简单又方便的工具 Python 是一门广泛应用的高级编程语言,它设计的初衷是让程序员更加愉悦地编写代码,同时提供了多种强大的库和框架。其中,pip 是最为常见的第三方包管理工具,本文将为你介绍如何下载…

uniapp实现主题切换功能实现第一种方式(scss变量+vuex)

随着用户端体验的不断提升,很多应用在上线的时候都要求做不同的主题,最基本的就是白天与夜间主题。 就像b站app主题切换,像这样的 uniapp因为能轻松实现多端发布而得到很多开发者的青睐,但每个端的实现也有可能不同,现…

NLP学习笔记四-word embeding

NLP学习笔记四-word embeding word embeding就是一块重头戏了,因为这里做完,我们的数据处理部分也基本上收尾了。 下面我们附上一张图: 如上图,word embeding实在我们one-hot word之后才可以进行的,每一步处理技术都是…

NVM安装(管理Node.js版本)

NVM可以在一台电脑上安装多个版本Node.js,并且可以一条指令随时下载或切换版本 下载安装 github下载地址:https://github.com/coreybutler/nvm-windows/releases 一路next,注意修改安装路径即可(不要安装在有中文名称的目录下&am…

Latex图表制作:关于EPS文件转PDF文件及PDF裁剪自动化的Shell脚本制作

关于EPS文件转PDF文件及PDF裁剪自动化的Shell脚本制作 前言一、EPS文件转PDF文件1. 过去的科研绘图方案2. 未来的科研绘图方案 二、使用步骤1. 单例操作a. 安装epstoolb. 切除EPS文件白边并保存临时EPS文件d. 将EPS文件转换为PDF文件 2. 批处理操作a. Shell 脚本b. 使用说明 参…

贝叶斯公式的理解与推导(简单版本)

院子里面有条狗,过去几十年中,平均100天狗会叫50天,平均100天被偷盗一次,偷盗时有90%概率狗会叫,请问当狗叫的时候,是小偷入侵的概率有多大? 分析: 狗叫为独立事件A,偷盗…