珠海网站建设/互联网广告平台排名

珠海网站建设,互联网广告平台排名,网络设计课程什么专业有学,b2b典型电子商务平台在FPGA设计中,一般的算数运算符都是按照无符号数进行的。那么需要有符号数计算的时候,该怎么办呢? 很久很久以前也就是Verilog-2001还没有出现时,是手动操作的,也就是说,对于一个8位的无符号数&#xff0c…

在FPGA设计中,一般的算数运算符都是按照无符号数进行的。那么需要有符号数计算的时候,该怎么办呢?

很久很久以前也就是Verilog-2001还没有出现时,是手动操作的,也就是说,对于一个8位的无符号数,比如reg [7:0] a; 我们手动把最高位当做符号位,剩余的7位则是数值位,整个二进制以补码的形式表示。这个时候进入的二进制以补码的形式表示,出来的二进制也以补码的形式表示,在查看波形时,也以补码的形式查看。总之,里面涉及到的二进制、二进制运算,都是基于二进制补码的这个编码形式。这个时候,这个模块里面的变量、要处理的数都是有符号数,不要添上与无符号相关东西了,容易乱。无符号数的数据流想要进入这个模块,得先经过补码编码后再输进来。

后来,Verilog-2001出现了,当我们想处理有符号数时,再也不用我们手动认最高位了,因为这个时候的Verilog被定义得很“智能”了。是有符号还是无符号,就要看变量有没有signed的声明了。意思就是说,一个数进来,比如说8位,如果是 reg [7:0] a; 那么a就会被识别为无符号的8位数。如果是reg signed [7:0] a; 那么a就会被识别为有符号数,并且是识别为8位的二进制补码。所谓的signed只有在参与运算的过程中才会有作用,再连线方面或是其他方面,没有任何作用,因为都是补码。

在Verilog-2001出现之后,一个模块中出现有符号和无符号的处理问题也不大了,因为Verilog 2001提供了 s i g n e d ( ) 及 signed()及 signed()signed()机制,能够进行有符号与无符号之间的转换(然而我还是不建议一个模块里面同时处理有符号和无符号的数据)。

尽量不要使有符号数与无符号数进行混合计算。因为只要有一个无符号数的运算单元,整个算式将被将成无符号数进行计算。
  
下面是例子:

例子1:

input signed [7:0] a, b;
output signed [15:0] o;
assign o = a * b;

上面输入两个有符号数a和b,这两个数都将被识别为二进制补码(我们在查看波形的时候,也应该以补码的形式查看)。这两个数进行有符号数的乘法运算,得到的自然也是有符号数的积,因此这里的输出也定义为有符号数。从这个例子中我们可以看到,操作数变量被定义为有符号数,那么操作的结果变量也应该被定义为有符号数。

例子2:
input [7:0] a, b;
output [15:0] o;
wire signed [15:0] o_sgn;
assugb o_sgn = $signed(a) * $signed(b);
assign o = $unsigned(o_sgn);

例子2中,输入的是两个无符号数,输出也定义为无符号数。然而,(假设)应用时,发现只有一个有符号的乘法器可以使用,这个时候就要用Verilog中的signed()及 s i g n e d ( ) 机制 . 首先使用 signed()机制.首先使用 signed()机制.首先使用signed()把输入变成有符号数,同时定义一个有符号的中间结果,这样子就可以使用有符号的乘法器进行运算了。最后使用$unsigned()把有符号的中间结果转换为无符号输出。

例子3:

input signed [7:0] a, b;
input signed [8:0] o;
assign o = a + b; // Verilog会自动进行符号的扩展。

Verilog-2001会自动扩展符号位。意思是说,当我们进行有符号数进行运算的时候,我们不要手动转换符号位了,Verilog会自动识别最高位为符号位,同时在运算过程中会自动进行符号位的扩展。因此,正负号的扩展时,应多加利用Verilog的implicity signed extension,避免手动进行转换。

例子4:

input [7:0] a;
input signed [7:0] b;
output signed [15:0] o;// Don't do this: assign o = a * b;
// The $signed({1'b0, a}) can convert the unsigned number to signed number.
assign o = $signed({1'b0, a}) * b;

上述代码中,输入a被识别为无符号数,而输入b则被识别为二进制补码,输出则被定义为二进制补码输出。在进行运算的时候,我们不能直接让a、b直接相乘,因为在一个verilog叙述中只要有一个无号数的​​运算元,整个算式将被当成无号数进行计算。这个时候,因为输出是有符号的,我们最好把输入也变成有符号的,方便运算。因此我们首先需要把无符号的输入手动添加一个符号位后,使用 s i g n e d ( ) 把输入转换称为与 b 一样的有符号形式;如果不使用 signed()把输入转换称为与b一样的有符号形式;如果不使用 signed()把输入转换称为与b一样的有符号形式;如果不使用signed(),直接使用{1’b0,a}与b相乘,这样还是无符号*有符号,因此还是需要把{1’b0,a}转成有符号的形式。

同样地,当乘以一个常数时,也要用$signed()把常数转换一下:

input signed [7:0] a;
output signed [15:0] o;// Don't do this: assign o = a * 8'b10111111;
// Use $signed() system task
assign o = a * $signed(8'b10111111);
// or sb keyword.
assign o = a * 8'sb10111111;

还有一个需要的是,部分选择(也就是进行位选的时候),位选运算过后的结果是无号数!!!就算是选择的范围包含整个register或wire,例子如下所示:

input signed [7:0] a;
input signed [7:0] b;
output signed [15:0] o1, o2;// Don't do this: assign o1 = a[7:0];//a[7:0]是得到的是无符号数,将一个无符号赋值给一个有符号数的时候,结果肯定会出错
assign o1 = a;
// Don't do this: assign o2 = a[6:0] * b;
assign o2 = $signed(a[6:0]) + b

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

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

相关文章

在IDEA中连接达梦数据库:详细配置指南

达梦数据库(DM Database)作为国产关系型数据库的代表,广泛应用于企业级系统开发。本文将详细介绍如何在IntelliJ IDEA中配置并连接达梦数据库,助力开发者高效完成数据库开发工作。 准备工作 1. 下载达梦JDBC驱动 访问达梦官方资…

app.config.globalProperties

目录 一:基础使用 1、简介 2、使用 3、打印结果: 二:封装 1、创建一个.ts文件(utils/msg.ts) 2、在main.ts中全局注册 3、在页面中使用 4、打印结果 一:基础使用 1、简介 app.config.globalProperties 是 Vue 3 应用实例(app)的一个配置属性&…

16.使用读写包操作Excel文件:XlsxWriter 包

一 XlsxWriter 的介绍 XlsxWriter 只能写入 Excel 文件。 OpenPyXL 和 XlsxWriter 的区别在笔记 15 。 二 如何使用 XlsxWriter 1.导包 import datetime as dtimport xlsxwriterimport excel 2.实例化工作簿 book xlsxwriter.Workbook("xlxswriter.xlsx") book.clo…

ChatGPT and Claude国内使用站点

RawChat kelaode chatgptplus chatopens(4.o mini免费,plus收费) 网页: 定价: wildcard 网页: 虚拟卡定价: 2233.ai 网页: 定价: MaynorAPI chatgpt cla…

【MySQL】MySQL审计工具Audit Plugin安装使用

MySQL审计工具Audit Plugin安装使用 https://www.cnblogs.com/waynechou/p/mysql_audit.html MySQL 5.6 开启审计功能 https://blog.51cto.com/u_15127556/4344503 MySQL之添加日志审计功能 https://blog.csdn.net/weixin_43279032/article/details/105507170 MySQL开启日志记录…

Git——分布式版本控制工具使用教程

本文主要介绍两种版本控制工具——SVN和Git的概念,接着会讲到Git的安装,Git常用的命令,以及怎么在Vscode中使用Git。帮助新手小白快速上手Git。 1. SVN和Git介绍 1.1 SVN 集中式版本控制工具,版本库是集中存放在中央服务器的&am…

压测实战 | 微信小程序商城 “双 11” 的压测实践

背景 某全球知名珠宝品牌,始终以创新驱动零售变革。随着全渠道战略的深化,其小程序官方商城逐渐成为品牌私域流量的核心阵地,不仅承载了线上销售、会员运营等功能,同时还与其内部系统打通,如会员管理系统、人力资源系…

垃圾分类--环境配置

写在前面: 如果你们打这届比赛时,还有我们所保留的内存卡,那么插上即可运行(因为内存卡里我们已经配置好所有的环境) 本文提供两种环境的配置 一种是基于yolov8:YOLOv8 - Ultralytics YOLO Docshttps://d…

工具(十二):Java导出MySQL数据库表结构信息到excel

一、背景 遇到需求&#xff1a;将指定数据库表设计&#xff0c;统一导出到一个Excel中&#xff0c;存档查看。 如果一个一个弄&#xff0c;很复杂&#xff0c;耗时长。 二、写一个工具导出下 废话少絮&#xff0c;上码&#xff1a; 2.1 pom导入 <dependency><grou…

Postman 新手入门指南:从零开始掌握 API 测试

Postman 新手入门指南&#xff1a;从零开始掌握 API 测试 一、Postman 是什么&#xff1f; Postman 是一款功能强大的 API 开发与测试工具&#xff0c;支持 HTTP 请求调试、自动化测试、团队协作等功能。无论是开发人员还是测试工程师&#xff0c;都可以用它快速验证接口的正确…

【软件工程】03_软件需求分析

3.1 系统分析 1. 系统分析概述 系统分析是一组统称为计算机系统工程的活动。它着眼于所有的系统元素,而非仅仅局限于软件。系统分析主要探索软件项目的目标、市场预期、主要的技术指标等,其目的在于帮助决策者做出是否进行软件项目立项的决定。 2. 可行性分析(Feasibility …

WD5202L超低成本 Buck 电源芯片的特性与应用电路解析, 将市电转换为 5V 电压

WD5202L&#xff1a;超低成本 Buck 电源芯片的特性与应用电路解析 在现代电子设备的小型化、低成本化趋势下&#xff0c;对电源管理芯片的性能、成本和尺寸提出了严苛要求。WD5202L 作为一款超低成本的 Buck 电源芯片&#xff0c;凭借其独特的特性&#xff0c;在众多应用场景中…

UART转AHB模块ModelSim仿真

一、简介 UART转AHB模块用于实现一种简单的通过上位机控制FPGA内部寄存器的方式。上位机通过串口助手发送读写寄存器的指令&#xff0c;UART转AHB模块接收指令后解析出地址&#xff0c;命令&#xff0c;数据信息&#xff0c;然后转成AHB总线格式输出。这时UART转AHB模块相当于A…

Qt5.15.2实现Qt for WebAssembly与示例

目录 1.什么是Qt for WebAssembly&#xff1f; 1.1 什么是 WebAssembly&#xff1f; 1.2 WebAssembly 的优势 1.3 什么是 Qt for WebAssembly&#xff1f; 1.4 Qt for WebAssembly 的特点 1.5 编译过程 1.6 运行时环境 注意&#xff01;&#xff01;&#xff01;注意&am…

AGI大模型(8):提示词的安全与防护

1 前言 著名的「奶奶漏洞」&#xff0c;⽤套路把 AI 绕懵。 2 常⻅的提示词攻击技术 2.1 同类型⽬标劫持 同类⽬标劫持攻击&#xff0c;特别是在同类型任务的背景下&#xff0c;涉及到攻击者通过⾮法⼿段控制模型&#xff0c;并迫使其执行与原始任务性质相同但⽬标不同的操作…

专题三搜索插入位置

1.题目 题目分析&#xff1a; 给一个目标值&#xff0c;然后要在排序的整数数组中&#xff0c;找到跟目标值一样的&#xff0c;如果没有就把这个值插入进去&#xff0c;然后返回插入后的下标。 2.算法原理 根据题目的时间复杂度可以知道要用二分&#xff0c;开始划分区域&…

Linux 进程的创建、终止、等待与程序替换函数 保姆级讲解

目录 一、 进程创建 fork函数 二、进程的终止&#xff1a; 1. 想明白&#xff1a;终止是在做什么&#xff1f; 2.进程终止的3种情况&#xff1f; a.退出码是什么&#xff1f;存在原因&#xff1f;为什么int main&#xff08;&#xff09;return 0? b.第三种进程终止的情况…

深入了解Linux —— git三板斧

版本控制器git 为了我们方便管理不同版本的文件&#xff0c;就有了版本控制器&#xff1b; 所谓的版本控制器&#xff0c;就是能够了解到一个文件的历史记录&#xff08;修改记录&#xff09;&#xff1b;简单来说就是记录每一次的改动和版本迭代的一个管理系统&#xff0c;同…

STM32---FreeRTOS事件标志组

一、简介 事件标志位&#xff1a;用一个位&#xff0c;来表示事件是否发生 事件标志组&#xff1a;一组事件标志位的集合&#xff0c;可以简单的理解时间标志组&#xff0c;就是一个整体。 事件标志租的特点&#xff1a; 它的每一个位表示一个时间&#xff08;高8位不算&…

在centOS Linux系统搭建自动化构建工具Jenkins

前言 在工作中发现公司使用Jenkins实现自动化部署项目方案&#xff0c;于是闲着自己也捣鼓一下&#xff0c;网上查阅相关部署资料&#xff0c;顺便记录操作步骤&#xff0c;所以有了下面这篇的文章。 部署完之后&#xff0c;安装前端项目所需环境&#xff0c;比如node环境&am…